Apktool反编译APK

原创 2015年07月09日 18:03:23

目录

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的重签名。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

通过apktool和逆向助手反编译apk

有时候看到别人的app做的效果不错,想学习学习,但是没有现成的源码,怎么办?这个时候就需要用到反编译。 第一步:下载逆向助手解压包,解压即可。下载地址: 第二步:给逆向助手的每一个目录都配置Path环...

APK的反编译工具,Apktool,Dex2jar,JD-GUI等

工具下载:http://pan.baidu.com/share/link?shareid=2338878455&uk=2147770900 一、用Apktool反编译和编译的方法 评价:它仅将DE...

Apktool|ShakaApktool 简体中文汉化版|APK反编译工具(2月14日更新)

Apktool|ShakaApktool 简体中文汉化版|APK反编译工具 ShakaApktool源码:https://github.com/rover12421/ShakaApktool 作者...

Dex2jar JD-GUI apktool反编译apk文件

http://blog.sina.com.cn/illdvm   1. 下载工具 dex2jar下载地址:http://code.google.com/p/dex2jar/downloads/l...
  • seucbh
  • seucbh
  • 2013年09月23日 07:57
  • 1704

android 7.0 使用apktool反编译apk

工作需要,在android 7.0 上使用apktool反编译一些apk,参考了很多同学的文章,表示感谢,这里总结一下自己的实践操作,分享给大家,主要意图是表明这是一条还能走得通的路(由于androi...

Linux下APK反编译(Apktool dex2jar jd-gui的下载和使用)

一般认为,使用linux系统的都是比较熟悉计算机操作的, 但是也不乏我这样的刚入手Linux的小白.最近转到Linux下开发,好多事情慢慢熟悉起来.给大家说一说Linux系统下的APk反编译. 关于w...
  • Fozei
  • Fozei
  • 2017年03月04日 10:50
  • 1000

Apktool|ShakaApktool 简体中文汉化版|APK反编译工具(12月20日更新)

逆向未来原帖 By越狱 Apktool|ShakaApktool 简体中文汉化版|APK反编译工具 ShakaApktool源码:https://github.com/rover12421/S...

使用apktool反编译apk文件的资源信息

简介 我们做web开发的时候,如果想要模仿某一网站的UI,我们可以通过浏览器自带的工具:查看源代码(html),网页中的图片资源以及样式等信息都可以下载到。然后我们用到自己的项目中去,免去了 一些UI...

android又一个apk反编译利器Apktool

原文地址::http://apps.hi.baidu.com/share/detail/20381960       上周蛋蛋给了我一个神奇的东西Apktool。神在他能把加密的XML...

使用apktool等工具反编译apk包

使用apktool等工具反编译apk包
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Apktool反编译APK
举报原因:
原因补充:

(最多只允许输入30个字)