Apktool
Apktool
APK 反编译的目录结构
assets用于存放资源文件,系统在编译的时候不会编译该文件夹下的资源文件。res主要用来存放安卓资源,该文件夹下还有多个子文件夹,常见的有:anim动画,drawable图片,color颜色,menu菜单,layout布局,values常量值,xmlXML文件smailclass.dex字节码文件反编译得到的文件夹,回编译时对该文件的大小有限制,因此会分出smali_classes2,smali_classes3等多个文件夹。AndroidManifest.xmlapk的全局配置文件,提供了Android系统所需要的关于该应用的必须信息,例如应用权限。
Apktool 官方文档
介绍
Apk本质上是一个包含资源和组装的Java代码的zip文件。如果只是简单地解压Apk,只能得到AndroidManifest.xml,classes.dex,resources.arsc等文件。==文件都是乱码,无法阅读==。这就需要Apktool对Apk进行反编译。
反编译命令
1 | apktool d foo.jar |
回编译(重新构建)
1 | apktool b foo.jar.out |
安装依赖框架
-p filePath:将框架文件存储到filePath路径
-t tag:标记框架使用的标签作用:更好地控制文件的命名方式和存储方式。
1 | apktool if framework-res.apk |
框架文件
正如你可能知道的,Android应用程序利用Android操作系统本身的代码和资源。这些被称为框架资源,Apktool依赖于这些资源来正确解码和构建apks。
每个Apktool版本都在内部包含了最新的AOSP框架。这允许你解码和构建大多数apks没有任何问题。但是,除了常规的AOSP文件之外,制造商还添加了他们自己的框架文件。要使用apktool对抗这些制造商apks,你必须首先安装制造商框架文件。
从哪里找到框架文件?
大多数情况下,设备上
/system/framework中的任何apk都将是一个框架文件。在某些设备上,它们可能驻留在/data/system-framework中,甚至巧妙地隐藏在/system/app或/system/ private -app中。它们通常以“资源”、“res”或“框架”命名。例如:HTC的框架文件名称为
com.htc.resources.apk,LG的框架文件名称为lge-res.apk.
内部框架
Apktool有一个内部框架。该文件在使用过程中被复制到
$HOME/apktool/framework/1.apk。
管理框架文件
根据操作系统的不同,框架文件存储在不同的位置。
- unix -
$HOME/.local/share/apktool- windows -
%UserProfile%\AppData\Local\apktool- mac -
$HOME/Library/apktool
选项
反编译选项
1 | -b |
unknown 文件夹
apktool.yml文件里有一个unknownFiles字段,该字段配置的就是unknown文件夹下所有文件的路径,后面跟上”0”,或者”8”;这个配置很重要,决定了后面apk重新构建时unknown目录下的文件能否打进去,如果不配置apktool进行回编译的时候会丢弃掉没有配置的文件
apktool官方文档对
unknownFiles有说明:unknownFiles - Used to record name/location of non-standard files in an apk in order to place correctly on rebuilt apk(用于记录 apk 中非标准文件的名称/位置,以便正确放置在重建的 apk 上 )