前言
這一篇,開始實戰。用到找偏移的第一個方法:內存搜索。目的是獲得用戶信息。
一、找偏移
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、運行結果