




已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
精品文檔IDA Pro使用技巧及大雜燴 IDA Pro基本簡介 IDA加載完程序后,3個立即可見的窗口分別為IDA-View,Named,和消息輸出窗口(output Window)。 IDA圖形視圖會有執(zhí)行流,Yes箭頭默認為綠色,No箭頭默認為紅色,藍色表示默認下一個執(zhí)行塊。在寄存器窗口中顯示著每個寄存器當前的值和對應在反匯編窗口中的內(nèi)存地址。函數(shù)在進入時都會保存堆棧地址EBP和ESP,退出函數(shù)時恢復。選擇菜單Debugger下的Start process(也可以按F9鍵)來開始調(diào)試。調(diào)試會讓程序在電腦中執(zhí)行,所以IDA會提示注意提防惡意程序、病毒和木馬。 打開IDA Pro 6.5,為進入IDA界面提供三種選項,分別是New(新建),Go(運行),Previous(上一個)。 選擇File菜單下的Open,打開想要逆向的可執(zhí)行文件,會顯示一個Load a new file的界面。這里可以選擇: 1. 程序的類型; 2. 處理器的類型; 3. 加載的段地址和偏移量; 4. 是否允許分析; 5. 一些加載選項; 6. 內(nèi)核和處理器的一些選項; 7. windows系統(tǒng)dll所在的目錄。 默認選擇PE文件就可以,對于一些網(wǎng)絡(luò)數(shù)據(jù)包或者其他格式的文件,可以使用二進制加載,自己進行解析。工作區(qū)有多個子窗口,IDA View-A是反匯編窗口,HexView-A是十六進制格式顯示的窗口,Imports是導入表(程序中調(diào)用到的外面的函數(shù)),F(xiàn)unctions是函數(shù)表(這個程序中的函數(shù)),Structures是結(jié)構(gòu),Enums是枚舉。IDA view: 定位要修改的代碼段在哪里。 Hex view: 用來修改我們的數(shù)據(jù) exports window: 導出窗口 import window: 導入窗口 names window: 函數(shù)和參數(shù)的命名列表 functions window: 樣本的所有函數(shù)窗口 strings window: 字符串顯示窗口,會列出程序中的所有字符串 IDA很智能,鼠標移到某些標識符上會自動有適當?shù)奶崾?,雙擊還能自動跳到相應的位置。把一個函數(shù)逆向的方法很簡單,只要按F5鍵就會出來逆向出的C語言程序了。退出IDA時,會進行文件保存確認,如果需要繼續(xù)進行分析,將IDA中間數(shù)據(jù)庫打包,下次繼續(xù)打開就可以進行分析;如果不需要繼續(xù)分析,選擇不要打包,不要存儲數(shù)據(jù)庫。IDA打開應用程序時,會為其創(chuàng)建一個數(shù)據(jù)庫,后綴為IDB。IDB由4個文件組成:后綴為id0的二叉樹形式的數(shù)據(jù)庫,后綴為id1的程序字節(jié)標識,后綴為nam的Named窗口的索引信息,后綴為til的給定數(shù)據(jù)庫的本地類型定義的相關(guān)信息。 一旦IDA為某個可執(zhí)行程序創(chuàng)建數(shù)據(jù)庫,它本身就不再需要訪問這個可執(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 寄存器的標志位跳轉(zhuǎn), 這個太多了.學 Win32 匯編28 - 跳轉(zhuǎn)指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等 MOVSX MOVZX 比如 MOVSX EAX, BYTE PTR 00401000 或 MOVZX EAX, BYTE PTR 00401000 在C語言中應該如何表達啊? 比如定義一個全局變量 BYTE bt = 101; DWORD dw; 應該如何把bt賦值到dw中. 并且功能與MOVSX/MOVZX相同? 匯編語言與C語言的語言構(gòu)件不同,并不是一定能轉(zhuǎn)成完全等價的C語言的代碼的。 對于以上代碼,可以這樣理解: movsx = dw = (DWORD) ( (signed char) (bt) ) movzx = dw = (DWORD) ( (unsigned char) (bt) ) movzx是把高位全部用0填充,而movsx是把原來數(shù)的最高位擴展成超出的位。 對于bt=101,也就是0x65,八位二進制是“01100101”,因為它的最高位是0,因此這兩種情況,dw都等于0x00000065換一個,比如bt=247,也就是0xF7,八位二進制是“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)(jump) “o”表示偏移值(offset) “p”表示子程序(procedure) 雙擊這里或按回車鍵可以跳到調(diào)用該處的地方參考重命名: 找到一段代碼(一般為函數(shù)入口名),右鍵點擊選擇”Rename”可以將函數(shù)名稱變成易懂的名稱.標簽的用法: 在菜單”Jump”中選擇”Mark Position” 將會打開 標記當前位置功能,輸入一個名稱, 在菜單”Jump/Jump to marked position” 中或按”Ctrl+M”鍵雙擊想要調(diào)轉(zhuǎn)的名稱,便會到達制定的代碼位置.進制的轉(zhuǎn)換: 選擇快捷鍵的#可以轉(zhuǎn)換進制,選擇”Toggle leading zeroes”功能是用0填補數(shù)據(jù)前的空位.cqd,為Convert Double to Quad的縮寫,意為將雙字數(shù)據(jù)擴展為四字。該指令先把edx的每一位置成eax的最高位(若eax=0x80000000, 則edx=0xFFFFFFFF;若eax該指令常用于擴展被除數(shù),很久前,指令集規(guī)定除數(shù)必須是被除數(shù)的一半長,這個規(guī)定一直被沿用。使用IDIV執(zhí)行除法時,如果除數(shù)是32位,這就要求被除數(shù)是64位,即EDX:EAX,所以擴展一下EAX以滿足除法指令的條件并且得到正確的結(jié)果。DIV 和IDIV DIV和IDIV兩個都是算術(shù)除法操作指令。DIV是無符號數(shù)除法 DIV s ;完成兩個無符號數(shù)相除。 IDIV 是有符號數(shù)除法指令,完成兩個有符號數(shù)相除。被除數(shù)、商、除數(shù)、余數(shù)存放位置及對s的規(guī)定與DIV指令相同。 修改程序的指令或者數(shù)據(jù),并進行保存 如何修改數(shù)據(jù)在Hex View窗口下, S1雙擊要修改的地方 S2使用F2捷方式修改當前字節(jié) S3再按下F2快捷方式應用修改。如何改變執(zhí)行流程 1修改跳轉(zhuǎn)指令。 2修改內(nèi)存數(shù)據(jù)。 3IDA View中使用下面的命令Jump to IP,Set IP, Run to cursor。 保存修改 使用下面的主菜單命令,直接把修改保存到輸入文件中,即可。 IDA Main Menu-Edit-PatchProgram-Apply patches to input file。OD中右鍵-保存到文件-選擇 我的OD是這樣的,只能修改一條,通過選擇,保存一條重新載入再修改再保存.如何對DLL文件進行動態(tài)跟蹤用F2在IDA View中當前代碼行切換斷點。啟動裝載DLL的EXE文件。使用Debugger-Attach toprocess把當前二進制代碼attach到正在運行的進程中去。現(xiàn)在應該進入斷點。F7Stepinto。F8Stepover。F9continue。Cursor移到內(nèi)存位置后雙擊就可以查看到具體內(nèi)存中的值,右擊快捷菜單Jumpto IP項,可以回到你剛才指令的地方。IDA View中有很多行代碼,可以使用;快捷鍵對當前行進行注釋。為了觀察具體指令的二進制表示你還需要IDAView-右擊快捷菜單-Synchronize with-Hex View 1這樣Hex View會和你的IDA View中光標位置同步。在IDA View中為函數(shù)改名,用N快捷鍵。觀察內(nèi)存(變量)Tool bar-Open the watch list window,Toolbar-Add a variable towatch。如果作者混淆了二進制代碼,你需要IDAView在頻繁使用Data快捷鍵,Code快捷鍵,強制IDA,解析指定數(shù)據(jù)塊為數(shù)據(jù)(Data)或代碼(Code)。這些32位寄存器有多種用途,但每一個都有“專長”,有各自的特別之處。EAX 是”累加器”(accumulator), 它是很多加法乘法指令的缺省寄存器。 EBX 是”基地址”(base)寄存器, 在內(nèi)存尋址時存放基地址。 ECX 是計數(shù)器(counter), 是重復(REP)前綴指令和LOOP指令的內(nèi)定計數(shù)器。 EDX 則總是被用來放整數(shù)除法產(chǎn)生的余數(shù)。 ESI/EDI 分別叫做”源/目標索引寄存器”(source/destination index),因為在很多字符串操作指令中, DS:ESI指向源串,而ES:EDI指向目標串. EBP 是”基址指針”(BASE POINTER), 它最經(jīng)常被用作高級語言函數(shù)調(diào)用的”框架指針”(frame pointer). 在破解的時候,經(jīng)??梢钥匆娨粋€標準的函數(shù)起始代碼: push ebp ; 保存當前ebp mov ebp,esp ; EBP設(shè)為當前堆棧指針 sub esp, xxx ; 預留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)常用來將寄存器當作結(jié)構(gòu)體指針來用 ASSUME edx:ptr STRUCT ; 將edx 定義為STRUCT指針變量把STRUCT結(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. 按空格鍵切換反匯編窗口(列表視圖=圖形視圖) 反匯編窗口有兩種顯示格式:面向文本的列表視圖和圖形視圖。不同視圖在不同的場景下各有所長,按空格鍵可以快速切換。 2. 翻頁 esc 和 Ctrl+Enter 當執(zhí)行跳轉(zhuǎn)功能后,需要返回時,只要在工具欄中點擊 或按”Ctrl+Enter”鍵. 3. 注釋 “;”和”:” 按;號輸入的注釋,所有交叉參考處都會出現(xiàn), 按:號鍵輸入的注釋只在該處出現(xiàn) 4. 使用小鍵盤“-”,“+”查看函數(shù)之間的關(guān)系 IDAView下使用小鍵盤“-”,“+”快捷方式可以在代碼同關(guān)系圖之間切換。 5. 使用X查看符號引用 IDA View下使用X快捷方式,定位引用了當前符號的代碼。 6. 快捷鍵F5顯示C偽代碼 如果有Main menu-View-Open SubViews-Pseudocode F5菜單,說明你已經(jīng)安裝了Hex Rays decompiler插件,可以在查看匯編的時候,按F5打開偽代碼子窗口。 7. 使用快捷鍵”*”把變量重定義為數(shù)組。 8. 快捷鍵Ctrl+S,打開搜索類型選擇對話框雙擊Strings,跳到字符串段菜單項“SearchText”; 9. 快捷鍵Alt+T,打開文本搜索對話框,在String文本框中輸入要搜索的字符串點擊OK即可;Open Subvie
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 22283-2025長白豬種豬
- 2025年沈陽大車貨運資格證考試題
- 2025年貴陽貨運從業(yè)資格證考試模擬試題及答案大全解析
- 單位綠化樹木修剪合同范本
- 上水泥合同范本
- 冷庫設(shè)備租用合同范本
- 企業(yè)收款合同范本
- 協(xié)議客戶合同范本
- 公路項目總承包合同范本
- 制作樣冊合同范例
- 2024年南京旅游職業(yè)學院高職單招語文歷年參考題庫含答案解析
- 《電商直播》 課件 項目一 走入電商直播
- 《中國宮腔鏡診斷與手術(shù)臨床實踐指南(2023版)》解讀課件
- 中藥學電子版教材
- GB/T 9535-1998地面用晶體硅光伏組件設(shè)計鑒定和定型
- 臥式設(shè)備安裝
- 橋梁施工危險源辨識與防控措施
- CFG樁施工記錄表范本
- 在生產(chǎn)過程中物料流轉(zhuǎn)交接管理規(guī)定(清風出品)
- 第1章操作系統(tǒng)引論
- 復旦校內(nèi)辦事指南
評論
0/150
提交評論