郁金香外挂技术-郁金香灬老师

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 229|回复: 0

C,C++特征码定位基址偏移-获取目标进程模块基址

[复制链接]
发表于 2021-12-21 22:49:28 | 显示全部楼层 |阅读模式



  本课知识点
      C,C++特征码定位基址偏移-获取目标进程模块基址
          0-7FFFFFFFFFFFFFFF
          跨进程版本设计->
          
          HWND->PID->进程句柄
          游戏进程主模块起始地址       
          
          游戏进程所在全路径
          获取模块大小
          //获取所有ER属性内存范围
          把字符串特征码转字节集
          内存特征搜索比较找到地址
          根据指令地址和指令长度计算出基址偏移
          格式化写文件
          
          
          0x3D11FFE  13F420000+3D13000-1
          0x6247000


#include "CFind_Offset.h"


HWND  CFind_Offset::GetHwnd()
{
        HWND h = FindWindowA("UnrealWindow", NULL); //"UnrealWindow"  //"Mir4G[1]"
        if (h)
        {
                return h;
        }
        else
        {
                printf("Error line=%d FindWindowA ret NULL 游戏未打开 \r\n", __LINE__);
                getchar();
        }
        return 0;
};
DWORD CFind_Offset::GetPID()
{
        HWND h = GetHwnd();
        DWORD pid = 0;
        GetWindowThreadProcessId(h, &pid);

        return pid;
};

HANDLE CFind_Offset::GetProcessHandle()
{
        DWORD pid = GetPID();
        HANDLE hp = OpenProcess(PROCESS_ALL_ACCESS, false, pid);//如失败,返回值为空,可调用GetLastError获得错误代码。
        if (hp==NULL )
        {
                printf("Error line=%d OpenProcess ret NULL GetLastError()=%d \r\n", __LINE__, GetLastError());
                getchar();
        }
        return hp;
};

UINT_PTR CFind_Offset::GetExeBase()
{
        //return GetModuleHandleA(NULL); //注入的DLL
        static        UINT_PTR exeBase64 = NULL;
        HMODULE hMods[1024]; //20*sizeof(HMODULE ) //160
        DWORD cbNeeded;
        unsigned int i;
        HANDLE 进程句柄 = GetProcessHandle();
        if (exeBase64) return exeBase64;
        // Get a list of all the modules in this process.
        BOOL br = EnumProcessModules(进程句柄, hMods, sizeof(hMods), &cbNeeded);
        if (br)
        {
                UINT32 模块数量 = cbNeeded / sizeof(HMODULE);
                for (i = 0; i < 模块数量; i++)
                {
                        TCHAR szModName[MAX_PATH];

                        // Get the full path to the module's file.

                        if (GetModuleFileNameEx(进程句柄, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR)))
                        {
                                //如果是 .exe模块 直接返回基址
                                if (strstr(szModName, ".exe")) //*.bin *.dat
                                {
                                        exeBase64 = (UINT_PTR)hMods[i]; //hMods[0]
                                        printf("主模块Mir4G.exe地址=%llX  i=%d\r\n", exeBase64, i);
                                }
         
                        }
                }
        }
        else
        {
                /*
        〖0〗-操作成功完成。
  〖1〗-功能错误。
  〖2〗-系统找不到指定的文件。
  〖3〗-系统找不到指定的路径。
  〖4〗-系统无法打开文件。
  〖5〗-拒绝访问。
  〖6〗-句柄无效。
                */
                printf("Error EnumProcessModules line=%d  GetLastError=%d 进程句柄=%p", __LINE__,GetLastError(), 进程句柄);
                getchar();
        }

        // Release the handle to the process.

        CloseHandle(进程句柄);

        return exeBase64;
}








郁金香外挂教程,学习中...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|郁金香外挂技术-郁金香灬老师 ( 苏ICP备10059359号 )

GMT+8, 2022-1-18 19:08 , Processed in 0.038720 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表