一、序

無論是逆向分析還是漏洞利用,我所理解的攻防博弈無非是二者在既定的某一階段,以高維的方式進行對抗,并不斷地升級維度。比如,逆向工程人員一般會選擇在Root的環(huán)境下對App進行調(diào)試分析,其是以root的高權(quán)限對抗受沙盒限制的低權(quán)限;在arm64位手機上進行root/越獄時,ret2usr利用技術(shù)受到PXN機制的約束,廠商從修改硬件特性的高維度進行對抗,迫使漏洞研究者提高利用技巧。

下文將在Android逆向工程方面,分享鄙人早期從維度攻擊的角度所編寫的小工具。工具本身可能已經(jīng)不能適應現(xiàn)在的攻防,“授人以魚不如授人以漁”,希望能夠給各位讀者帶來一些思路,構(gòu)建自己的分析利器。

二、正

0x00 自定義Loader

早期Android平臺對SO的保護采用畸形文件格式和內(nèi)容加密的方式來對抗靜態(tài)分析。隨著IDA以及F5插件地不斷完善和增多,IDA已經(jīng)成為了逆向人員的標配工具。正因如此,IDA成為了畸形文件格式的對抗目標。畸形方式從減少文件格式信息到構(gòu)造促使IDA加載crash的變化正應證了這一點。對此,鄙人研究通過重建文件格式信息的方式來讓IDA正常加載。

在完成編寫修復重建工具不久之后,鄙人在一次使用IDA的加載bin文件時,猛然意識到畸形文件格式的對抗目標是IDA對ELF文件的加載的默認loader。既然防御的假象和維度僅僅在于默認loader,那么以自定義的loader加載實現(xiàn)高維攻擊,理論是毫無敵手的。

那如何來實現(xiàn)IDA自定義loader呢?

以Segment加載的流程對ELF文件進行解析,獲取和重建Section信息(參看上面所說貼子)。
把文件信息在IDA中進行展示,直接調(diào)用對應的IDAPython接口

實現(xiàn)加載bin文件的py代碼見文末github鏈接,直接放置于IDA/loaders目錄即可。由于早期少有64位的安卓手機,加載腳本僅支持arm 32位格式,有興趣讀者可以改寫實現(xiàn)全平臺通用。不同ndk版本所編譯文件中與動態(tài)加載無關(guān)的Section不一定存在,注釋相應的重建代碼即可。

網(wǎng)友評論