前言
惡意軟件爲了不讓我們很容易反編譯一個apk,會對androidmanifest文件進行魔改加固,本文探索androidmanifest加固的常見手法以及對抗方法。這裏提供一個惡意樣本的androidmanifest.xml文件,我們學完之後可以動手實踐。
1、Androidmanifest文件組成
這裏貼一張經典圖,主要描述了androidmanifest的組成
androidmanifest文件頭部僅僅佔了8個字節,緊跟其後的是StringPoolType字符串常量池
(爲了方便我們觀察分析,可以先安裝一下010editor的模板,詳細見2、010editor模板)
Magic Number
這個值作爲頭部,是經常會被魔改的,需要重點關注
StylesStart
該值一般爲0,也是經常會發現魔改
StringPool
尋找一個字符串,如何計算?
1、獲得字符串存放開放位置:0xac(172),此時的0xac是不帶開頭的8個字節
所以需要我們加上8,最終字符串在文件中的開始位置是:0xb4
2、獲取第一個字符串的偏移,可以看到,偏移爲0
3、計算字符串最終存儲的地方: 0xb4 = 0xb4 + 0
讀取字符串,以字節00結束
讀取到的字符爲:theme
【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “博客園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)
總結:
stringpool是緊跟在文件頭後面的一塊區域,用於存儲文件所有用到的字符串
這個地方呢,也是經常發生魔改加固的,比如:將StringCount修改爲0xFFFFFF無窮大
在經過我們的手動計算和分析後,我們對該區域有了更深的瞭解。
2、010editor模板
使用010editor工具打開,安裝模板庫
搜索:androidmanifest.bt
安裝完成且運行之後:
會發現完整的結構,幫助我們分析
3、使用AXMLPrinter2進行的排錯和修復
用法十分簡單:
java -jar AXMLPrinter2.jar AndroidManifest_origin.xml
會有一系列的報錯,但是不要慌張,根據這些報錯來對原androidmanifest.xml進行修復
意思是:出乎意料的0x80003(正常讀取的數據),此時卻讀取到:0x80000
按照小端序,正常的數據應該是: 03 00 08
使用 010editor 打開
將其修復
保存,再次嘗試運行AXMLPrinter2
好傢伙還有錯誤,這個-71304363,不方便我們分析,將其轉換爲python的hex數據
NegativeArraySizeException 表示在創建數組的時候,數組的大小出現了負數。
androidmanifest加固後文件與正常的androidmanifest文件對比之後就可以發現魔改的地方。
將其修改回去
運行仍然報錯,是個新錯誤:
再次去分析:
stringoffsets如此離譜,並且數組的大小變爲了0xff
根據報錯的信息,嘗試把FF修改爲24
再次運行
成功拿到反編譯後的androidmanifest.xml文件
總結:
這個例子有三個魔改點經常出現在androidmanifest.xml加固
惡意軟件通過修改這些魔改點來對抗反編譯
更多網安技能的在線實操練習,請點擊這裏>>