/
/
4.0
.
2.6026
这个用下面代码没啥问题
/
/
多开全局配置hook地址
/
/
上一层的hook看个人喜好了,都不一样的哈,这一层也是,个人觉得这种用起来爽一点
DWORD HookGlobalEsp
=
{
0
};
DWORD HookGlobalJmp
=
{
0
};
DWORD HookGlobalCall
=
{
0
};
void __declspec(naked) decGlobal() {
__asm {
mov HookGlobalEsp, esp
pushad
}
GlobalReplace(HookGlobalEsp);
HookGlobalCall
=
getWxWorkAddBase()
+
HOOK_GLOBAL_ORIGIN;
HookGlobalJmp
=
getWxWorkAddBase()
+
HOOK_GLOBAL
+
HOOK_LEN;
__asm {
popad
call HookGlobalCall
jmp HookGlobalJmp
}
}
DWORD GlobalReplace(DWORD esp)
{
if
(strfileUserId !
=
"") {
/
/
这块是需要获取到 wxWork 生成的绝对路劲哈,这样生成一个HistoryLogin文件夹 这样方便之后自动登录的时候查找到自动登录所需要的账户使用的文件夹是哪一个
CHAR systemUserPath[
0x100
]
=
{
0
};
DWORD ps
=
*
(DWORD
*
)(
*
(DWORD
*
)esp);
ReadProcessMemory(GetCurrentProcess(), (LPCVOID)ps, systemUserPath,
0x100
, NULL);
LPCWSTR tt
=
(LPCWSTR)systemUserPath;
string path
=
WCharToMByte(tt);
path.append(
"\\HistoryLogin\\"
);
path.append(strfileUserId);
string dirName
=
getDirName(path);
if
(dirName
=
=
"") {
/
/
getUUID() 需要自己处理下 这块我就是生成了一大串字符串而已,UUID生成器
strfileName
=
getUUID();
}
else
{
strfileName
=
dirName;
}
}
else
{
strfileName
=
getUUID();
}
strfileNameTwo
=
strfileName;
DWORD fileName
=
getVariableAdd((DWORD)&strfileName);
*
(DWORD
*
)(esp
+
0x1c
)
=
fileName;
return
TRUE;
}
/
/
/
/
4.0
.
8.6604
这块需要处理下 当然了 自己hook相关地方 能达到效果也是一样
/
/
/
/
多开全局配置hook地址
/
/
/
/
DWORD GlobalReplace(DWORD esp)
{
/
/
设置目录路径
strfileName
=
getStrfileName();
DWORD
*
length
=
(DWORD
*
)(esp
+
0x4
);
/
/
1.
设置文件名长度
int
WriteValue
=
strfileName.length();
*
length
=
WriteValue;
/
/
2.
修改Global目录名
wchar_t nextName[
100
];
memset(nextName,
0
,
100
);
wsprintf(nextName, L
"%s"
, strfileName.c_str());
DWORD odp
=
0
;
DWORD da
=
*
((DWORD
*
)esp);
VirtualProtect((LPVOID)da, sizeof(nextName), PAGE_EXECUTE_READWRITE, &odp);
if
(WriteProcessMemory(GetCurrentProcess(), (LPVOID)da, nextName, sizeof(nextName), NULL) !
=
0
) {
VirtualProtect((LPVOID)da, sizeof(nextName), odp, &odp);
}
return
TRUE;
}