Step 7: Code Injection 注入程式碼 : (PW=013370)
注入程式碼 超有趣的,遊戲寫完的時候會造它一開始寫的程式碼跑,如果說要改程式碼的話可以用反編譯來使用但是那個很複雜,Cheat engine竟然可以注入程式碼太神奇了,注入程式碼就像現實生活中的病毒一樣把自己寫好想要的程式碼注入到目標程式裡面,在實際成面的應用下面將以小朋友下樓梯做實際演練,我們都知道在小朋友下樓梯裡面如果碰到針的話會扣五滴血,那是因為程式碼裡面已經寫好"碰到針扣五滴血"的程式碼,但是可以藉由注入程式碼把原始的程式碼改寫成"碰到針加五滴血",夠酷吧!
U是上圖,D是下圖
Step 7: Code Injection 注入程式碼 : (PW=013370)
U到Step 7注入程式碼關,裡面有Health:100
D用Cheat Engine找到Health:100的位址,不會找得參考tutorial step 2 Exact Value scanning找尋實際值 tutorial 1 教學,找到後把他加到下面,在其上點右鍵,選擇Find out what writes to this address
D出現Confirm(確認)的視窗,選Yes
D出現The following opcodes changed the selected address視窗
D回到tutorial,按下Hit me 的按鈕,血由本來的99減少為98
D回到The following opcodes changed the selected address的視窗,點選新出現的東西,再按Show disassembler(反彙編器)
D出現Memory Viewer(記憶體檢視)的視窗,點Tools(工具),選Auto Assemble(自行組合)
D出現Auto assemble的視窗,點Template(模板),選Code injection(程式碼注入)
D出現Code inject template視窗,輸入0045A063(其實一開始就幫我們輸入好了,按OK
D出現了該位址的程式碼,在紅色框框內是我們要輸入程式碼的地方,黃色框框裡面是一開始的程式碼。
U dec [ebx+00000310],是組合語言dec代表decrease(逐漸減少),[ebx+00000310]代表位址從D中,我們知道了[ebx+00000310]=0096E91C,所以整句"dec [ebx+00000310]"就是把address=ebx+00000310的位址的值減少1,所以我們的血值才會按一下Hit me 就會少1滴血。
D在注入程式碼這一關,可以用簡單的組合語言來注入程式碼,用add是很方便的方法,在黃色框框內輸入add [ebx+00000310],3,按Execute(執行)
延伸學習
1.add代表加上,,3代表3,整句add [ebx+00000310],3代表[ebx+00000310]的值加3,為甚麼要加3呢?因為本關要求注入程式碼後按下Hit me要從原本的減少1變成增加2,由於原始的程式碼我們沒有刪掉所以減1的效果還在,因此當我們輸入add [ebx+00000310],3,按下Hit me,就會執行+3-1=+2,所以等同加2
2.還有一個方法就是把原本的程式碼dec [ebx+00000310]刪掉,然後改成add [ebx+00000310],2,因為原本的-1程式碼已經刪掉了,所以按Hit me的時候就是+2
3.還有一個方法inc [ebx+00000310],inc代表increase(逐漸增加),inc [ebx+00000310]整句代表[ebx+00000310]的值+1,如果原本的程式碼dec [ebx+00000310]沒有刪掉的話,要貼上三個
inc [ebx+00000310] inc [ebx+00000310] inc [ebx+00000310]
刪掉的話當然只要貼上兩個
inc [ebx+00000310] inc [ebx+00000310]
4.除了dec inc add 外還有一個sub(subtract減去),用法sub [ebx+00000310],3代表[ebx+00000310]的值減去3
5.最後要注意的是add 和sub要用",x"表示要加上或是減去x,而inc 和 dec就不能用",x",因為inc 和dec是i++和i--
廣告還不錯支持一下吧
D按OK
D回到tutorial按下Hit me ,我們可以發現Health從98變成100,每按一下hit me 血就會加2
終於完成了,接下來實際用小朋友下樓梯來試試看注入程式碼
小朋友下樓梯刺到針加5滴血~教學