本帖最后由 KongKong20 于 2020-6-27 11:54 编辑
前言
这一篇,开始实战。用到找偏移的第一个方法:内存搜索。目的是获得用户信息。
一、找偏移
1、分析
用户信息,属于获得数据。
全局数据搜索,局部数据拦截。
对于经常用到,又不怎么变动的数据,用全局变量会比较方便。
用户信息,基本不会变动,也很多地方会用到,猜测是用全局变量存储。
2、方法
对于全局变量,用CE进行内存搜索,看能不能找到。
3、验证
1、看下自己的登陆信息
2、用CE搜索用户名
搜索结果有绿色的,说明偏移是固定。
3、看下内存附近信息
也有省份这些信息,说明个人信息是存在一起的
4、结论
个人信息,确实是全局数据,可以直接搜索得到。
5、OD查看更多信息
用OD,可以更方便的查看更多的内存数据
在CE中搜到的内存地址是5D49498C,在OD中可以看到
1、dc 内存地址,能看到地址附加的文本
2、dd 内存地址,能看到地址附加的指针所指向的文本(文本较长的情况,会用到指针)
往下翻翻,能找到头像的指针和WXID的指针
6、计算偏移
偏移 = 内存地址 - 模块基址
内存地址已经知道,看下模块基址是什么?
在CE中可以看出,用户名的数据所在模块是WeChatWin.dll
OD可以看到WeChatWin.dll的基址是5BDE0000
Executable modules, 条目 8
基址=5BDE0000
大小=01946000 (26501120.)
入口=5CB34A63 WeChatWi.<ModuleEntryPoint>
名称=WeChatWi
文件版本=2.9.0.123
路径=C:\Program Files (x86)\Tencent\WeChat\WeChatWin.dll
对应的偏移就可以计算出来了
用户名 : 5D49498C - 5BDE0000 = 16B498C
WXID指针 : 5D494D90 - 5BDE0000 = 16B4D90
其他信息同理,自行计算下
二、写代码
1、外部工具
1、新建MFC项目
2、编写代码
外部读取的函数是ReadProcessMemory
代码有详细备注,仔细阅读应该能看懂
2、内部工具
1、新建DLL项目
2、编写代码
3、用OD把DLL注入到目标软件
4、运行结果
|