Androidmanifest文件加固和對抗

前言

惡意軟件爲了不讓我們很容易反編譯一個apk,會對androidmanifest文件進行魔改加固,本文探索androidmanifest加固的常見手法以及對抗方法。這裏提供一個惡意樣本的androidmanifest.xml文件,我們學完之後可以動手實踐。

1、Androidmanifest文件組成

這裏貼一張經典圖,主要描述了androidmanifest的組成

image

androidmanifest文件頭部僅僅佔了8個字節,緊跟其後的是StringPoolType字符串常量池

(爲了方便我們觀察分析,可以先安裝一下010editor的模板,詳細見2、010editor模板)

Magic Number

這個值作爲頭部,是經常會被魔改的,需要重點關注

image

StylesStart

該值一般爲0,也是經常會發現魔改

image

StringPool

image

尋找一個字符串,如何計算?

1、獲得字符串存放開放位置:0xac(172),此時的0xac是不帶開頭的8個字節

所以需要我們加上8,最終字符串在文件中的開始位置是:0xb4

2、獲取第一個字符串的偏移,可以看到,偏移爲0

image

3、計算字符串最終存儲的地方: 0xb4 = 0xb4 + 0

讀取字符串,以字節00結束

image

讀取到的字符爲:theme

【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “博客園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS)

總結:

stringpool是緊跟在文件頭後面的一塊區域,用於存儲文件所有用到的字符串

這個地方呢,也是經常發生魔改加固的,比如:將StringCount修改爲0xFFFFFF無窮大

在經過我們的手動計算和分析後,我們對該區域有了更深的瞭解。

2、010editor模板

使用010editor工具打開,安裝模板庫

image

搜索:androidmanifest.bt

image

安裝完成且運行之後:

image

會發現完整的結構,幫助我們分析

3、使用AXMLPrinter2進行的排錯和修復

用法十分簡單:

java -jar AXMLPrinter2.jar AndroidManifest_origin.xml

會有一系列的報錯,但是不要慌張,根據這些報錯來對原androidmanifest.xml進行修復

image​​

意思是:出乎意料的0x80003(正常讀取的數據),此時卻讀取到:0x80000

按照小端序,正常的數據應該是: 03 00 08

使用 010editor 打開

image

將其修復

image

保存,再次嘗試運行AXMLPrinter2

image

好傢伙還有錯誤,這個-71304363,不方便我們分析,將其轉換爲python的hex數據

NegativeArraySizeException 表示在創建數組的時候,數組的大小出現了負數。

androidmanifest加固後文件與正常的androidmanifest文件對比之後就可以發現魔改的地方。

image

將其修改回去

image

運行仍然報錯,是個新錯誤:

image

再次去分析:

image

stringoffsets如此離譜,並且數組的大小變爲了0xff

image

image

根據報錯的信息,嘗試把FF修改爲24

image

image

再次運行

image

成功拿到反編譯後的androidmanifest.xml文件

總結:

這個例子有三個魔改點經常出現在androidmanifest.xml加固

惡意軟件通過修改這些魔改點來對抗反編譯

更多網安技能的在線實操練習,請點擊這裏>>

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章