官术网_书友最值得收藏!

1.3 反匯編

反匯編二進(jìn)制文件的過程包括將二進(jìn)制文件運(yùn)行的匯編指令從其機(jī)器碼格式重構(gòu)為人類可讀的匯編語言。反匯編最常見的用例包括惡意軟件分析、編譯器的性能和輸出準(zhǔn)確性驗(yàn)證、漏洞分析,以及針對閉源軟件缺陷進(jìn)行漏洞利用或概念驗(yàn)證開發(fā)。

在這些應(yīng)用中,漏洞利用開發(fā)可能是最需要對實(shí)際匯編代碼進(jìn)行分析的。雖然漏洞發(fā)現(xiàn)通常可以通過模糊處理等技術(shù)來完成,但從檢測到的崩潰代碼構(gòu)建漏洞利用或發(fā)現(xiàn)為什么某些代碼區(qū)域無法被模糊測試覆蓋,通常需要扎實(shí)的匯編知識。

在這種情況下,通過閱讀匯編代碼對漏洞的確切條件實(shí)現(xiàn)精細(xì)的掌握是至關(guān)重要的。編譯器分配變量和數(shù)據(jù)結(jié)構(gòu)的確切方式對于開發(fā)漏洞利用至關(guān)重要,因此深入了解匯編知識是必需的。通常一個看似“無法利用”的漏洞,實(shí)際上,只要再投入一點(diǎn)創(chuàng)造力和辛勤工作來真正理解易受攻擊的功能的內(nèi)部機(jī)制,便可變得可利用。

反匯編可執(zhí)行文件可以通過多種方式進(jìn)行,我們將在本書的第二部分更詳細(xì)地研究這個問題。但是,目前快速查看可執(zhí)行文件的反匯編輸出的最簡單的工具之一是Linux工具objdump[3]

讓我們編譯并反匯編以下write()程序:

我們可以用GCC編譯這段代碼并指定-c選項(xiàng)。這個選項(xiàng)告訴GCC在不調(diào)用鏈接進(jìn)程的情況下創(chuàng)建目標(biāo)文件,因此我們可以只對編譯的代碼運(yùn)行objdump,而不看周圍所有目標(biāo)文件(如C運(yùn)行時)的反匯編。main函數(shù)的反匯編輸出如下:

雖然像objdump這樣的Linux實(shí)用工具對快速反匯編小程序很有用,但較大的程序需要更方便的解決方案。如今存在各種反匯編器可以使逆向工程更高效,包括免費(fèi)的開源工具(如Ghidra[4])和昂貴的解決方案(如IDA Pro[5])等。這些將在本書的第二部分中進(jìn)行詳細(xì)討論。

主站蜘蛛池模板: 石首市| 舟山市| 龙门县| 罗城| 万山特区| 郸城县| 涞源县| 石阡县| 长宁区| 隆德县| 英山县| 兴安盟| 尼玛县| 瑞金市| 龙里县| 吴忠市| 那曲县| 集贤县| 甘南县| 石阡县| 江城| 淮阳县| 漾濞| 道孚县| 乌兰察布市| 香格里拉县| 社旗县| 广安市| 西峡县| 崇仁县| 花垣县| 易门县| 平乐县| 岑巩县| 仁寿县| 商洛市| 得荣县| 天全县| 富顺县| 蕉岭县| 濮阳县|