- 注册时间
 - 2021-4-16
 
- 最后登录
 - 2025-1-4
 
- 在线时间
 - 5 小时
 
 
 
 
 
编程入门 
  
	- 龙马币
 - 54 
 
 
 
 
 | 
 
 
想要获取一个进程里面的某个数据,需要先知道这个数据的位置 
对于全局变量:偏移是固定的,可以通过“基址+偏移”直接定位 
对于局部变量:位置是随机的,只能通过拦截或者搜索去定位 
 
分析企业微信的时候,发现很多数据都不是全局变量,不能像个人微信那样直接跨进程读取。 
如果能够用代码模仿Cheat Engine进行内存搜索,就可以定位到局部变量,进而实现非注入读取。甚至可以做到兼容所有版本(比如登录二维码,直接内存扫描出来)。 
   
Cheat Engine是开源的,下面是特征码搜索的源码: 
- DWORD AOBScan(HANDLE hProcess, const char* pattern, const char* mask, uint64_t start, uint64_t end, int inc, int protection,uint64_t * match_addr)
 
 - {
 
 -     // 查询内存块信息,看下是不是可读可写可执行
 
 -     VirtualQueryEx(hProcess, (void*)tmp, &rinfo, NULL);
 
 -     if((rinfo.protection & protection) != 0) ...
 
  
-     // 读取内存,用暴力算法BF(Brute Force)算法进行字符匹配
 
 -     ReadProcessMemory(hProcess, (void*)tmp2, MemoryBuff, 4096)
 
 -     for (int i = 0; i < 4096; i += inc)
 
 -         for (int k = 0; k < patternLength; k++)
 
 -             if (!(mask[k] == '?' || pattern[k] == (MemoryBuff[k])))
 
 - }
 
 
  复制代码 
 
 
 
 |   
 
 
 
 |