获取任意进程任意模块的基址

admin · · 编程&逆向技术交流
8

本文共计1896个字,预计阅读时长7.6分钟。

代码如下:
//通过进程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)
        {
            HANDLE  hModuleSnap = ::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;
        }
       

        HANDLE  hModuleSnap = ::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;
    }
}
最后于 2023-2-26 被admin编辑 ,原因:

最新回复 ( 8 )
全部楼主
  • 妮妮 @Ta
    2
    好多干货
  • 塞外风 @Ta
    3
    拿到模块基址还是不够, 还要加上搜索特征码拿到地址
  • 塞外风 @Ta
    4
    全盘搜索指定的DLL怎么写, 游戏会查找挂用到的特定DLL.要破解不知道他用的什么函数.
  • admin @Ta
    5
    塞外风 全盘搜索指定的DLL怎么写, 游戏会查找挂用到的特定DLL.要破解不知道他用的什么函数.
    特征码
  • 塞外风 @Ta
    6
    不是特征码,是查找的文件名称, 比如mogui.dll,在C盘驱动目录下, 游戏把文件名上传到服务器了,全盘查找特定文件名怎么写
  • admin @Ta
    7
    塞外风 不是特征码,是查找的文件名称, 比如mogui.dll,在C盘驱动目录下, 游戏把文件名上传到服务器了,全盘查找特定文件名怎么写
    那不就是遍历文件么
  • 8
    塞外风 不是特征码,是查找的文件名称, 比如mogui.dll,在C盘驱动目录下, 游戏把文件名上传到服务器了,全盘查找特定文件名怎么写
    可以研究一下Everything是怎么快速搜索文件的
  • 399998yyy @Ta
    9
    啥也不说了,感谢老师