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

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

apk的反编译,第一次使用apktool,整理一下整个流程

网上查了好多帖子,好像目前反编译apk工具使用最广泛的就是apktool,这里先说一下整个流程用到的工具有: 1.apktool,下载后拿到apktool.bat和apktool.jar,然后把这两个...
  • u013133126
  • u013133126
  • 2016年10月24日 11:27
  • 5057

用apktool批量反编译apk文件

写在前面的话 这个是一个十分简单的脚本,非常简单。为什么要写,因为我是来骗分数的。 应用场景 主机上有一堆APK文件,是按照类别分好的,现在用apktool 反编译它们,然后在按照类别和apk的名...
  • Grace_0642
  • Grace_0642
  • 2015年01月01日 20:39
  • 2691

Android 如何对apk文件进行反编译以及重新打包签名

最近在看视频的时候看到有关apk文件如何反编译的,顿时提起了自己的兴趣,记得在刚刚学习Android的时候就对这份面有兴趣,只是当时自己的技术…咳…现在自己…咳咳..咳…注:以下的前提是Java相关环...
  • w18756901575
  • w18756901575
  • 2016年05月10日 16:00
  • 6461

APK文件使用ApkTool解包反编译和重新打包及签名

原文:APK文件使用ApkTool解包反编译和重新打包及签名 地址:http://429006.com/article/technology/3420.htm 1. 准备工作: 配置JAVA环境,...
  • zhanghuan1713
  • zhanghuan1713
  • 2015年03月10日 16:49
  • 1578

apktool反编译apk,提取资源文件

APKTool是GOOGLE提供的APK编译工具,需要JAVA运行环境,推荐使用JDK1.6或者JDK1.7 下载工具:http://code.google.com/p/android-a...
  • luopeiyuan1990
  • luopeiyuan1990
  • 2016年04月12日 17:09
  • 1806

安卓逆向学习笔记(2)- 利用apktool反编译apk并进行二次打包

这篇文章将介绍一个apk反编译工具apktool。我们可以用apktool反编译apk,并且可以对反编译得到的文件重新打包生成新的apk。 本文使用的apktool版本为v2.0.0RC3,待反编译...
  • pengyan0812
  • pengyan0812
  • 2015年02月28日 12:23
  • 5429

使用apktool反编译apk获取资源文件

介绍: apktool的主要作用是资源文件获取,可以提取出图片文件和布局文件进行使用查看 使用: 1. 下载新版apktool 这里是传送门 2. 解压得到3个文件:aapt.exe,apkt...
  • ygd1994
  • ygd1994
  • 2016年07月02日 01:03
  • 4688

Android APK反编译 apktool使用教程

前言: 最近我在使用Android Studio混淆打包release版本,打包是否成功?自然想到了反编译。然后百度“apk反编译”,出来最多的是apktool反编译。百度也真是越来越水了,反正百度出...
  • ysc123shift
  • ysc123shift
  • 2016年10月31日 19:36
  • 22690

修改apk必读-反编译后的文件夹详解

反编译apk得到的几个文件和文件夹 1。 assets 文件夹 此文件夹可以存放资源文件。至于是神马资源文件,怎么读取,这些我们就不用深究了,因为不常改。 2。 res 文件夹 主要用来存放资...
  • bbzz100
  • bbzz100
  • 2016年06月02日 17:12
  • 3533

使用apktool反编译apk的XML文件

打开解压的res\layout目录,有很多xml文件,如果你想看下作者是如何设计界面的,你会很失望,因为你看到的是一大堆乱码!这个时候我们需要用到的是apktool。     具体操作方法:将下...
  • buptdavid
  • buptdavid
  • 2014年11月19日 13:13
  • 13314
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Apktool反编译APK
举报原因:
原因补充:

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