來源:http://ibf.tw/v2NbU
備註:如果作者不希望被轉帖到此處,請告知,小弟會馬上刪帖。
-------------------------------------------------------------------------------------
步驟 9:注入++ (PW=31337157)
這一步基本上和步驟 7(代碼注入,手記中的第六關)的做法是相似的,不過會稍稍有點難度。
本關你必須用一小段代碼來修改減少血值的原代碼,並且做到,如果當前時間的秒數大於或等於 30 將血值設置為1000,如果當前時間的秒數小於 30 將血值設置為 2000。
我們可以用 API 調用函數獲取當前的時間,並利用 自動匯編 完成這項任務,但這裡好象有更簡單的做法:C語言腳本注入。
找到血量的地址,然後打開 CE 腳本引擎 (內存查看器窗口 快捷鍵:ctrl+alt+a ,或是點擊 工具->腳本引擎)。
然後,和其它的教程不同的是,這在裡我會多給你一些提示(假設你從未接觸過C語言)。
----------------
#include <time.h>
struct tm *timep;
time_t c;
c=time(0);
timep=localtime(&c);
if (timep->tm_sec>=30)
*(int *)addresstochange=1000;
else
*(int *)addresstochange=2000;
-------------
使用血值的地址替換代碼中的 addresstochange,另外,不要忘記在地址的前面加上 0x 。比如,地址是 0012345,則輸入 0x0012345
選擇 "注入" ,"注入到當前進程" ,將代碼注入到當前進程,此時,"自動匯編"窗口 彈出,並自動生成調用代碼(Call)。
現在,就象步驟 7 (手記中的第六關)那樣,在 "內存查看器"窗口 選擇代碼地址,在 "自動匯編"窗口 選擇 "模板","代碼注入",輸入剛才獲取的調用代碼(Call)。 要注意的是,調用代碼(Call)將更改 寄存器 EAX 的數據,因此,有必要的話,你應該在壓棧之前和出棧之後保存它, 你也可以將原代碼移除,它在這裡也起不到什麼作用了。
點擊 "執行" ,點擊 Tutorial.exe 窗口上 "Hit me" 。
如果沒什麼問題的話,血值會按照當前的時間變動。
額外信息:
正如前面所說,CE 支持標準的匯編語言。所以,你可以在代碼中使用函數名稱來調用函數。
你也可以在腳本中引用 DLL 文件,例如:
injectdll(mydll.dll) // 可以使用你喜歡的語言去寫DLL文件
codecave:
call functionofmydll
jmp exit
這一關,多少得了解一點點的C語言,不過,作者怕我們沒有接觸過C語言,給了我們一段C語言的代碼,在說明的結尾又告訴我們,可以引用我們自己用任何語言寫的DLL文件,增加CE腳本的靈活性;雖然有點頭蒙,不過完成本關不需要那麼麻煩,還是一步一步的來。
我們先查找 Tutorial.exe 中的數值地址,找到後,"查看寫入該地址的代碼",點擊 Tutorial.exe 中的 "Hit me" ,"顯示反匯編",如下圖:
在 "內存查看器"窗口 中打開 "腳本引擎" ,如下圖:
在 "腳本引擎" 窗口 填入說明中的那段代碼,並將 addresstochange 替換成我們查找到的數值地址,如下圖:
你可以按上圖在原代碼中加入 紅框標識出的 代碼(聲名變量並賦值,值為地址,記得地址前要加 0x),也可以直接用地址替換掉 addresstochange ;將寫好後的代碼注入當前進程,如下圖:
在打開的 "自動匯編"窗口 中 生成了調用代碼,如下圖:
在 "內存查看器" 選擇查找到的匯編地址,回到 "自動匯編"窗口 選擇 "模板" 中的 "代碼注入",如下圖:
CE 自動將選擇的匯編地址填入(如果不正確,可以手動填寫),如下圖:
"確定" ,生成如下圖代碼:
我們需要將代碼修改一下,將 call 這一條放置在 newmem 區域,將原代碼註銷掉,如下圖:
小提示:好多網友在這段代碼改寫完,出現了結果為 999 或 1999 的這種情況,這可能是我沒標注清楚的原因,請大家留意上圖中代碼 "dec [ebx+00000318]" 前邊我添加了 "//" ,這表示將這條代碼注釋掉了,好多網友出現了這種情況應該都是忘了注釋掉它的結果;感謝78461 網友的提醒!
原理在第六關已解釋過了,在這就不多講了吧,點擊 "執行" ,回到 "內存查看器" 窗口,可以看到,原代碼地址處的代碼已修改,如下圖:
OK,我們已完成代碼段的注入,現在可以點擊 "Hit me" 了,說明中給出的C語言代碼,是調用了本地的時間,如果秒數大於等於30秒,就將血加到 1000 ,小於30秒,將血加到2000,如果一切沒問題的話,next 按鈕激活。我給出兩張不同時間的對比圖:
點擊 next 按鈕,通關畫面,可惜不是動畫的……
至此,教學八關就完成了,但這僅僅是個基礎,有空我們再研究如何實戰,以及如何製作遊戲的修改器~
沒有留言:
張貼留言