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