OD 第二課 1、OD與IDA是兩個常用工具。OD是動態(tài)分析,IDA是靜態(tài)分析。 2、F2下斷點(diǎn),F(xiàn)3加載一個可執(zhí)行程序。 3、Call *** 按F7可以進(jìn)入該函數(shù)內(nèi)部,Ctrl + F9運(yùn)行至ret出,就可以返回程序了。 4、Alt + B打開斷點(diǎn)編輯器,用于取消斷點(diǎn),del或者空格取消斷點(diǎn)。 5、Ctrl + G可以查找函數(shù)名,例如:GetDlgItemTextA 或者 GetDlgItemTextW 6、單步執(zhí)行時,注意下面提示,有時候會發(fā)現(xiàn)一些用用的信息的。 7、當(dāng)程序停止下來時,按下Ctrl + G,輸入esp + 4C,可以查看地址內(nèi)容。 8、Call返回值存放在eax中,返回地址時,eax中存放地址。 9、test eax,eax,查看eax是否為0,為0時,Z=1,雙擊Z,則Z變成0. 10、不想讓je跳轉(zhuǎn)的兩種方法,(1)將Z改成0;(2)將je short 0040122e雙擊,改成nop填充即可。 11、保存修改:選中修改的文件,右擊,復(fù)制到可自行文件,選擇,備份,保存數(shù)據(jù)到文件。如果程序加過殼,則會不可執(zhí)行。 12、如果跟進(jìn)到系統(tǒng)dll中,此時想返回到應(yīng)用程序領(lǐng)空,可以按Alt + F9,返回到用戶代碼。 13、如004013F7,這類地址一般是可自行文件領(lǐng)空,7C8114AB這類地址一般是系統(tǒng)Dll所在的地址空間。 14、Ctrl + N,可以打開應(yīng)用程序的導(dǎo)入表 OD第三課 1、找call call *** 等于push eip;然后jmp *** call幾種方式 ——call 404000h,直接跳轉(zhuǎn)到函數(shù)或者過程的地址。 ——call eax,函數(shù)或者過程的地址存放在eax中。 ——call dword ptr[eax] 例如:eax中存放400080h,而400080h中存放404000h,所有實際是Call 404000h。 ——call dword ptr[<&API>];執(zhí)行一個系統(tǒng)API。 2、WinAPI參考文檔 (1)Win32 Programmers Reference.rar -> win32.hlp (2)幫助->選擇API幫助文檔 (3)選擇要查看的API,右擊->符號名幫助 3、Cmp dest,src,比較dest,src并通過比較結(jié)果設(shè)置 C / 0 / Z 標(biāo)志位。 cmp eax,-1 //如果eax = FFFFFFFF, cmp eax,[404000],將eax和404000地址處的dword型數(shù)據(jù)進(jìn)行比較并置位。 cmp dword ptr[402173] 比較402173處值是否為16。 4、標(biāo)志位 cmp可以修改三個標(biāo)志位,Z / 0 / C Z標(biāo)志位:結(jié)果為0,則置1,否則置0; 0標(biāo)志位:溢出置1,否則置0; C標(biāo)志位:進(jìn)位標(biāo)志,最高有效位有進(jìn)位置1,否則置0; 5、test指令 對兩個操作數(shù)進(jìn)行按位與運(yùn)算,但不將與的結(jié)果放到dest中,而and則會將與的結(jié)果放到dest中,test僅改變標(biāo)志位。 test僅改變標(biāo)志位,test eax,eax (如果eax值為0,則Z置1)。 6、跳轉(zhuǎn)條件 ja CF = 0 and ZF = 0 jb CF = 1 jnz ZF = 0 7、將jnz改成jmp實現(xiàn)無條件跳轉(zhuǎn)。將jnz改成nop指令,不讓跳,啥都不干。 nop填充,選中要填充的指令,右擊->用nop填充。 OD第四課 去除NAG窗口 1、Messagebox,不讓彈出 push 1,messagebox父句柄執(zhí)行為1,不存在的句柄值,則不彈出。 2、PE結(jié)構(gòu) 按M查看內(nèi)存分布圖,可以通過修改PE結(jié)構(gòu)來去除NAG。將模塊的入口地址更改。從00401000——>00401024即可。 AddressofEntrypoint=1000 ——》1024。 3、GetModuleHandleA可以獲得程序ImageBase OD第五課 1、PE:sizeofcode = 4000400最高位有數(shù)據(jù),懷疑被惡意修改了。 baseofcode = 40001000,代碼段的起始偏移地址。 baseofdata = 40002000,數(shù)據(jù)段的起始偏移地址。 2、PE結(jié)構(gòu)被修改后,windows加載器可以自動識別,但是OD不會,所以O(shè)D運(yùn)行不起來。 3、advancedolly.dll 放到OD->plugin目錄下,即可載入進(jìn)來經(jīng)修改的PE了。需要設(shè)置插件的Ignore faked export table與Hande Base of Code,sizeof code and base of data。 OD第六課 1、忽略異常 (1)shift + F9,用來忽悠異常,多按幾次。 (2)選項->調(diào)試選項->異常->添加范圍 00000000->FFFFFFFF,整個內(nèi)存段的全部異常都忽略。 2、Alt + F9 返回到用戶地址空間。 3、點(diǎn)擊M ,Ctrl + B ,在整個內(nèi)存中查找字符串。UNREGISTERED VERSION 4、找到字符串后,選中,右擊選擇 二進(jìn)制編輯 ,注意保持大小寫,返回到C,選擇修改后的內(nèi)容,保存下來即可。 5、選擇某個地址,右擊,查看參考,可以查看到哪里引用了它。 OD第七課 1、OD軟件斷點(diǎn)與硬件斷點(diǎn)。 軟件斷點(diǎn)的原理:在斷點(diǎn)處重寫代碼,插入一個int 3中斷指令,當(dāng)CPU執(zhí)行到int 3時,OD就可以獲得控制權(quán)了。 硬件斷點(diǎn):調(diào)試寄存器Dr0——Dr7,其中Dr0——Dr3四個寄存器用來存放中斷地址,Dr4——Dr5保留不使用,Dr6——Dr7用來記錄Dr0——Dr3的屬性。 硬件斷點(diǎn)只有四個。 何時使用: (1)軟件斷點(diǎn)只能在OD的CPU界面下,在數(shù)據(jù)段下不了。 (2)當(dāng)想將斷點(diǎn)下載Windows的動態(tài)鏈接庫上時,需要用硬件斷點(diǎn),因為用軟件斷點(diǎn)下在dll界面是不會保存的,重啟后將丟失斷點(diǎn)。 2、跳出循環(huán)的方法:在循環(huán)下一條語句下一個斷點(diǎn),F(xiàn)9走到斷點(diǎn)處 3、下硬件斷點(diǎn):選中->右擊->硬件執(zhí)行。硬件斷點(diǎn)使用完需要立即清除,因為資源有限。 4、去除Nag,只需要Call *** 改為 Move eax,1,這樣此函數(shù)始終返回1, 程序即可執(zhí)行了。 5、K查看哪些函數(shù)被調(diào)用過了。 6、要關(guān)注跳轉(zhuǎn)的地方,比較正常與異常時,跳轉(zhuǎn)的區(qū)別,這樣可以改變程序的執(zhí)行路徑,實現(xiàn)破解。 OD第八課 去除Nag —— 第十七課 1、查找標(biāo)題中的字符串 右擊->查找->所有參考文本串,再在其中找標(biāo)題中對應(yīng)的字符串即可。 2、通過閱讀jmp前幾行代碼規(guī)律,分析破解方法 OD第十課 VB程序破解 1、利用PEiD.exe可以查看可執(zhí)行文件用什么編譯工具編譯的,加了什么殼,需要使用英文版的PEid 2、所有的VB程序都依賴一個外部的動態(tài)鏈接庫,MSVBVM60.dll 3、VB破解關(guān)鍵 針對變量 針對字符串 _vbaVarTstEq _vbaStrCmp _vbaVarTstNe _vbaStrComp 4、Ctrl + N 調(diào)出輸出表,查找調(diào)用的函數(shù),在用斷點(diǎn)進(jìn)行調(diào)試。 OD第十二課 介紹Delphi OD第十三棵 1、DialogBoxs類型常用APIs,用這些API進(jìn)行搜索。 2、查找->所有模塊間的調(diào)用,可以在每個調(diào)用GetWindowTextA上設(shè)置斷點(diǎn)。 3、Ctrl + N,輸入GetWindowTextA,在每個參考上設(shè)置斷點(diǎn)。 OD第十五課 1、內(nèi)嵌補(bǔ)丁,把補(bǔ)丁代碼寫入文件,達(dá)到破解的目的。解決因指令長度不匹配導(dǎo)致堆棧破壞的問題。 2、通過書簽方式,可以方便跳轉(zhuǎn)。 OD第十七課 介紹硬件訪問斷點(diǎn)的使用。 |
|