IDAPro使用技巧及大雜燴_第1頁
IDAPro使用技巧及大雜燴_第2頁
IDAPro使用技巧及大雜燴_第3頁
IDAPro使用技巧及大雜燴_第4頁
IDAPro使用技巧及大雜燴_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、IDA Pro使用技巧及大雜燴IDA Pro基本簡介IDA加載完程序后,3個立即可見的窗口分別為IDA-View, Named,和消息 輸出窗口 (output Window) 。IDA圖形視圖會有執(zhí)行流,Yes箭頭默認(rèn)為綠色,No箭頭默認(rèn)為紅色,藍(lán)色 表示默認(rèn)下一個執(zhí)行塊。在寄存器窗口中顯示著每個寄存器當(dāng)前的值和對應(yīng)在反匯編窗口中的內(nèi)存 地址。函數(shù)在進(jìn)入時都會保存堆棧地址EBP和ESP退出函數(shù)時恢復(fù)。選擇菜單Debugger下的Start process (也可以按F9鍵)來開始調(diào)試。調(diào)試 會讓程序在電腦中執(zhí)行,所以IDA會提示注意提防惡意程序、病毒和木馬。打開IDA Pro 6.5,為進(jìn)入

2、IDA界面提供三種選項(xiàng),分別是 New (新建), Go (運(yùn)行),Previous (上一個)。選擇File菜單下的Open,打開想要逆向的可執(zhí)行文件,會顯示一個Load anew 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ū)有多個子窗口,IDA View-A 是反匯編窗口, HexView-A 是十六進(jìn)制格式顯示的窗口,

3、 Imports 是導(dǎo)入表(程序中調(diào)用到的外面的函數(shù)), Functions 是函數(shù)表(這個程序中的函數(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: 字符串顯示窗口,會列出程序中的所有字符串IDA很智能,鼠標(biāo)移到某些標(biāo)識符上會自動有適當(dāng)?shù)奶崾?,雙擊還能自動跳 到相應(yīng)的位置。把一個函數(shù)逆

4、向的方法很簡單,只要按 F5 鍵就會出來逆向出的 C語言程序了。退出IDA時,會進(jìn)行文件保存確認(rèn),如果需要繼續(xù)進(jìn)行分析,將IDA中間數(shù)據(jù)庫打包,下次繼續(xù)打開就可以進(jìn)行分析;如果不需要繼續(xù)分析,選擇不要 打包,不要存儲數(shù)據(jù)庫。IDA打開應(yīng)用程序時,會為其創(chuàng)建一個數(shù)據(jù)庫,后綴為 IDBoIDB由4個文件組成:后綴為 id0 的二叉樹形式的數(shù)據(jù)庫,后綴為 id1 的程序字節(jié)標(biāo)識,后綴為nam的Named窗口的索引信息,后綴為til的給定數(shù)據(jù)庫的本地類型定義的相關(guān)信息。一旦IDA為某個可執(zhí)行程序創(chuàng)建數(shù)據(jù)庫,它本身就不再需要訪問這個可執(zhí) 行文件,除非使用IDA的Debug功能。跳轉(zhuǎn)指令分三類 :無條件跳

5、轉(zhuǎn) :JMP;根據(jù) CX、ECX 寄存器的值跳轉(zhuǎn) :JCXZ(C為0則跳轉(zhuǎn))、JECXZ(EC;為0則跳轉(zhuǎn));根據(jù)EFLAGS寄存器的標(biāo)志位跳轉(zhuǎn),這個太多了 .學(xué) Win32 匯編28 -跳轉(zhuǎn)指令 :JMP、 JECX、Z JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等MOVSX MOVZX比如MOVSX EAX, B YTE PTRgMOVZX EAX, B YTE PTR 在 C 語言中應(yīng)該如何表達(dá)啊 ?比如定義一個全局變量BYTE bt = 101;DWORD dw;應(yīng)該如何把bt賦值到dw中.并且功能與MOVSX/MOVZX相同?匯編語言與C語言的語言構(gòu)件不同,并不是一

6、定能轉(zhuǎn)成完全等價的C語言的代碼的。對于以上代碼,可以這樣理解:movsx = dw = (DWORD) ( (signed char) (bt) )movzx = dw = (DWORD) ( (unsigned char) (bt) )movzx是把高位全部用0填充,而movsx是把原來數(shù)的最高位擴(kuò)展成超出 的位。對于bt=101,也就是0x65,八位二進(jìn)制是“011001,因?yàn)樗淖罡呶皇?,因此這兩種情況,dw都等于0x00065換一個,比如bt=247,也就是0xF7, 八位二進(jìn)制是 “11110它”的最高位是 1。經(jīng)過movsx變換后,dw等于0xffff7 ;而經(jīng)過movzx變換后

7、,dw等于0x000f7交叉參考通過交叉參考(XREF可以知道指令代碼互相調(diào)用的關(guān)系.如下:.text: loc_401165: ;CODE XREF:sub_401120+B|j 這句 CODE XREF:sub_401120+B|j 表示該調(diào)用地址是 401120,“表示跳轉(zhuǎn)(jump)“ o表示偏移值(offset)“ p表示子程序(procedure)雙擊這里或按回車鍵可以跳到調(diào)用該處的地方參考重命名 :找到一段代碼(一般為函數(shù)入口名),右鍵點(diǎn)擊選擇” Rename可以將函數(shù)名稱 變成易懂的名稱 .標(biāo)簽的用法 :在菜單” Jump中選擇” Mark Position將會打開標(biāo)記當(dāng)前位置

8、功能,輸入一個名 稱,在菜單” Jump/Jump to marked position中或按 ” Ctrl+M鍵雙擊想要調(diào)轉(zhuǎn)的名稱 便會到達(dá)制定的代碼位置 .進(jìn)制的轉(zhuǎn)換 :選擇快捷鍵的#可以轉(zhuǎn)換進(jìn)制,選擇” Toggle leading zeroe功能是用0填補(bǔ)數(shù) 據(jù)前的空位 .cqd,為Convert Double to Quad的縮寫,意為將雙字?jǐn)?shù)據(jù)擴(kuò)展為四字。該指令先把 edx 的每一位置成 eax 的最高位(若eax=0x80000則 edx=OxFFFF 若 eax該指令常用于擴(kuò)展被除數(shù),很久前,指令集規(guī)定除數(shù)必須是被除數(shù)的一半長,這個規(guī)定一直被沿用。使用IDIV執(zhí)行除法時,如果除

9、數(shù)是32位,這就要求 被除數(shù)是 64 位,即 EDX:EAX所以擴(kuò)展一下EAX以滿足除法指令的條件并且得到正確的結(jié)果。DIV 和 IDIVDIV和IDIV兩個都是算術(shù)除法操作指令。DIV是無符號數(shù)除法DIV s完成兩 個無符號數(shù)相除。IDIV 是有符號數(shù)除法指令,完成兩個有符號數(shù)相除。被除數(shù)、商、除數(shù)、 余數(shù)存放位置及對s的規(guī)定與DIV指令相同。修改程序的指令或者數(shù)據(jù),并進(jìn) 行保存如何修改數(shù)據(jù)在 Hex View 窗口下,51 雙擊要修改的地方52 使用F2xx方式修改當(dāng)前字節(jié)53 再按下F2快捷方式應(yīng)用修改。如何改變執(zhí)行流程1 修改跳轉(zhuǎn)指令。2 修改內(nèi)存數(shù)據(jù)。3 IDA View 中使用下面

10、的命令 Jump to IP,Set IP, Run to cursor 注釋。為了觀察具體指令的二進(jìn)制表示你還需要IDAView-右擊快捷菜單卜Synchronize with-Hex View 1這樣 Hex View會和你的 IDA View中光標(biāo)位 置同步。在IDA View中為函數(shù)改名,用N快捷鍵。觀察內(nèi)存(變量) Tool bar-Open the watch listwindow,Toolbar-Add a variable towatch 。如果作者混淆了二進(jìn)制代碼,你需要IDAView在頻繁使用Data快捷鍵, Code快捷鍵,強(qiáng)制IDA,解析指定數(shù)據(jù)塊為數(shù)據(jù)(Data)或代

11、碼(Code這些 32 位寄存器有多種用途,但每一個都有 “專長”,有各自的特別之處。EAX是”累加器”(accumulator它是很多加法乘法指令的缺省寄存器。EBX是”基地址”(bas寄存器,在內(nèi)存尋址時存放基地址。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指向源串,而ES:EDI指向目標(biāo)串.EBP是”基址指針”(BASE POINTER最經(jīng)常被用作高級語言函數(shù)調(diào)用的”

12、框 架指針” (frame pointer在破解的時候,經(jīng)??梢钥匆娨粋€標(biāo)準(zhǔn)的函數(shù)起始代碼:push ebp ;保存當(dāng)前 ebpmov ebp,esp ; EBP設(shè)為當(dāng)前堆棧指針sub esp, xxx預(yù)留xxx字節(jié)給函數(shù)臨時變量.,這樣一來,EBP構(gòu)成了該函數(shù)的 一個框架,在EBP上方分別是原來的EBP返回地址和參數(shù).EBP下方則是臨時變 量.函數(shù)返回時作 mov esp,ebp/pop ebp/ret 即可.ESP 專門用作堆棧指針,被形象地稱為棧頂指針,堆棧的頂部是地址小的 區(qū)域,壓入堆棧的數(shù)據(jù)越多,ESP也就越來越小。在32位平臺上,ESP每次減 少 4 字節(jié)。匯編中的 ASSUME經(jīng)

13、常用來將寄存器當(dāng)作結(jié)構(gòu)體指針來用ASSUME edx:ptr STRUCT ;將edx定義為STRUCK針變量把STRUC結(jié)構(gòu)體的起始地址給edxlea edx, STRUCT這個時候可以用edx.調(diào)用STRUCT勺字段ASSUME edx:nothing ;取消定義這個時候 edx 不是指針edx.不能調(diào)用字段了如果是 8086的那么將段 REG ASSUME DS:(某個數(shù)據(jù)段)這樣程序在使用這個數(shù)據(jù)段會用 DS做段Code段是不能指定段REG的必須是CS:IP(EA)快捷鍵1. 按空格鍵切換反匯編窗口 (列表視圖 =圖形視圖 )反匯編窗口有兩 種顯示格式:面向文本的列表視圖和圖形視圖。不

14、同視圖在不同的場景下各有所長,按 空格鍵可以快速切換。2. 翻頁 esc 和 Ctrl+Enter當(dāng)執(zhí)行跳轉(zhuǎn)功能后需要返回時,只要在工具欄中點(diǎn)擊或按” Ctrl+Ente鍵”3. 注釋“ ;和” ” :按”;號輸入的注釋 ,所有交叉參考處都會出現(xiàn) ,按:號鍵輸入的注釋只在該處出現(xiàn)4 .使用小鍵盤 “-”,“+查”看函數(shù)之間的關(guān)系IDAView 下使用小鍵盤 “-”,“+快”捷方式可以在代碼同關(guān)系圖之間切換。5使用X查看符號引用IDA View下使用X快捷方式,定位引用了當(dāng)前符號的代碼。6快捷鍵F5顯示C偽代碼7.使用快捷鍵 ” *把”變量重定義為數(shù)組。8快捷鍵Ctrl+S打開搜索類型選擇對話框。雙擊Strings,跳到字符串段- 菜單項(xiàng) “ Search - Text ”9快捷鍵Alt+T,打開文本搜索對話框,在 String文本框中輸入要搜索的字 符

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論