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目录下文件内容一致。

 

 

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