Android APK反編譯之ARSC分析

轉載自公衆號“嵌入式Linux技術分享

 

 

今天主要結合記賬軟件App,對Android APK反編譯之ARSC進行分析。

如果APK被加固導致無法使用apktool進行反編譯,這時我們只能利用unzip解壓APK,對解壓的文件進行分析,如下圖所示。

解壓後的AndroidMainfest.xml和resource.arsc都是二進制文件,下面主要分析resource.arsc文件,該ARSC格式文件內容對應Android App軟件工程res目下相關內容,存放了資源相關的信息。

 

首先我們看下記賬軟件res目錄下兩個xml文件,public.xml和strings.xml。描述一個屬性特徵需要type、key和value三個值,type可以是mipmap、layout、menu、strings等類型。如下是public.xml部分代碼,光亮處type爲mipmap,key爲ic_launcher。

 

下圖是strings.xml部分代碼,光亮處type爲string,key爲abc_action_bar_home_description,value爲Navigate home。

 

 

重點來了,下面利用010Editor工具分析resource.arsc文件,查詢上面public.xml和strings.xml中ic_launcher和abc_action_bar_home_description兩個屬性值。

 

       先貼一個ARSC文件格式核心部分,如下圖所示,分別指出了Type、Key和Value的Pool,以及實際的Type、Key和Value。

 

下圖是Type Pools的信息,我們可以找到關心的類型mipmap的數組下標爲12,類型string的數組下標爲13。

 

       第一個實例,我們定位ic_launcher的屬性值。首先我們需要知道ic_launcher的type爲mipmap,查Type Pools,對應的type數組下標爲12,查找結果如下圖所示,其中ResTable_typeSpec結構體header中id就是Type id,另外struct ResTable_entry entry[0]顯示的ic_launcher就是Key值,Value值是404,dataType爲Type_STRING。

根據屬性Value值是404,查詢Value Pool,如下所示,得到ic_launcher屬性值爲res/mipmap-mdpi-v4/ic_launcher.png

 

       第二個實例,我們定位abc_action_bar_home_description的屬性值。首先我們需要知道abc_action_bar_home_description的type爲string,查Type Pools,對應的數組下標爲13,查找結果如下圖所示,abc_action_bar_home_description屬性的Value值是1951。

 

根據屬性Value值是1951,查詢Value Pool,如下所示,得到abc_action_bar_home_description屬性值爲Navigate home。

 

 

綜上,上面對ARSC文件的分析結果與實際res目錄下文件內容一致。

 

 

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