3.逆向分析Hello World!程序-下
5.繼續(xù)補(bǔ)充,常用操作指令:
Ctrl+G????Go?to???????移動(dòng)到指定地址,用來(lái)查看代碼或內(nèi)存,運(yùn)行時(shí)不可用
F4????????Execute?till?Cursor?執(zhí)行到光標(biāo)位置,即直接轉(zhuǎn)到要調(diào)試的地址
;?????????Comment?????添加注釋?
User-defined?comment??鼠標(biāo)右鍵菜單Search?for?User-defined?comment
:?????????Label???????添加標(biāo)簽
User-defined?label????鼠標(biāo)右鍵慘淡Search?for?User-defined?label
F2????????Set/Reset?BreakPoint?設(shè)置或取消斷點(diǎn)(BP)
F9????????運(yùn)行(若設(shè)置了斷點(diǎn),則執(zhí)行至斷點(diǎn)處)
*?????????顯示當(dāng)前EIP(命令指針)位置
-?????????顯示上一個(gè)光標(biāo)的位置
Enter?????若光標(biāo)處有CALL/JMP等指令,則跟蹤并顯示相關(guān)地址(運(yùn)行時(shí)不可用,簡(jiǎn)單查看函數(shù)內(nèi)容時(shí)非常有用)
?
6.Basecamp?四種方式,直接到想去的位置。
(1)Goto(Ctrl+G),打開(kāi)Enter?expression?to?follow(輸入跟蹤表達(dá)式)對(duì)話框。
(2)設(shè)置斷點(diǎn),BP(Break?Point,斷點(diǎn))(快捷鍵F2)。
程序在OD里加載起來(lái)的時(shí)候,直接F9跑起來(lái),會(huì)自動(dòng)卡到斷點(diǎn)處的。
ALT+B?可以打開(kāi)Breakpoints對(duì)話框,列出代碼設(shè)置的斷點(diǎn)。
?
(3)注釋,快捷鍵?;?,右鍵Search?for-User?defined?comment?可以查看注釋列表,可以進(jìn)行跳轉(zhuǎn)。
?
(4)標(biāo)簽,在制定地址添加特定名稱。快捷鍵?:?類似上面Search?for-User?defined?labels
6.快速查找制定代碼的四種方法
目標(biāo)查找main()中的MessageBox()?API調(diào)用
(1)方法一,無(wú)腦執(zhí)行所有,就是一步一步的看,肯定有一步是調(diào)用這個(gè)的。額,這個(gè)的話沒(méi)啥好說(shuō)的,只能說(shuō)大多數(shù)時(shí)候,不采取竅門,這么弄會(huì)瘋。耗時(shí)。
(2)定位字符串,這個(gè)比較常用。右鍵?查找所有文本字符串。
雙擊直接跳到調(diào)用地址,其實(shí)直接找到了MessageBox()
此時(shí)正要把HelloWorld這個(gè)字符串地址壓入棧,當(dāng)參數(shù)呢。下面緊接著就call這個(gè)函數(shù)了。
(3)API檢索法-1:在調(diào)用代碼中設(shè)置斷點(diǎn)
?右鍵菜單-Search?for?-?All?intermodular?calls?看所有API調(diào)用,注意MessageBox是在user32里面的。
雙擊直接跳轉(zhuǎn)到調(diào)用的位置。
(4)API檢索法-1:在API代碼中設(shè)置斷點(diǎn)
右鍵?Search?for?-?Name?in?all?calls
對(duì)于了調(diào)用的各個(gè)dll中的導(dǎo)出函數(shù)(對(duì)壓縮器和保護(hù)器處理過(guò)的可能看不到)
找到MessageBoxW雙擊
留意地址,其實(shí)這個(gè)已經(jīng)和之前的程序不再一個(gè)范圍內(nèi)了,這個(gè)是Windows為了節(jié)省開(kāi)銷做處理之后的結(jié)果,很多系統(tǒng)dll,大家共同加載一個(gè)。如果需要特別的修改什么的會(huì)自動(dòng)觸發(fā)copy-on-write機(jī)制。雙擊MessageBoxW之后,跳到這個(gè)函數(shù)內(nèi)存,然后F2下一個(gè)斷點(diǎn)。
7.修改Hello?World!字符串(兩種方法)
直接修改字符串緩沖區(qū)(buffer)/在其他內(nèi)存區(qū)域生成字符串并傳遞給消息函數(shù)
(1)直接修改字符串緩沖區(qū)
Ctrl+F2重新調(diào)試程序。
然后直接右鍵超找所有字符串,找到HelloWorld字符串,雙擊。看到地址
在內(nèi)存區(qū)域Ctrl+G跳到這個(gè)地址(VA)
選上一個(gè)范圍,然后Ctrl+E?修改字符串
然后F9跑起來(lái),看到輸出內(nèi)容變了。注意此時(shí)只是改了內(nèi)存。PE文件本身還沒(méi)有改,如果重新執(zhí)行的話內(nèi)存會(huì)被重新加載成之前的。所以要把當(dāng)前修改的內(nèi)容同步到PE文件里面去。
繼續(xù),在地址區(qū)域右鍵?Copy?to?executable?file
繼續(xù)右鍵,保存可執(zhí)行文件。A.exe.然后雙擊就好了。
(2)在其他內(nèi)存區(qū)域新建字符串并傳遞給消息函數(shù)。
先跳到之前字符串的位置,看下:
發(fā)現(xiàn)有好多空的地方。在這里面直接開(kāi)始存一段
然后把MessageBox調(diào)用Push參數(shù)的時(shí)候的那個(gè)地址直接改成自己的這個(gè)新地址上面的那個(gè)圖的話就是01102148
然后F9跑起來(lái),結(jié)果是下面這樣。
但是這個(gè)地方目前沒(méi)有辦法直接右鍵保存修改,因?yàn)楸4嬷笠矆?zhí)行不了,涉及到地址偏移問(wèn)題。這個(gè)之后說(shuō)。
同時(shí)對(duì)于方案1的話容易出現(xiàn)的問(wèn)題就是你修改的字符串如果比之前的長(zhǎng),而同時(shí)之前字符串?dāng)?shù)據(jù)后面是緊跟著存東西的這種,就會(huì)破壞掉后面的數(shù)據(jù)。所以一定要小心。對(duì)于第二種方式,也不是所有位置都隨便寫(xiě)內(nèi)容的。這個(gè)后期細(xì)說(shuō)。但要注意這個(gè)問(wèn)題。
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的3.逆向分析Hello World!程序-下的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 机器视觉-EasyDL商品检测-标准版-
- 下一篇: 4.小端序标记法