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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

[IDA教程]02-从零开始用IDA做逆向-进制的基础知识、搜索功能的使用

發(fā)布時(shí)間:2023/12/15 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 [IDA教程]02-从零开始用IDA做逆向-进制的基础知识、搜索功能的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

02-從零開(kāi)始用IDA做逆向

0x01、進(jìn)制的概念

計(jì)算機(jī)中的進(jìn)制概念是初學(xué)者必須知道的基礎(chǔ)知識(shí),學(xué)習(xí)逆向或者構(gòu)造漏洞利用的時(shí)候會(huì)接觸到這層面知識(shí)。二進(jìn)制,十進(jìn)制和十六進(jìn)制的基本概念如下:

BINARY(二進(jìn)制數(shù)):由兩個(gè)數(shù)字0和1組成。

DECIMAL(十進(jìn)制數(shù)):數(shù)字由10位數(shù)字(從0到9)組成

HEXADECIMAL(十六進(jìn)制數(shù)字):所有數(shù)字都用0到F(從0到9,再加上A,B,C,D,E和F )的字符組成,總共有16個(gè)字符。其中:A = 10,B = 11,C = 12,D = 13,E = 14,F(xiàn) = 15。

IDA界面的底部有一個(gè)可以執(zhí)行Python語(yǔ)句的文本框。這個(gè)功能可以讓IDA使用者很方便的在各種進(jìn)制之間切換:

如果輸入0x45會(huì)被解析成十六進(jìn)制數(shù),因?yàn)榍熬Y有0x。按Enter(回車(chē))就可以將十六進(jìn)制轉(zhuǎn)換為十進(jìn)制。

十六進(jìn)制數(shù)0x45的轉(zhuǎn)換結(jié)果如下圖:

十六進(jìn)制的0x45轉(zhuǎn)換為十進(jìn)制69。如果想將再轉(zhuǎn)換回去,必須使用hex()函數(shù),hex(69)結(jié)果如下圖所示:

要轉(zhuǎn)換為二進(jìn)制,可以使用bin()函數(shù):

hex(0x45)轉(zhuǎn)換為二進(jìn)制的結(jié)果數(shù)是1000101,因?yàn)榍熬Y有0B,說(shuō)明這是一個(gè)二進(jìn)制數(shù)。得到的二進(jìn)制數(shù)還可以用同樣的方法轉(zhuǎn)換為十進(jìn)制或十六進(jìn)制。

這個(gè)功能的作用就是Python欄里中輸入數(shù)字,按Enter(回車(chē))后將結(jié)果顯示為十進(jìn)制,也可以使用Python函數(shù)hex()bin()把數(shù)字分別轉(zhuǎn)換成Hex(十六進(jìn)制)或Binary(二進(jìn)制)。

0x02、十六進(jìn)制中的正負(fù)數(shù)表示

逆向過(guò)程中在常常會(huì)接觸到十六進(jìn)制,32位表示負(fù)數(shù)的十六進(jìn)制數(shù)又是怎么表示的呢?

十六進(jìn)制正數(shù)的補(bǔ)是它本身。負(fù)數(shù)的補(bǔ)碼是它本身的值每位求反,最后再加一。在32位二進(jìn)制數(shù)中,可以使用第一位來(lái)表示0(正)還是1(負(fù))。在IDA窗口VIEW(視圖)->CALCULATOR(計(jì)算器),可以調(diào)出這個(gè)窗口。

可以看到十六進(jìn)制的-0x45的值表示為0xffffffbb,二進(jìn)制的第一位為1。最小的正數(shù)顯然是0,最大的正數(shù)應(yīng)該是什么?

上圖從符號(hào)位可以看出0x7FFFFFFF是最大正數(shù)值,因?yàn)槌说谝晃粸?其他位都為1,那么把這個(gè)值+1后再看看結(jié)果。

結(jié)果是第一位變?yōu)?,其余所有位全變?yōu)?。問(wèn)題是IDA計(jì)算器里顯示的所有數(shù)字都是正數(shù),除非在數(shù)字之前加上“ - ”號(hào),例如:

所以最大負(fù)值為-1,對(duì)應(yīng)于0xFFFFFFFF,最小負(fù)值為0x80000000。如果不考慮符號(hào),那么所有值都是0到0xFFFFFFFF之間的正數(shù)。

如果考慮符號(hào)位,0x00x7FFFFFFF的范圍內(nèi)是正數(shù),在0xFFFFFFFF0x80000000的范圍內(nèi)是負(fù)數(shù)。

正數(shù)

000000000等于0

000000001等于1

…………………………

…………………………

7FFFFFFF等于十進(jìn)制2147483647(最大的正數(shù))

負(fù)數(shù)

FFFFFFFF等于-1

FFFFFFFE為-2

…………………………

…………………………

80000000等于-2147483648(最小的負(fù)數(shù))

0x03、ASCII碼表

系統(tǒng)打印/顯示數(shù)據(jù),每個(gè)字符都會(huì)分配一個(gè)對(duì)應(yīng)的十六進(jìn)制數(shù)值表示為字母,數(shù)字,符號(hào)。下表第一列為十進(jìn)制值,第二列為十六進(jìn)制值,第三列代表相應(yīng)的字符。例如空格的十六進(jìn)制是0x20或十進(jìn)制32。這個(gè)字符集被稱為ASCII(美國(guó)信息交換標(biāo)準(zhǔn)代碼)

IDA計(jì)算器里顯示0x45對(duì)應(yīng)的字符為E。

轉(zhuǎn)換字符的另一種方法是使用Python的chr()函數(shù):

在IDA的" HEX DUMP(十六進(jìn)制轉(zhuǎn)儲(chǔ))"窗口中顯示的是十六進(jìn)制數(shù),多出的一列顯示相應(yīng)的字符:

在圖里我們可以看到45表示為字母ê

0x04、IDA中的搜索功能

IDA菜單上有一個(gè)“Search(搜索)”選項(xiàng)提供了許多搜索選項(xiàng),下圖所示的IDA版本因?yàn)樘砑恿薎DA插件顯示出來(lái)的內(nèi)容可能不太一樣。

Next Code(Alt+C)

搜索下一個(gè)被解釋為代碼的地址,如果無(wú)法識(shí)別就會(huì)跳過(guò)。

Search completed. Found at 004011A1.
Search completed. Found at 004011A3.
Search completed. Found at 004011A5.
Search completed. Found at 004011AA.
Search completed. Found at 004011AC.
Search completed. Found at 004011AF.
Search completed. Found at 004011B6. 

NEXT DATA (Ctrl+D)

查找下一個(gè)被IDA解釋為data(數(shù)據(jù))的地址。

IDA 在不對(duì)應(yīng)任何代碼的地址處檢測(cè)到一個(gè)雙字節(jié)(dd),繼續(xù)搜索會(huì)尋找下一個(gè)數(shù)據(jù)。

例如:IDA停在地址:00402004,右側(cè)信息表示在DATA部分下。

Search completed. Found at 00402004.
Search completed. Found at 00402048.

IDA會(huì)忽略只包含0而且沒(méi)有任何引用的地址。也就是說(shuō)這個(gè)選項(xiàng)可以查找程序在使用的數(shù)據(jù)。

next explored和next unexplored

第一個(gè)功能查找已定義的代碼或數(shù)據(jù)(command或data),第二個(gè)功能是跳轉(zhuǎn)到?jīng)]檢測(cè)到有效指令或數(shù)據(jù)的區(qū)域:

使用【next unexplored】找到了0x402000中帶0的區(qū)域。

Search completed. Found at 00402000.
Search completed. Found at 00402000.
Search completed. Found at 00402001.
Search completed. Found at 00402001.
Search completed. Found at 00402002.
Search completed. Found at 00402003.
Search completed. Found at 00402008.

可以看到IDA忽略了地址0x402004,因?yàn)檫@樣的數(shù)據(jù)被IDA識(shí)別為explored(展開(kāi)的數(shù)據(jù))

INMEDIATE VALUE 與NEXT INMEDIATE VALUE

翻譯過(guò)來(lái)是搜索立即值( INMEDIATE VALUE),搜索下一個(gè)立即值(NEXT INMEDIATE VALUE )。可以搜索指定常量值的第一個(gè)命令或數(shù)據(jù)字節(jié)。:

如果選擇“ Find all occurrences”,IDA就搜索所有事件。如果沒(méi)勾選這個(gè)選項(xiàng)每次都要搜索一次,這種情況就可以使用next immediate value進(jìn)行下一個(gè)搜索。

Search Text與Search Next Text

搜索字符串,還支持正則表達(dá)式。

Search Next Text的作用是查找下一條字符串。

SEQUENCE OF BYTES

IDA這個(gè)功能可以搜索字節(jié)序列十六進(jìn)制、十進(jìn)制、八進(jìn)制字符串。

搜索出來(lái)的結(jié)果如下圖:

在IDA選項(xiàng)上雙擊第一個(gè)結(jié)果,打開(kāi)Options->General--> Number of opcode bytes設(shè)置值6,作用是顯示每條指令對(duì)應(yīng)的6個(gè)操作碼。

IDA顯示出剛才搜索的操作碼90 90

NOT FUNCTION

在下一個(gè)地址查找不完整的函數(shù)。 在004013D7找到一個(gè)獨(dú)立的RET命令,不屬于任何函數(shù)。

有些情況是因?yàn)閭€(gè)別函數(shù)沒(méi)有被IDA識(shí)別為函數(shù),但是指令的確是有效的。

小結(jié)

通過(guò)這篇文章可以學(xué)習(xí)到怎么用IDA的“Search(搜索)”功能做內(nèi)容搜索。

0x05、參考

https://tradahacking.vn/reversing-with-ida-from-scratch-p2-971d62a4c94a

REVERSING WITH IDA PRO FROM SCRATCH PART 2

https://drive.google.com/drive/folders/0B13TW0I0f8O2ckd2T0lsbXRoYmc

總結(jié)

以上是生活随笔為你收集整理的[IDA教程]02-从零开始用IDA做逆向-进制的基础知识、搜索功能的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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