反匯編的一些基本知識(shí)
在程序?qū)糜幸痪涿裕喝绻隳茏x懂匯編,一切程序?qū)δ銇?lái)說(shuō)就是開源。
在程序?qū)糜幸痪涿裕喝绻隳茏x懂匯編,一切程序?qū)δ銇?lái)說(shuō)就是開源。所以要抵達(dá)黑客層次,不熟練的掌握分析技巧那是不可能的。我們看看一些的工具和相關(guān)技巧,后續(xù)我們?cè)倏纯匆恍└呒?jí)方法該怎么用。
常用的工具一般需要執(zhí)行三個(gè)步驟:
1,加載要反匯編的二進(jìn)制文件;
2,從二進(jìn)制文件中找到所有機(jī)器指令;
3,將指令轉(zhuǎn)換為匯編語(yǔ)句;通常第2步是一個(gè)難點(diǎn),由于機(jī)器指令與通常的二進(jìn)制數(shù)值無(wú)異,因此很容易把不是指令的數(shù)值認(rèn)為是機(jī)器指令。為了盡可能降低步驟2的錯(cuò)誤,反匯編算法常采用兩種模式,分別是線性反匯編和遞歸反匯編。
線性反匯編其實(shí)就是從頭走到尾,將所有二進(jìn)制數(shù)值都認(rèn)為是機(jī)器指令,然后將其轉(zhuǎn)換為匯編語(yǔ)句,我們常用的Objdum就是如此。這當(dāng)然會(huì)產(chǎn)生問(wèn)題,很顯然不可能所有二進(jìn)制數(shù)值都是機(jī)器指令,因此這種做法容易將原本是數(shù)據(jù)的數(shù)值看做是指令。由此會(huì)帶來(lái)兩種錯(cuò)誤,一種是將數(shù)值轉(zhuǎn)換成無(wú)效機(jī)器指令,一種更糟糕,數(shù)值正好對(duì)應(yīng)了某條機(jī)器指令,于是給后面的分析帶來(lái)巨大的干擾.
接下來(lái)我們看看遞歸反匯編。它的基本思路是尋找程序的控制流,它首先從main等程序入口著手,然后先是線性,如果遇到j(luò)ump等指令,它就會(huì)跳到j(luò)ump對(duì)應(yīng)的地址繼續(xù)反匯編。這種情況也容易出問(wèn)題,因?yàn)槌绦虻目刂屏骱茈y追蹤,因?yàn)楹芏嗵D(zhuǎn)其實(shí)是隱性跳轉(zhuǎn),也就是這種跳轉(zhuǎn)不會(huì)在二進(jìn)制文件中給出具體地址,需要在運(yùn)行時(shí)才能確認(rèn)具體地址。
致芯科技可以對(duì)程序進(jìn)行解密后進(jìn)行反匯編,得到匯編代碼,我們是不能直接得到c語(yǔ)言的。一般只要懂匯編語(yǔ)言的工程師也懂C語(yǔ)言,那么就可以照著匯編語(yǔ)言寫成c語(yǔ)言。不過(guò)這個(gè)過(guò)程需要比較長(zhǎng)的時(shí)間和耐心去做。
審核編輯:湯梓紅
-
開源
+關(guān)注
關(guān)注
3文章
3125瀏覽量
42067 -
反匯編
+關(guān)注
關(guān)注
1文章
29瀏覽量
10518 -
匯編代碼
+關(guān)注
關(guān)注
0文章
23瀏覽量
7520
原文標(biāo)題:反匯編的一些基本知識(shí)
文章出處:【微信號(hào):zhixinkeji2015,微信公眾號(hào):芯片逆向】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論