[IDA教程]02-从零开始用IDA做逆向-进制的基础知识、搜索功能的使用
02-從零開始用IDA做逆向
0x01、進制的概念
計算機中的進制概念是初學(xué)者必須知道的基礎(chǔ)知識,學(xué)習(xí)逆向或者構(gòu)造漏洞利用的時候會接觸到這層面知識。二進制,十進制和十六進制的基本概念如下:
BINARY(二進制數(shù)):由兩個數(shù)字0和1組成。
DECIMAL(十進制數(shù)):數(shù)字由10位數(shù)字(從0到9)組成
HEXADECIMAL(十六進制數(shù)字):所有數(shù)字都用0到F(從0到9,再加上A,B,C,D,E和F )的字符組成,總共有16個字符。其中:A = 10,B = 11,C = 12,D = 13,E = 14,F(xiàn) = 15。
IDA界面的底部有一個可以執(zhí)行Python語句的文本框。這個功能可以讓IDA使用者很方便的在各種進制之間切換:
如果輸入0x45會被解析成十六進制數(shù),因為前綴有0x。按Enter(回車)就可以將十六進制轉(zhuǎn)換為十進制。
十六進制數(shù)0x45的轉(zhuǎn)換結(jié)果如下圖:
十六進制的0x45轉(zhuǎn)換為十進制69。如果想將再轉(zhuǎn)換回去,必須使用hex()函數(shù),hex(69)結(jié)果如下圖所示:
要轉(zhuǎn)換為二進制,可以使用bin()函數(shù):
hex(0x45)轉(zhuǎn)換為二進制的結(jié)果數(shù)是1000101,因為前綴有0B,說明這是一個二進制數(shù)。得到的二進制數(shù)還可以用同樣的方法轉(zhuǎn)換為十進制或十六進制。
這個功能的作用就是Python欄里中輸入數(shù)字,按Enter(回車)后將結(jié)果顯示為十進制,也可以使用Python函數(shù)hex()或bin()把數(shù)字分別轉(zhuǎn)換成Hex(十六進制)或Binary(二進制)。
0x02、十六進制中的正負(fù)數(shù)表示
逆向過程中在常常會接觸到十六進制,32位表示負(fù)數(shù)的十六進制數(shù)又是怎么表示的呢?
十六進制正數(shù)的補是它本身。負(fù)數(shù)的補碼是它本身的值每位求反,最后再加一。在32位二進制數(shù)中,可以使用第一位來表示0(正)還是1(負(fù))。在IDA窗口VIEW(視圖)->CALCULATOR(計算器),可以調(diào)出這個窗口。
可以看到十六進制的-0x45的值表示為0xffffffbb,二進制的第一位為1。最小的正數(shù)顯然是0,最大的正數(shù)應(yīng)該是什么?
上圖從符號位可以看出0x7FFFFFFF是最大正數(shù)值,因為除了第一位為0其他位都為1,那么把這個值+1后再看看結(jié)果。
結(jié)果是第一位變?yōu)?,其余所有位全變?yōu)?。問題是IDA計算器里顯示的所有數(shù)字都是正數(shù),除非在數(shù)字之前加上“ - ”號,例如:
所以最大負(fù)值為-1,對應(yīng)于0xFFFFFFFF,最小負(fù)值為0x80000000。如果不考慮符號,那么所有值都是0到0xFFFFFFFF之間的正數(shù)。
如果考慮符號位,0x0到0x7FFFFFFF的范圍內(nèi)是正數(shù),在0xFFFFFFFF到0x80000000的范圍內(nèi)是負(fù)數(shù)。
正數(shù)
000000000等于0
000000001等于1
…………………………
…………………………
7FFFFFFF等于十進制2147483647(最大的正數(shù))
負(fù)數(shù)
FFFFFFFF等于-1
FFFFFFFE為-2
…………………………
…………………………
80000000等于-2147483648(最小的負(fù)數(shù))
0x03、ASCII碼表
系統(tǒng)打印/顯示數(shù)據(jù),每個字符都會分配一個對應(yīng)的十六進制數(shù)值表示為字母,數(shù)字,符號。下表第一列為十進制值,第二列為十六進制值,第三列代表相應(yīng)的字符。例如空格的十六進制是0x20或十進制32。這個字符集被稱為ASCII(美國信息交換標(biāo)準(zhǔn)代碼)。
IDA計算器里顯示0x45對應(yīng)的字符為E。
轉(zhuǎn)換字符的另一種方法是使用Python的chr()函數(shù):
在IDA的" HEX DUMP(十六進制轉(zhuǎn)儲)"窗口中顯示的是十六進制數(shù),多出的一列顯示相應(yīng)的字符:
在圖里我們可以看到45表示為字母ê。
0x04、IDA中的搜索功能
IDA菜單上有一個“Search(搜索)”選項提供了許多搜索選項,下圖所示的IDA版本因為添加了IDA插件顯示出來的內(nèi)容可能不太一樣。
Next Code(Alt+C)
搜索下一個被解釋為代碼的地址,如果無法識別就會跳過。
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)
查找下一個被IDA解釋為data(數(shù)據(jù))的地址。
IDA 在不對應(yīng)任何代碼的地址處檢測到一個雙字節(jié)(dd),繼續(xù)搜索會尋找下一個數(shù)據(jù)。
例如:IDA停在地址:00402004,右側(cè)信息表示在DATA部分下。
Search completed. Found at 00402004.
Search completed. Found at 00402048.
IDA會忽略只包含0而且沒有任何引用的地址。也就是說這個選項可以查找程序在使用的數(shù)據(jù)。
next explored和next unexplored
第一個功能查找已定義的代碼或數(shù)據(jù)(command或data),第二個功能是跳轉(zhuǎn)到?jīng)]檢測到有效指令或數(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,因為這樣的數(shù)據(jù)被IDA識別為explored(展開的數(shù)據(jù))。
INMEDIATE VALUE 與NEXT INMEDIATE VALUE
翻譯過來是搜索立即值( INMEDIATE VALUE),搜索下一個立即值(NEXT INMEDIATE VALUE )??梢运阉髦付ǔA恐档牡谝粋€命令或數(shù)據(jù)字節(jié)。:
如果選擇“ Find all occurrences”,IDA就搜索所有事件。如果沒勾選這個選項每次都要搜索一次,這種情況就可以使用next immediate value進行下一個搜索。
Search Text與Search Next Text
搜索字符串,還支持正則表達式。
Search Next Text的作用是查找下一條字符串。
SEQUENCE OF BYTES
IDA這個功能可以搜索字節(jié)序列十六進制、十進制、八進制字符串。
搜索出來的結(jié)果如下圖:
在IDA選項上雙擊第一個結(jié)果,打開Options->General--> Number of opcode bytes設(shè)置值6,作用是顯示每條指令對應(yīng)的6個操作碼。
IDA顯示出剛才搜索的操作碼90 90:
NOT FUNCTION
在下一個地址查找不完整的函數(shù)。 在004013D7找到一個獨立的RET命令,不屬于任何函數(shù)。
有些情況是因為個別函數(shù)沒有被IDA識別為函數(shù),但是指令的確是有效的。
小結(jié)
通過這篇文章可以學(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做逆向-进制的基础知识、搜索功能的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习与不确定性_机器学习求职中的不确
- 下一篇: android电池充电以及电量检测驱动分