获取任意进程任意模块的基址
代码如下://通过进程ID获取某模块的基址
void GetMoudleBaseAddr(DWORD dwPid, const TCHAR* szDllName, DWORD& dwDllBase)
{
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // 进程快照句柄
PROCESSENTRY32 pi = { sizeof(PROCESSENTRY32) }; // 快照信息
// 遍历进程
while (Process32Next(hProcessSnap, &pi))
{
if (pi.th32ProcessID == dwPid)
{
HANDLEhModuleSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pi.th32ProcessID); // 模块快照句柄
MODULEENTRY32 me32 = { 0 };// 模块入口
me32.dwSize = sizeof(MODULEENTRY32);// 申请空间
// 打印模块名
while (::Module32Next(hModuleSnap, &me32))
{
if (_tcscmp(me32.szModule, szDllName) == 0)
{
dwDllBase = (DWORD)me32.modBaseAddr;
break;
}
}
return;
}
}
}
```
```
//通过进程名获取某模块的基址
void GetMoudleBaseAddr(const TCHAR* szProcName, const TCHAR* szDllName, DWORD& dwDllBase)
{
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // 进程快照句柄
PROCESSENTRY32 pi = { sizeof(PROCESSENTRY32) }; // 快照信息
// 遍历进程
while (Process32Next(hProcessSnap, &pi))
{
if (_tcscmp(pi.szExeFile, szProcName) != 0)
{
continue;
}
HANDLEhModuleSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pi.th32ProcessID); // 模块快照句柄
MODULEENTRY32 me32 = { 0 };// 模块入口
me32.dwSize = sizeof(MODULEENTRY32);// 申请空间
// 打印模块名
while (::Module32Next(hModuleSnap, &me32))
{
if (_tcscmp(me32.szModule, szDllName) == 0)
{
dwDllBase = (DWORD)me32.modBaseAddr;
break;
}
}
break;
}
}
好多干货 拿到模块基址还是不够, 还要加上搜索特征码拿到地址 全盘搜索指定的DLL怎么写, 游戏会查找挂用到的特定DLL.要破解不知道他用的什么函数. 特征码 不是特征码,是查找的文件名称, 比如mogui.dll,在C盘驱动目录下, 游戏把文件名上传到服务器了,全盘查找特定文件名怎么写 那不就是遍历文件么 可以研究一下Everything是怎么快速搜索文件的 啥也不说了,感谢老师 感谢分享
页:
[1]