日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IDA工具各个功能总结

發(fā)布時(shí)間:2025/3/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IDA工具各个功能总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

生成文件:保存后生成的文件

id0:二叉樹數(shù)據(jù)庫
id1:文件包含描述每個(gè)程序字節(jié)的標(biāo)記

nam:包含IDA NAME窗口的數(shù)據(jù)庫
til:本地?cái)?shù)據(jù)庫有關(guān)信息

?

導(dǎo)航帶顏色

?

常用菜單



ESC鍵:后退鍵(避免在窗口標(biāo)題欄使用,退出窗口)

?

綠色箭頭為YES,紅色箭頭為NO,藍(lán)色箭頭為下一個(gè)立即執(zhí)行的塊,拖動(dòng)線可以改變連接路徑。恢復(fù)源圖形,右鍵鼠標(biāo)菜單,點(diǎn)擊布局圖表。

?

Ctrl鍵+鼠標(biāo),放大縮小視圖

?

反匯編視圖

與圖標(biāo)視圖一一對(duì)應(yīng),通常打開兩個(gè)視圖分別對(duì)比工作,按住shift+;可以添加自己的注釋。

?

NAME窗口

F:為重點(diǎn)查看函數(shù),常規(guī)函數(shù)

L:為庫函數(shù)(動(dòng)態(tài)鏈接庫)

A:字符串

I:系統(tǒng)導(dǎo)入函數(shù)(基本不用看)(粉色導(dǎo)航代)

Sub_XXXXXX? ? ? ? ?子函數(shù)
loc_xxxxxx? ? ? ? ? ? ? 地址處指令
byte_xxxxxx? ? ? ? ? ? 8位數(shù)據(jù)
word_xxxxxx? ? ? ? ? ?16位數(shù)據(jù)
dword_xxxxxx? ? ? ? ?32位數(shù)據(jù)
unk_xxxxxx? ? ? ? ? ? ?未知,unknow

?

字符串窗口

查找字符串對(duì)應(yīng)的位置

?

十六進(jìn)制窗口

同步反匯編窗口,更好的監(jiān)視

?

輸出函數(shù)窗口

唯一接口,輸出的函數(shù),和main一樣

?

輸入函數(shù)窗口

列出二進(jìn)制導(dǎo)入的函數(shù),系統(tǒng)導(dǎo)入的

?

函數(shù)窗口(看英文找功能函數(shù))

識(shí)別所有函數(shù)名稱

?

結(jié)構(gòu)體窗口

查看結(jié)構(gòu)體,雙擊進(jìn)入結(jié)構(gòu)體內(nèi)部查看詳細(xì)信息

?

枚舉窗口

IDA自動(dòng)識(shí)別枚舉代碼類型

?

類型庫窗口

可看到克重頭文件包含庫

右鍵鼠標(biāo)可以插入自己要的庫

?

函數(shù)調(diào)用窗口

查看上層函數(shù),本級(jí)函數(shù)級(jí)內(nèi)部調(diào)用了些什么函數(shù),與圖表視圖同步查看工作最好。

?

問題窗口(最少用到的窗口)

需要自己分析的問題

比如:未初始化的變量

?

?

導(dǎo)航條

藍(lán)色為常用函數(shù),雙擊進(jìn)入導(dǎo)航函數(shù)內(nèi)部,與圖表結(jié)合使用。

g鍵:跳轉(zhuǎn)地址

?

棧幀

1。先要保護(hù)現(xiàn)場(chǎng)
2。講參數(shù)按照調(diào)用約定放在被運(yùn)行棧幀上,這樣這個(gè)棧幀的棧頂指針就會(huì)發(fā)生改變
3。如果有必要,調(diào)用函數(shù)會(huì)配置一個(gè)棧指針,保存調(diào)用方希望保持不變的內(nèi)容(寄存器值)
4。被調(diào)用函數(shù)為它可能需要的任何局部變量發(fā)配空間,需要棧幀棧頂向上(-操作)開辟地方
5。被調(diào)用函數(shù)返回值存放在EAX或者存放在可以立即被調(diào)用到的地方
6。一旦函數(shù)完成其他操作,任何局部變量都釋放了
7。調(diào)用地方如果重新獲得控制權(quán),刪除再棧中開辟的空間(+操作)

8。完成“序言(3,4)”“過程(5,6)”“尾聲(6,7)”

C的調(diào)用約定_cdecl(參數(shù)從右向左一次入棧),清理方式:調(diào)用者清理(“老子”清理“兒子”)

? ?對(duì)于參數(shù)可變化的:printf("XXXXX");

VOID demo_cdecl(int w,int x,int y,int z)

asm
push w
push x
push y
push z
call demo(進(jìn)入了函數(shù),開始執(zhí)行了。。。。。。)
add esp,16 ? 4*sizeof(int)

?

標(biāo)準(zhǔn)調(diào)用_stdcall
VOID demo_stdcall(int w,int x,int y,int z)
push w
push x
push y
push z
call demo(進(jìn)入了函數(shù),開始執(zhí)行了。。。。。。)
ret 16

?

快速調(diào)用_fastcall
VOID demo_fastcall(int w,int x,int y,int z)
前兩個(gè)(ECX=W,edx=x)參數(shù)將被分配給ECX,EDX
剩下的都被按照_stdcall調(diào)用約定
ret 8


C++調(diào)用約定
使用this指針
VC提供了 thiscall調(diào)用,將this傳遞給而ecx
GC++中被當(dāng)做靜態(tài),存放在棧頂

?

IDA搜索功能

1. 搜索數(shù)據(jù)庫? ? ??
2. 文本搜索? ? ? ? ? ALT+T
3. 二進(jìn)制搜索? ? ? ALT+B

?

重命名與局部變量

右鍵啞名可以重命名(Rename),改一處所有變量全部會(huì)跟著改變。快捷鍵點(diǎn)擊啞名按n鍵,空格還原變量名。
arg_0(棧變量)
var_4(普通變量)
一個(gè)函數(shù)只能擁有一個(gè)arg_0


IDA的注釋與代碼轉(zhuǎn)換

shift+; 對(duì)程序注釋
右鍵鼠標(biāo)常數(shù)轉(zhuǎn)換對(duì)應(yīng)進(jìn)制常數(shù)

?

操作函數(shù)

刪除函數(shù):右鍵函數(shù)體(交叉引用)-> 編輯 -> 函數(shù) -> 刪除函數(shù)

編輯函數(shù):右鍵函數(shù)體 -> 編輯函數(shù)(還有局部變量和寄存器保存功能)

?

字符與數(shù)據(jù)間的轉(zhuǎn)換

函數(shù) -> 編輯 -> 轉(zhuǎn)換為代碼(轉(zhuǎn)換為數(shù)據(jù))

? 或者:左鍵點(diǎn)擊函數(shù)體,按C轉(zhuǎn)換代碼,按D轉(zhuǎn)換數(shù)據(jù)

改變數(shù)據(jù)大小,比如db改為dw:選項(xiàng) -> 設(shè)置數(shù)據(jù)類型

字符串:db數(shù)據(jù),以0為結(jié)尾。

(1)了解使用寄存器的方式,可以推斷出數(shù)據(jù)類型的和、大小,如果一條指令從內(nèi)存中加了一個(gè)32位的寄存器,相關(guān)的內(nèi)存保存了一個(gè)4字節(jié)的類型

(2)函數(shù)原型分配參數(shù)數(shù)據(jù)類型,IDA維護(hù)一個(gè)龐大的函數(shù)原型,分析傳遞的參數(shù)類型,讓他與某個(gè)內(nèi)存的地址關(guān)聯(lián)起來,CRITICAL_SECTION(Windows的數(shù)據(jù)類型)

(3)分析字節(jié)序列,知道肯能的數(shù)據(jù)類型,掃描2進(jìn)制,知道字符串內(nèi)容

name generation(命名生成)

轉(zhuǎn)換數(shù)組:編輯 -> 轉(zhuǎn)換為數(shù)組組合

?

IDA數(shù)據(jù)中數(shù)組元素的訪問

全局:mov dword_21365c, 10

局部:mov? [ebp+var_c], 10

?

IDA中結(jié)構(gòu)體與數(shù)據(jù)庫

結(jié)構(gòu)體界面,按insent健,起名字后OK,按d健插入數(shù)據(jù)(在按d為類型大小變換),在ends按a為插入字符串,右鍵菜單轉(zhuǎn)換數(shù)據(jù)數(shù)組,按n健重命名,按u鍵刪除字段,按delete刪除結(jié)構(gòu)體。

?

?

編輯 -> 結(jié)構(gòu)體變量,在數(shù)據(jù)中轉(zhuǎn)換為結(jié)構(gòu)體。

alt+k :堆結(jié)構(gòu)體

?

分析頭文件

文件 -> 加載文件 -> 分析 C 頭文件

?

創(chuàng)建idc腳本

文件 -> 生成文件 -> 數(shù)據(jù)庫轉(zhuǎn)存為idc文件

?

C++逆向工程基礎(chǔ)

ecx=thisclass A: {public:A();virtual void vfunc1()=0;virtual void vfunc2();virtual void vfun3();virtual void vfun4();private:(虛擬指針)int x;int y; };class B:public A {public:B();virtual void vfunc1();virtual void vfunc2();virtual void vfunc5();private:int z; };void call_vfunc(A* a) {a->vfun3(); }int main() {A *a_ptr =new B();call_vfunc(a_ptr); }B::vfunc3()push ebpmov ebp,esp //保存現(xiàn)場(chǎng) mov eax,[ebp+10d] //a_ptr 4個(gè)函數(shù)+虛擬指針指向虛函數(shù)表mov edx,[eax] //*a_ptr 1 將虛擬表指針內(nèi)容放入edxmov ecx,[ebp+10d] //*a_ptr 將虛擬表指針放入cx,繼承作用mov eax,[edx+8] //a->vfun3();2 0,4,8 取第三個(gè)函數(shù)也就是vfun8 a->vfun3();call eax //3 call就是調(diào)用a->vfun3()// 2個(gè)可以簡寫為:mov eax,[edx+B_Vtable.vfunc3]

?

交叉引用

jmp:if跳轉(zhuǎn)

call:函數(shù)調(diào)用

上箭頭:引用出在上方

下箭頭:引用處在下方

j: jmp

r: read? ? ?讀數(shù)據(jù)區(qū)的某數(shù)據(jù)

w: weite? 往某變量寫數(shù)據(jù)

o: 偏移? ? ?offset引用

p: 調(diào)用子程序

詳細(xì):https://blog.csdn.net/hgy413/article/details/50594320

?

交叉引用列表與繪圖

交叉應(yīng)用附近,點(diǎn)擊變量,右鍵跳轉(zhuǎn)到交叉引用列表,或者按x

查看函數(shù)調(diào)用

?

按F12,查看最清晰的流程圖

查看函數(shù)調(diào)用圖

?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的IDA工具各个功能总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。