关闭

Apktool反编译APK

标签: apk反编译apktool
744人阅读 评论(0) 收藏 举报
分类:

目录

Apktool反编译APK

what is apk?

apk文件本身是zip包,解压缩后可看到如下结构的文件。但以下文件是加密/编译的,无法查看:

  1. manifest.xml 程序全局配置文件,含apk包名、渠道号、版本号等信息
  2. classes.dex java代码编译后的Dalvik字节码
  3. resources.arsc 编译后的二进制资源文件(文字、显示相关的xml文件)
    ( 注:好搜APK解压缩后,除了values外的其它资源文件都可直接查看。这也是常用的窃取别人app图片资源的方法o(∩_∩)o )
    apk解压缩后文件结构
    这时反编译工具就派上用场了,不需原代码,就可以更改配置、图标、版本号、渠道号、包名等信息,换汤不换药重新打包。再深入点可以一探究竟apk内部代码结构,尝试修改源代码后重新打包。
    Apktool是开源的第三方反编译project,曾由google code托管,现已迁移到github。其它反编译工具大多基于Apktool二次开发。Apktool代码下载

Introduction to Apktool

点此前往Apktool官网下载、安装说明页(注意: Apktool 2.x必须用Java 1.7,机子上之前装1.8,最好卸载掉再重装1.7)
配好java环境变量、并将“apktool.jar&apktool.bat所在文件夹路径”加到系统环境变量path,cmd下执行apktool 返回说明即安装ok~
apktool安装配置成功

反编译apk

以好搜APK为例分析反编译、修改信息后重新打包的过程。

apktool d <file.apk> -o <dir>

apktool d指令即apktool decode,不指定输出dir,默认反编译后输出的同名文件夹保存在C:\Users\user_name下。
若dir下有文件会报错,需用-f强行清空目标文件夹。

apktool d -f <file.apk> -o <dir>

反编译log信息如下:
反编译过程
其中有个关于.9图的warning,设计人员为了美观一般将.9图四周的黑线去掉了,因此apktool校验是否是.9图时发现异常,可忽略。

观察反编译的文件夹与之前解压缩文件夹对比如下:
反编译前后文件结构对比
可以看出classes.dex和resources.arsc都被反编译了。细节如下图:
反编译前后apk文件详细对比

1) classes.dex二进制代码文件被反编译成了smali文件

apktool d 默认输出的代码文件后缀是.smali,需用-d指令输出java文件,这样便于导入eclipse进行调试修改。

apktool d -d -f <file.apk> -o <dir>

反编译后.java代码并不是真正的java语法代码,而是dex文件反汇编后语法较宽松的smali代码。导入eclipse进行调试,感兴趣者可搜索smali相关介绍。

2) resources.arsc反编译后的values文件放res下
文本字符串、颜色设置以及其它显示相关的xml配置文件都可见了。

3)原有的含工程签名、证书等信息的META-INF文件夹以及原始加密的manifest.xml被copy到original文件夹下

这是因为apktool 2.x反编译后再rebuild出来的是unsigned apk,重新打包时不含META-INF文件夹。(防止apk被恶意篡改,若需更改apk信息再重新打包,就要重新签名)

反编译后重新打包

更改反编译得到的文件后,往往目的是为了重新打包。
apktool重新打包反编译文件夹指令:

apktool b <dir> -o new.apk

build过程如下:
apktool build

由于未签名,新包用adb install 安装失败,提示Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

后续需要重签名工具重新签名。

问题

测试好搜apk,用Apktool 2.0反编译后的manifest.xml丢失大量信息,channel、versionCode和versionName不见了。
因此想利用apktool反编译进行更改渠道号、版本号、包名还是不太靠谱。
Apktool貌似更适用于查看apk信息、代码,但修改后rebuild将面临很多问题。
下篇博客讲解apk的重签名。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:931次
    • 积分:30
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档
    阅读排行