超级HOOK技术无需分析基址
在我們讀取游戲中各種數據時候,都是要找游戲的基址和相關偏移量來讀取數據的,
而有的游戲找數據的基址是會比較繁瑣和難的,那怎么辦呢?
新手對復雜的游戲的數據結構不知道如何分析基址,
就讀取不到想要的數據,就無法制作外掛程序相關的功能,難道就沒辦法了嗎?
當然不是,GAME-EC 模塊里的 類_超級HOOK 可以完成這點,不需要找到游戲數據的基址和偏移量,
超級HOOK是在2011-12-12 03:00 時間開發出來的功能,是中國網絡上易語言最早的創造出這功能的,
凡是時間 2011-12-12 03:00 之后其他網站出的超級HOOK都是山寨的不穩定。
這個功能可以做很多事情,也可以截取游戲各種數據信息,
超級HOOK的原理是:
在HOOK指定地址,攔截經過該地址的所有寄存器數據信息,
然后傳遞一份給我們自己的程序,就好比安裝了個竊聽器一樣,對方經過這個地方時候,所有的寄存器信息數據我們都會被監聽到
下面就舉個例子演示下超級HOOK的功能使用
先找到游戲里指定數據的正確內存地址,這里用 亮劍 游戲示范,
其他游戲也是一樣的思路,只是數據地址找法不一樣而已,
首選用CE搜索游戲坐標值,找到關聯的內存地址即可
找到數據的內存地址后,我們加入到下面地址列表去,然后鼠標右鍵查看第一條地址的代碼:
進入游戲走動一下,
出現了 mov 指令數據傳送的代碼即可,然后選擇一條 mov 指令的匯編代碼 (最好是有+偏移量的),
如圖:
我們選擇一條mov的代碼
比如: mov 寄存器,[寄存器+偏移量] 這樣的代碼最好
當然如果實在沒有偏移量的話,也可以,比如上例中的
009D210C - 89 47 14 - mov [edi+14],eax <<
形式是 mov [寄存器+偏移量],寄存器 或 mov 寄存器,寄存器 的都可以,我們只需根據HOOK的匯編代碼的形式來寫代碼即可
那么有偏移的mov指令代碼就優先選擇,這里我們就選擇:
009D7A72 - 8B 46 14 - mov eax,[esi+14] << 這條代碼HOOK
但是這條代碼只有 3個字節( 8B 46 14 ),我們的超級HOOK必須HOOK 至少5個字節的代碼,
否則會HOOK失敗奔潰!
像我們示范的游戲這種時候需要注意了,
如果HOOK的地址的匯編代碼不夠5個字節,我們就可以找下它上面或下面的一條代碼或兩條代碼,
湊夠5個字節或5個字節以上即可,
比如我們現在HOOK的地址 009D7A72 這句匯編代碼不夠5個字節,我們就可以把它下一行的代碼也HOOK進來
009D7A6A - 84 C0 - test al,al
009D7A6C - 0F84 73010000 - je cHelpZipFile::GetKBpS+5ACA05
009D7A72 - 8B 46 14 - mov eax,[esi+14] <<
009D7A75 - 8B 4E 18 - mov ecx,[esi+18]
009D7A78 - 57 - push edi
HOOK 009D7A72 的代碼3個字節 + 下面的一行代碼 3個字節 就是:8B 46 14 8B 4E 18 就有6個字節了,滿足HOOK條件
那么總結這個游戲的X坐標數據HOOK信息是:
HOOK的地址:009D7A72
HOOK的長度:6
HOOK的起始代碼:mov eax,[esi+14]
下面我們就來寫超級HOOK代碼 來截取X數據顯示到我們的小外掛里面:
運行后,效果:
運行后,成功攔截到了游戲的指定數據,然后讀取顯示在我們的外掛程序里面,
這樣就不需要去辛苦分析游戲的基址和偏移量來讀取游戲的數據信息了,
提醒:我們做外掛程序,思維別太死板,只要我們能讀取到游戲的數據信息,不管用什么方式去讀取到的數據,能用就行!
因為我們要的是數據信息來執行操作游戲的相關,
當然有的學員可能會說,超級HOOK 截取到的游戲數據信息,
換臺電腦后是不是也可以正確讀取數據, 我在這里告訴大家:這是當然可以的,依然可以讀取到哦
超級HOOK的數據截取讀取 與 通過數據的 基址 + 偏移量 讀取來的數據一樣穩定,
編譯后,換電腦一樣可以讀取到數據,因為它截取的不是動態內存地址里面的數據,而是截取游戲進程的匯編代碼的數據信息!
另外超級HOOK,還可以對指定進程你的API函數HOOK噢,來獲取指定進程API執行的信息,達到監視的效果!
源碼下載:http://bbs.dult.cn/thread-10417-1-1.html
總結
以上是生活随笔為你收集整理的超级HOOK技术无需分析基址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员必看!java开发金融类项目
- 下一篇: Python导入模块,Python im