來源:http://ibf.tw/v2NbU
備註:如果作者不希望被轉帖到此處,請告知,小弟會馬上刪帖。
-------------------------------------------------------------------------------------
結合第四關與第五關的教程,可以將數值存儲的真正地址找出來,鎖定數值或修改遊戲中的代碼,如果你想製作在任何電腦上都能使用的修改器補丁,那麼這兩關的學習至少是個前題。
本關的說明解釋如下:
步驟 7:代碼注入 (PW=013370)
代碼注入是將一小段代碼注入到目標進程中的技巧,然後使這個進程執行你寫入的代碼。
在這一步教程中,你將有一個血值和一個每按一次將減少1點血值的按鈕,你的任務是利用 代碼注入 ,使得每按一次按鈕增加2點的血值。
開始查找這個地址,然後查看是什麼在改寫它("查找寫入此地址的代碼")。
當你看到那條減少數值的匯編代碼已經後,選擇 "顯示反匯編程序" , 然後打開 自動匯編窗口 (菜單-工具->自動匯編 或 按下快捷鍵 Ctrl+a ),選擇 "模板" 中的 "代碼注入" 。CE將自動生成一部分匯編代碼並為你輸入指令做好準備(如果CE沒有給出正確的地址,你可以手工輸入它)。
注意 alloc 這部分代碼,它會為你的代碼分配出一小塊空白的內存,過去,在 Win2000 之前的系統,這種行為存在安全隱患,很可能導致系統崩潰,幸運的是,這種情況在 win2000 以後的操作系統得到改善
。
也要注意 line newmem 這部分代碼,原代碼,以及用文本 "此處放置你的代碼" 標示出的空白部分,正如你猜測的,在這兒可以寫下每次增加2點血值的代碼。
推薦你使用 "ADD" 匯編指令,下面是一些示例:
"ADD [00901234],9" 使 [00901234] 地址的值增加9
"ADD [ESP+4],9" 使地址指針 [ESP+4] 的值增加9
在本關的情況下,你可以使用相同的手法去處理 減血值那條原代碼方栝號之間的那部分。
提示:
推薦你從原代碼中刪除減血值的那行代碼, 否則你得加3點生命值(你增加了3點,原代碼減去1點,最終結果才會增加2點),這樣看上去很容易讓人迷惑,但最終方案還是由你來決定好了。
提示:
某些遊戲中,原代碼可能在多條指令之外,有時候(並非一向如此),它可能由不同的地方跳轉至你的指令中並結束運行,其結果可能引起未知的錯誤;如果出現了 這種情況,通常應當查看附近的那些跳轉指令,進行修改,或者在嘗試使用不同地址進行 代碼注入,確認無誤後便可以將你修改的代碼注入原代碼中了。
本關的教程應當是第四關的補充,在第四關找到代碼只是簡單的改為空指令,遊戲運行到你修改後的指令什麼都不會做,比如,按照這樣的方法,我們可以製作買東 西不需要花錢的,又或是不掉血的修改補丁;這一次,我們深入一點,熟悉更多的匯編指令,如果弄明白,便可以製作出買東西倒找你錢,又或是越戰血越多的補丁 了。
這次我們不囉嗦,按著前幾關的介紹,查找到數值地址,右鍵 "查找寫入該地址的代碼" ,更改血值後,來到下圖這一步:![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_sNjeB-Yrastr5NPF5JZIvHLJ0n0r5yeQaFOoLe1RfQfHE_gKhFcaK0bDadIQs2pNiRJMNA08MhEOpcx4cERbqXCu-1aDa7Ic_meSWJ=s0-d)
點擊 "顯示反匯編" ,打開 "內存查看器" 窗口,如下圖:
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_urtXEqWQzU7jatUJ_NCmO5ZoEygXwywoERD5k0rDo46iSQRfe_LI4NjGTYjg21JboiUitf0zOWKz5elGt5nYdKCfv3UzJybYkPl28p9w=s0-d)
在 工具 菜單中選擇 "自動匯編 或 按下快捷鍵 Ctrl+a ",如下圖:
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_vF1wSBnvLSj9hnJEglNTJkxDDpVQ1HFKf-1ld6TXaU-lDaVLwkITxf8fsMw1fPzMFhxRkMNX0CePqy2QQ0hJ3i5r4yK9dUH2YuULE3=s0-d)
按下圖打開 "代碼注入" :
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_vUeSqi8uW38V8cxnIqnbHyrQmz4f8HeMcgPuUBV5KzqKBVqJ82AMPe1OsGUXuN5SxvOYjdqdE8is3QUgTp0r4KJKaHUOwCMnlfim2HZg=s0-d)
跳出地址填寫窗口,如下圖:
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_skwzcYDAZEp4XLBVL9jCgECuGFKvyYjwmYpV4Dj2g39OwysqJ7iZhiM1FoZ5Qx_YCs2CnU4Vi-OswDG8koSoCGtzISHiDL-LY-zM1Gcw=s0-d)
點擊 確定 ,自動匯編已幫我們創建了一部分的代碼,如下圖:
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_uD4Fvmzyou97flHlFN9CTeRwI34nasbAM2daLMj9Wth-2XXJ9DWjFBkI_JT247rQfucxx1q5XKH1Ja47MSVob0kedH-u4PzMzsPMiPOw=s0-d)
能看懂匯編的,就不用我多解釋了,這是一段很簡單的代碼,CE幫我們先開出了一小塊內存用於注入我們自己的代碼,然後在原地址處插入跳轉語句,跳入我們輸入的代碼段,執行完畢後再跳轉回原代碼繼續執行後邊的代碼。
現在我們要做的就是將加血的代碼輸入在圖中 newmem 的位置,如下圖代碼所示:
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_tzZ5t7IusX1o4FL-9V9M2FZWFtDBOlweVeJJ5Tqcu_crxdlwgXSGfAsozHxIx8gkA6aF2l7lYeefFLPSmMaS4Xys63SC676kjCbTFSrA=s0-d)
你可以按照說明中所說的那樣,在 newmem 區域,寫入 "add [ebx+00000310],3",加3的原因是因為在執行完我們輸入的代碼後,原代碼還要再減去1;當然,你也可以靈活運用我們的知識,直接將原代碼 改為 "add [ebx+00000310],2",那麼在 newmem 區域就不用輸寫任何代碼了,如下圖:
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_s73mb1G0rmpFyY9hmCBVQCnnzyPfNgqquDtXV-Po_60eU5RO8GER2l-qRwj_nkfQ39Bacd7yESUA6BUY4eqykp3JJvJZDPolyDKqfi=s0-d)
OK,寫完代碼,可以點擊 "執行" 按鈕了,彈出確認對話框,直按點擊 "是",彈出 注入成功的窗口,並提示我們,新的代碼段放置的位置,如下圖:
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_ufNT53pVZTRf-rsXiWDjLORAohppSKDeUXOT8NE7CA_PJ59IYU88tp0w1eRUj5IZlPZF-UQ7t8wBPYjkbTY89WX9sKrMbEH430SmwD=s0-d)
"確定" ,關閉 "自動匯編" 窗口,在 "內存查看器" 窗口 中的匯編代碼部分,可以看到,原代碼已被修改,如下圖:
![](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_ttY0YcBQTnjdhatW7EcI6tEGT_yA7rpC5RrelPQ422dRsISvwPAn4IelZ3QidvnkcO-b147eUx8T9M0FyLCHD99X46TtP2iD78dwiy=s0-d)
回到 Tutorial.exe 窗口 ,點 "Hit me" ,增加了2點血值,next 按鈕也可以點擊了,記下第七關的密碼(PW=525927),我們休息一下~
本關的說明解釋如下:
步驟 7:代碼注入 (PW=013370)
代碼注入是將一小段代碼注入到目標進程中的技巧,然後使這個進程執行你寫入的代碼。
在這一步教程中,你將有一個血值和一個每按一次將減少1點血值的按鈕,你的任務是利用 代碼注入 ,使得每按一次按鈕增加2點的血值。
開始查找這個地址,然後查看是什麼在改寫它("查找寫入此地址的代碼")。
當你看到那條減少數值的匯編代碼已經後,選擇 "顯示反匯編程序" , 然後打開 自動匯編窗口 (菜單-工具->自動匯編 或 按下快捷鍵 Ctrl+a ),選擇 "模板" 中的 "代碼注入" 。CE將自動生成一部分匯編代碼並為你輸入指令做好準備(如果CE沒有給出正確的地址,你可以手工輸入它)。
注意 alloc 這部分代碼,它會為你的代碼分配出一小塊空白的內存,過去,在 Win2000 之前的系統,這種行為存在安全隱患,很可能導致系統崩潰,幸運的是,這種情況在 win2000 以後的操作系統得到改善
。
也要注意 line newmem 這部分代碼,原代碼,以及用文本 "此處放置你的代碼" 標示出的空白部分,正如你猜測的,在這兒可以寫下每次增加2點血值的代碼。
推薦你使用 "ADD" 匯編指令,下面是一些示例:
"ADD [00901234],9" 使 [00901234] 地址的值增加9
"ADD [ESP+4],9" 使地址指針 [ESP+4] 的值增加9
在本關的情況下,你可以使用相同的手法去處理 減血值那條原代碼方栝號之間的那部分。
提示:
推薦你從原代碼中刪除減血值的那行代碼, 否則你得加3點生命值(你增加了3點,原代碼減去1點,最終結果才會增加2點),這樣看上去很容易讓人迷惑,但最終方案還是由你來決定好了。
提示:
某些遊戲中,原代碼可能在多條指令之外,有時候(並非一向如此),它可能由不同的地方跳轉至你的指令中並結束運行,其結果可能引起未知的錯誤;如果出現了 這種情況,通常應當查看附近的那些跳轉指令,進行修改,或者在嘗試使用不同地址進行 代碼注入,確認無誤後便可以將你修改的代碼注入原代碼中了。
本關的教程應當是第四關的補充,在第四關找到代碼只是簡單的改為空指令,遊戲運行到你修改後的指令什麼都不會做,比如,按照這樣的方法,我們可以製作買東 西不需要花錢的,又或是不掉血的修改補丁;這一次,我們深入一點,熟悉更多的匯編指令,如果弄明白,便可以製作出買東西倒找你錢,又或是越戰血越多的補丁 了。
這次我們不囉嗦,按著前幾關的介紹,查找到數值地址,右鍵 "查找寫入該地址的代碼" ,更改血值後,來到下圖這一步:
點擊 "顯示反匯編" ,打開 "內存查看器" 窗口,如下圖:
在 工具 菜單中選擇 "自動匯編 或 按下快捷鍵 Ctrl+a ",如下圖:
按下圖打開 "代碼注入" :
跳出地址填寫窗口,如下圖:
點擊 確定 ,自動匯編已幫我們創建了一部分的代碼,如下圖:
能看懂匯編的,就不用我多解釋了,這是一段很簡單的代碼,CE幫我們先開出了一小塊內存用於注入我們自己的代碼,然後在原地址處插入跳轉語句,跳入我們輸入的代碼段,執行完畢後再跳轉回原代碼繼續執行後邊的代碼。
現在我們要做的就是將加血的代碼輸入在圖中 newmem 的位置,如下圖代碼所示:
你可以按照說明中所說的那樣,在 newmem 區域,寫入 "add [ebx+00000310],3",加3的原因是因為在執行完我們輸入的代碼後,原代碼還要再減去1;當然,你也可以靈活運用我們的知識,直接將原代碼 改為 "add [ebx+00000310],2",那麼在 newmem 區域就不用輸寫任何代碼了,如下圖:
OK,寫完代碼,可以點擊 "執行" 按鈕了,彈出確認對話框,直按點擊 "是",彈出 注入成功的窗口,並提示我們,新的代碼段放置的位置,如下圖:
"確定" ,關閉 "自動匯編" 窗口,在 "內存查看器" 窗口 中的匯編代碼部分,可以看到,原代碼已被修改,如下圖:
回到 Tutorial.exe 窗口 ,點 "Hit me" ,增加了2點血值,next 按鈕也可以點擊了,記下第七關的密碼(PW=525927),我們休息一下~
請問jmp newmem下面的nop和returnhere功用是甚麼?
回覆刪除