




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、.IDA Pro 使用技巧及大雜燴IDA Pro 基本簡介IDA 加載完程序后, 3 個(gè)立即可見的窗口分別為 IDA-View ,Named,和消息輸出窗口 (output Window)。IDA 圖形視圖會(huì)有執(zhí)行流, Yes 箭頭默認(rèn)為綠色, No 箭頭 默認(rèn)為紅色,藍(lán)色表示默認(rèn)下一個(gè)執(zhí)行塊。在寄存器窗口中顯示著每個(gè)寄存器當(dāng)前的值和對應(yīng)在反匯 編窗口中的內(nèi)存地址。 函數(shù)在進(jìn)入時(shí)都會(huì)保存堆棧地址 EBP 和ESP,退出函數(shù)時(shí)恢復(fù)。選擇菜單 Debugger下的Start process (也可以按 F9鍵)來開 始調(diào)試。 調(diào)試會(huì)讓程序在電腦中執(zhí)行, 所以 IDA 會(huì)提示注意 提防惡意程序、病毒
2、和木馬。打開 IDA Pro 6.5 ,為進(jìn)入 IDA 界面提供三種選項(xiàng),分別是New (新建),Go (運(yùn)行),Previous (上一個(gè))。選擇File菜單下的Open,打開想要逆向的可執(zhí)行文件,會(huì) 顯示一個(gè) Load a new file 的界面。這里可以選擇 :1. 程序的類型;2. 處理器的類型;3. 加載的段地址和偏移量;4. 是否允許分析;5. 一些加載選項(xiàng); 6. 內(nèi)核和處理器的一些選項(xiàng); 7. windows 系統(tǒng) dll 所在的目錄。默認(rèn)選擇 PE 文件就可以,對于一些網(wǎng)絡(luò)數(shù)據(jù)包或者其他格 式的文件,可以使用二進(jìn)制加載,自己進(jìn)行解析。工作區(qū)有多個(gè)子窗口,IDA View-A
3、 是反匯編窗口,HexView-A 是十六進(jìn)制格式顯示的窗口,Imports 是導(dǎo)入表(程序中調(diào)用到的外面的函數(shù))Functions 是函數(shù)表(這個(gè)程序中的函數(shù))Structures 是結(jié)構(gòu),Enums 是枚舉。IDA view: 定位要修改的代碼段在哪里。Hex view: 用來修改我們的數(shù)據(jù) exports window: 導(dǎo)出窗口import window: 導(dǎo)入窗口 names window: 函數(shù)和參數(shù)的命名列表 functions window: 樣本的所有函數(shù)窗口 strings window: 字符串顯示窗口,會(huì)列出程序中的所有字符IDA 很智能,鼠標(biāo)移到某些標(biāo)識(shí)符上會(huì)自動(dòng)有適
4、當(dāng)?shù)奶崾荆?雙擊還能自動(dòng)跳到相應(yīng)的位置。把一個(gè)函數(shù)逆向的方法很簡 單,只要按 F5 鍵就會(huì)出來逆向出的 C 語言程序了。退出 IDA 時(shí),會(huì)進(jìn)行文件保存確認(rèn), 如果需要繼續(xù)進(jìn)行分析, 果不需要繼續(xù)分析,選擇不要打包,不要存儲(chǔ)數(shù)據(jù)庫。將 IDA中間數(shù)據(jù)庫打包,次繼續(xù)打開就可以進(jìn)行分析; 如IDA 打開應(yīng)用程序時(shí), 會(huì)為其創(chuàng)建一個(gè)數(shù)據(jù)庫, 后綴為 IDB 。IDB 由 4 個(gè)文件組成 : 后綴為 id0 的二叉樹形式的數(shù)據(jù)庫, 后綴為 id1 的程序字節(jié)標(biāo)識(shí),后綴為 nam 的 Named 窗口的索引信息, 后綴為 til 的給定數(shù)據(jù)庫的本地類型定義的相關(guān)信息。旦 IDA 為某個(gè)可執(zhí)行程序創(chuàng)建數(shù)據(jù)
5、庫,它本身就不再需 要訪問這個(gè)可執(zhí)行文件,除非使用 IDA 的 Debug 功能。跳轉(zhuǎn)指令分三類 : 無條件跳轉(zhuǎn) : JMP;根據(jù) CX 、 ECX 寄存器的值跳轉(zhuǎn) : JCXZ(CX 為 0 則跳轉(zhuǎn) )、JECXZ(ECX 為 0 則跳轉(zhuǎn) );根據(jù) EFLAGS 寄存器的標(biāo)志位跳轉(zhuǎn) , 這個(gè)太多了 .學(xué) Win32 匯編 28 - 跳轉(zhuǎn)指令 : JMP、JECXZ 、JA、JB、JG、JL、 JE、JZ、 JS、JC、JO、JP 等MOVSX MOVZX比如MOVSX EAX, BYTE PTR 00401000MOVZX EAX, BYTE PTR 00401000 在 C 語言中應(yīng)該如何
6、表達(dá)啊 ?比如定義一個(gè)全局變量BYTE bt = 101;DWORD dw;應(yīng)該如何把 bt 賦值到 dw 中. 并且功能與 MOVSX/MOVZX相同?匯編語言與 C 語言的語言構(gòu)件不同, 并不是一定能轉(zhuǎn)成完全 等價(jià)的 C 語言的代碼的。對于以上代碼,可以這樣理解: movsx = dw = (DWORD) ( (signed char) (bt) ) movzx = dw = (DWORD) ( (unsigned char) (bt) ) movzx 是把高位全部用 0 填充, 而 movsx 是把原來數(shù)的最高 位擴(kuò)展成超出的位。對于bt=101,也就是0x65,八位二進(jìn)制是“ 0110
7、0101”,因 為它的最高位是 0,因此這兩種情況, dw 都等于 0x00000065 換一個(gè),比如bt=247 ,也就是0xF7,八位二進(jìn)制是“ 11111110 它的最高位是 1。經(jīng)過 movsx 變換后, dw 等于 0xfffffff7 ; 而經(jīng)過 movzx 變換后, dw 等于 0x000000f7 交叉參考通過交叉參考 (XREF) 可以知道指令代碼互相調(diào)用的關(guān)系.如.text:00401165 loc_401165: ;CODE XREF:sub_401120+B|j 這句 CODE XREF:sub_401120+B|j 表示該調(diào)用地址是401120,j ”表示跳轉(zhuǎn) (ju
8、mp)“0”表示偏移值(offset)“p ”表示子程序(Procedure)雙擊這里或按回車鍵可以跳到調(diào)用該處的地方參考重命名 : 找到一段代碼 (一般為函數(shù)入口名 ),右鍵點(diǎn)擊選擇” Rename” 可以將函數(shù)名稱變成易懂的名稱標(biāo)簽的用法 :在菜單” Jump”中選擇” Mark Position ”將會(huì)打開 標(biāo)記當(dāng)前位置功能 ,輸入一個(gè)名稱 , 在菜單” Jump/Jump to marked position ” 中或按” Ctrl+M ”鍵雙擊想要調(diào)轉(zhuǎn)的名稱 ,便會(huì)到 達(dá)制定的代碼位置 .進(jìn)制的轉(zhuǎn)換 : 選擇快捷鍵的 #可以轉(zhuǎn)換進(jìn)制 ,選擇” Toggle leading zeroe
9、s” 功能是用 0 填補(bǔ)數(shù)據(jù)前的空位 .cqd,為Convert Double to Quad的縮寫,意為將雙字?jǐn)?shù)據(jù)擴(kuò) 展為四字。該指令先把 edx 的每一位置成 eax 的最高位(若 eax=0x80000000, 則 edx=0xFFFFFFFF ;若 eax 該指令常用于擴(kuò)展被除數(shù),很久前,指令集規(guī)定除數(shù)必須是 被除數(shù)的一半長,這個(gè)規(guī)定一直被沿用。使用 IDIV 執(zhí)行除 法時(shí),如果除數(shù)是 32 位,這就要求被除數(shù)是 64 位,即EDX:EAX ,所以擴(kuò)展一下 EAX 以滿足除法指令的條件并且 得到正確的結(jié)果。DIV 和 IDIVDIV 和 IDIV 兩個(gè)都是算術(shù)除法操作指令。 DIV 是
10、無符號數(shù) 除法 DIV s ; 完成兩個(gè)無符號數(shù)相除。IDIV 是有符號數(shù)除法指令,完成兩個(gè)有符號數(shù)相除。被除 數(shù)、商、除數(shù)、余數(shù)存放位置及對 s 的規(guī)定與 DIV 指令相同。修改程序的指令或者數(shù)據(jù),并進(jìn)行保存 如何修改數(shù)據(jù) 在 Hex View 窗口下, S1雙擊要修改的地方S2使用F2捷方式修改當(dāng)前字節(jié)S3再按下F2快捷方式應(yīng)用修改。如何改變執(zhí)行流程1 修改跳轉(zhuǎn)指令。2修改內(nèi)存數(shù)據(jù)。3IDA View中使用下面的命令 Jump to IP,Set IP, Run tocursor。保存修改使用下面的主菜單命令,直接把修改保存到輸入文件中,即可。IDA Main Menu-Edit-Patc
11、hProgram-Apply patches to input file 。OD 中右鍵 -保存到文件 -選擇 我的 OD 是這樣的 ,只能修改一條 ,通過選擇 ,保存一條重新載 入再修改再保存 .如何對 DLL 文件進(jìn)行動(dòng)態(tài)跟蹤用F2在 IDA View中當(dāng)前代碼行切換斷點(diǎn)啟動(dòng)裝載 DLL 的 EXE 文件。使用 Debugger-Attach toprocess 把當(dāng)前二進(jìn)制代碼 attach 到正在運(yùn)行的進(jìn)程中去?,F(xiàn)在應(yīng)該進(jìn)入斷點(diǎn)。 F7Stepinto 。 F8Stepover。 F9continue 。Cursor 移到內(nèi)存位置后雙擊就可以查看到具體內(nèi)存中的值, 右擊快捷菜單 Jum
12、pto IP 項(xiàng),可以回到你剛才指令的地方。IDA View 中有很多行代碼, 可以使用 ; 快捷鍵對當(dāng)前行進(jìn)行注釋。為了觀察具體指令的二進(jìn)制表示你還需要IDA View- 右擊快捷菜單 -Synchronize with-Hex View 1 這樣 Hex View會(huì)和你的 IDA View中光標(biāo)位置同步。在 IDA View中為函數(shù)改名,用 N 快捷鍵。觀察內(nèi)存(變量) Tool bar-Open the watch list window,Toolbar-Add a variable towatch 。 如果作者混淆了二進(jìn)制代碼,你需要 IDA View 在頻繁使用 Data 快捷鍵,
13、Code 快捷鍵,強(qiáng)制 IDA ,解析指定數(shù)據(jù)塊 為數(shù)據(jù) (Data) 或代碼 (Code)。這些 32 位寄存器有多種用途,但每一個(gè)都有“專長” ,有各 自的特別之處。EAX 是”累加器” (accumulator), 它是很多加法乘法指令的 缺省寄存器。EBX是”基地址”(base)寄存器,在內(nèi)存尋址時(shí)存放基地址。ECX 是計(jì)數(shù)器(counter),是重復(fù)(REP)前綴指令和 LOOP指 令的內(nèi)定計(jì)數(shù)器。EDX 則總是被用來放整數(shù)除法產(chǎn)生的余數(shù)。ESI/EDI 分別叫做”源 /目標(biāo)索引寄存器” (source/destinationindex),因?yàn)樵诤芏嘧址僮髦噶钪? DS:ESI
14、指向源串 ,而ES:EDI 指向目標(biāo)串 .EBP 是”基址指針:丄”(BASE POINTER), 它最經(jīng)常被用作高級語言函數(shù)調(diào)用的”框架指針” (frame pointer). 在破解的時(shí) 候,經(jīng)??梢钥匆娨粋€(gè)標(biāo)準(zhǔn)的函數(shù)起始代碼push ebp ; 保存當(dāng)前 ebpmov ebp,esp ; EBP 設(shè)為當(dāng)前堆棧指針 sub esp, xxx ; 預(yù)留 xxx 字節(jié)給函數(shù)臨時(shí)變量 .這樣一來 ,EBP 構(gòu)成了該函數(shù)的一個(gè)框架 , 在 EBP 上方分別 是原來的 EBP, 返回地址和參數(shù) . EBP 下方則是臨時(shí)變量 . 函數(shù)返回時(shí)作 mov esp,ebp/pop ebp/ret 即可 .E
15、SP 專門用作堆棧指針,被形象地稱為棧頂指針,堆棧的頂 小。在 32 位平臺(tái)上, ESP 每次減少 4 字節(jié)。部是地址小的區(qū)域,壓入堆棧的數(shù)據(jù)越多,ESP 也就越來越匯編中的 ASSUME經(jīng)常用來將寄存器當(dāng)作結(jié)構(gòu)體指針來用ASSUME edx:ptr STRUCT ;將 edx 定義為 STRUCT 指針變量把 STRUCT 結(jié)構(gòu)體的起始 地址給 edx lea edx, STRUCT 這個(gè)時(shí)候可以用 edx. 調(diào)用 STRUCT 的字段ASSUME edx:nothing ;取消定義 這個(gè)時(shí)候 edx 不是指針edx.不能調(diào)用字段了 如果是 8086 的那么將段 REG ASSUME DS:
16、( 某個(gè)數(shù)據(jù)段 ) 這樣程序在使用這個(gè)數(shù)據(jù)段會(huì)用 DS 做段Code段是不能指定段 REG的 必須是CS:IP(EA)快捷鍵1. 按空格鍵切換反匯編窗口 (列表視圖圖形視圖 )反匯編窗口有兩種顯示格式:面向文本的列表視圖和圖形視 圖。不同視圖在不同的場景下各有所長,按空格鍵可以快速 切換。2. 翻頁 esc 和 Ctrl+Enter當(dāng)執(zhí)行跳轉(zhuǎn)功能后 ,需要返回時(shí) ,只要在工具欄中點(diǎn)擊 按” Ctrl+Enter ”鍵.3. 注釋 “;”和” :” 按;號輸入的注釋 ,所有交叉參考處都會(huì)出現(xiàn)按:號鍵輸入的注釋只在該處出現(xiàn)4. 使用小鍵盤“ -”,“ +”查看函數(shù)之間的關(guān)系IDA View 下使用小鍵盤“”,“+”快捷方式可以在代碼同關(guān)系圖之間切換。5. 使用X查看符號引用IDA View下使用X快捷方式,定位引用了當(dāng)前符號的代碼。6. 快捷鍵 F5 顯示 C 偽代碼 如果有 Main menu-View-Open SubViews-PseudocodeF 5菜單,說明你已經(jīng)安裝了Hex Rays decompiler 插件,可 以在查看匯編的時(shí)候,按F5打開偽代碼子窗口。7. 使用快捷鍵” * ”把變量重定義為數(shù)組。8.快捷鍵Ctrl+S,打開搜索類型選擇對話框-雙擊Strings, 跳到字符串段- 菜單項(xiàng)“ Search - Text”
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 駱駝祥子人物性格分析教學(xué)教案:探究社會(huì)變遷與人性的掙扎
- 汽車租賃三方合同
- 農(nóng)作物種植技術(shù)手冊
- 圖表展示各類數(shù)據(jù)統(tǒng)計(jì)情況
- 小學(xué)生數(shù)學(xué)應(yīng)用題的作文分析與實(shí)踐指導(dǎo)
- 留置擔(dān)保合同協(xié)議書
- 文學(xué)佳作圍城中的人物形象解讀
- 智能交通大數(shù)據(jù)平臺(tái)開發(fā)協(xié)議
- 企業(yè)戰(zhàn)略聯(lián)盟穩(wěn)定性評價(jià)與維護(hù)
- 產(chǎn)品推廣合作合同
- FZ/T 24011-2019羊絨機(jī)織圍巾、披肩
- 【課件】2.1.1植物細(xì)胞工程的基本技術(shù)課件-2021-2022學(xué)年高二下學(xué)期生物人教版選擇性必修3
- 35kV集電線路直埋施工組織設(shè)計(jì)方案
- 客戶來訪登記表
- 日產(chǎn)新軒逸電子手冊cvt
- 人教八年級下冊英語U5Do-you-remember-what-you-were-doing?課件
- 大連市小升初手冊
- 醫(yī)療垃圾管理及手衛(wèi)生培訓(xùn)PPT課件
- 嚇數(shù)基礎(chǔ)知識(shí)共20
- 鋰電池安全知識(shí)培訓(xùn)-課件
- 電子產(chǎn)品高可靠性裝聯(lián)工藝下
評論
0/150
提交評論