admin 发表于 2022-9-26 12:57:26

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

代码如下:

//通过进程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;
    }
}

妮妮 发表于 2022-9-26 14:26:13

好多干货

塞外风 发表于 2022-12-28 04:45:17

拿到模块基址还是不够, 还要加上搜索特征码拿到地址

塞外风 发表于 2022-12-28 04:50:16

全盘搜索指定的DLL怎么写, 游戏会查找挂用到的特定DLL.要破解不知道他用的什么函数.

admin 发表于 2022-12-29 08:53:43

特征码

塞外风 发表于 2022-12-31 21:22:43

不是特征码,是查找的文件名称, 比如mogui.dll,在C盘驱动目录下, 游戏把文件名上传到服务器了,全盘查找特定文件名怎么写

admin 发表于 2023-1-1 21:54:14

那不就是遍历文件么

柳萱公子 发表于 2023-1-2 16:36:03

可以研究一下Everything是怎么快速搜索文件的

399998yyy 发表于 2023-3-10 17:07:50

啥也不说了,感谢老师

alexpy 发表于 2024-7-24 00:04:37

感谢分享
页: [1]
查看完整版本: 获取任意进程任意模块的基址