APK反编译工具的使用

前言

处理反编译,首先先要了解apk文件的结构,然后是编译过程,最后是反编译。
反编译Apk的目的就是Apk拆成我们可以阅读的文件。通过反编译,我们一般想要得到里面的AndroidManifest.xml文件、res文件和java代码。

任务

了解apk文件的结构,怎样编译,最后要会简单的反编译一些Apk.

了解apk文件

首先来简单的说明下Apk文件本质上其实是一个zip包。直接拿解压工具解压就可以看到其中包含了什么。
为了方便看apk的目录,我们引入我们的第一个工具Android Studio,没错就是我们的官方编译工具。

Android Studio 自带的 APK Analyzer 可直接查看APK内的 图片,xml内容,dex结构,文件尺寸等,还可以比较两个apk的差异。
虽然不能导出资源有点可惜,但已经很强大方便了。
用法:将 apk 拖入 AndroidStudio 的窗口就好了。
参考:安卓官方文档

下面是自己拖入的一个APK:

上图很详细的说明了各个文件的作用。

Android 打包流程(编译过程)

在了解了 apk 文件的结构后,我们开始分析 Android 的打包流程。

通常有2种打包方式:

  • Android Studio图形界面 点击run按钮
  • 命令行方式 gradlew assembleDebug, gradlew assembleRelease

方式1使用自动生成的debug keystore签名;方式2如果是Release包使用release keystore签名,如果是Debug包则使用debug keystore签名。

下面展示最基本的打包流程:

上图是Android官方提供的打包简略流程图。清晰地展示了一个Android Project经过编译和打包后生成apk文件,然后再经过签名,就可以安装到设备上。

下面我们分析一下详细流程,最好的还是看图:

我们先分析新版本:
典型 Android 应用模块的构建流程通常依循下列步骤:(下面是官方文档)

  1. 编译器将您的源代码转换成 DEX(Dalvik Executable) 文件(其中包括运行在 Android 设备上的字节码),将所有其他内容转换成已编译资源。

  2. APK 打包器将 DEX 文件和已编译资源合并成单个 APK。不过,必须先签署 APK,才能将应用安装并部署到 Android 设备上。

  3. APK 打包器使用调试或发布密钥库签署您的 APK:

    a. 如果您构建的是调试版本的应用(即专用于测试和分析的应用),打包器会使用调试密钥库签署您的应用。Android Studio 自动使用调试密钥库配置新项目。

    b. 如果您构建的是打算向外发布的发布版本应用,打包器会使用发布密钥库签署您的应用。要创建发布密钥库,请阅读在 Android Studio 中签署您的应用。

  4. 在生成最终 APK 之前,打包器会使用 zipalign 工具对应用进行优化,减少其在设备上运行时的内存占用。

构建流程结束时,您将获得可用来进行部署、测试的调试 APK,或者可用来发布给外部用户的发布 APK。

下面是分块的总结:::

  1. 资源
    Android 打包流程的第一步,是处理资源文件。
    在这个步骤中,起主要作用的是 aapt。
    刚刚提及的 AndroidManifest.xml, res 文件夹,resource.arsc 文件的生成都与其有关,简单来说,aapt 解析项目代码中的 AndroidManifest.xml,收集项目中 res 文件夹的资源文件及 xml 文件,对其做压缩以及编译的处理。在此过程中,分配了资源 id 并生成了 R.java 文件 以及 arsc 文件。
  2. 代码
    上一步得到了 R.java 文件后,将其与项目代码一起编译得到 .class文件,然后打包为 jar 包。这个过程中,还会有混淆代码这一步骤。之后,再通过 dx 工具,将生成的 jar 包与第三方库的 jar 包一起编译为 dex 文件。这个过程中,如果是 5.0 以前的系统且超过了 65535 方法数的限制,需要人为的分 dex,5.0 以后则由 dx 工具包办。
    到这一步,实际上 apk 所需要的主要内容已经大致齐全了。只需要把上面生成的 AndroidManifest.xml,classes.dex,res文件夹,resource.arsc 打包进 apk,并且将项目工程中的 assets 以及 lib 目录一并放入,就有了一个未经签名的 Android 安装包了。
  3. 签名
    接下来还缺简单但是却关键的最后一步,那便是 apk 包的签名,这一步在之前对 META-INF 的介绍中,实际已有提及。只需要按步骤生成 MANIFEST.MF, CERT.RSA,CERT.SF 并放入META-INF 文件夹即可。

在网上找到一个更详细的流程图:链接

APK反编译工具

1.利用ApkTool,获取AndroidManifest和res等资源文件

工具地址: https://ibotpeaches.github.io/Apktool/
进入官网有详细的使用过程:https://ibotpeaches.github.io/Apktool/install/
具体如下图:

我来写一下我自己的详细步骤:
1.在D盘新建一个文件夹命名为apktool,进入此文件夹。
2.新建一个空的apktool.bat文件,点击上图第一步的wrapper script跳转到新的网页,复制网页的所有内容,打开apktool.bat文件,把刚才复制的内容粘贴到里面,保存。
3.点击上图第二步的find newest here下载最新的jar包,下载到本地后改名为apktool.jar,移动到D://ApkTool下面。
4.把要反编译的文件比如no.apk放入到D://ApkTool目录下,打开命令行,切换到D://ApkTool目录下,运行java -jar apktool.jar d no.apk
5.执行完上面的文件就可以得到一个no文件夹。打开文件夹就能看到AndroidManifest和res等资源文件。

以上就是ApkTool的使用,最后的结果如下:

2.dex2jar反编译dex文件,jd-gui 可视化反编译配合使用

2.1 dex2jar反编译dex文件,得到java源代码

dex2jar 可将 .dex 转换成 .jar
参考: https://github.com/pxb1988/dex2jar
下载:https://bitbucket.org/pxb1988/dex2jar/downloads/
详细的使用步骤:
1.下载dex2jar-2.0.zip的压缩包(写这篇文章时名字是dex2jar-2.0),新建文件D://apkdex,然后把dex2jar-2.0.zip放入到apkdex文件中,解压得到dex2jar-2.0文件夹.
2.把要反编译的文件比如no.apk改名为no.zip,把里面的classes.dex取出来复制到dex2jar-2.0文件夹下面。
3.打开命令行,切换到D://apkdex//dex2jar-2.0目录下,运行d2j-dex2jar classes.dex -o classes.jar.在文件夹下面就会形成classes.jar文件。
4.如果有多个.dex文件,就多次执行d2j-dex2jar xxx.dex -o xxx.jar得到相应的文件。

那么得到的jar文件怎样看呢??就需要下面的步骤了。

2.2 jd-gui 可视化反编译查看 .jar 文件

官网:http://jd.benow.ca/
下载:http://jd.benow.ca/#jd-gui-download
具体的使用:
下载完成后直接打开,把生成的classes-dex2jar.jar 文件直接拖到里面就可以观看了.如下图

3.jadx反编译Akp,得到.java源代码

工具地址 :
github: https://github.com/skylot/jadx/releases
sourceforge: http://sourceforge.net/projects/jadx/files/

两个优点:

1.可以直接反编译出.java文件
2.查看源码时直接显示资源名称,而不是像jd-gui里显示的资源ID

安装: 下载完成后进行解压到自己指定的目录。
使用: 进入bin目录下执行jadx-gui.bat,jadx也有GUI,进入后选中然将要反编译的apk即可,运行效果如下。

4.android-classyshark全自动的反编译工具

下载:https://github.com/google/android-classyshark/releases
使用:直接打开,拖拽apk进入就可以。运行效果如下:

上面应该够用的了吧!!
如果有新的编译工具,请在下面留言。。。谢谢。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,277评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,777评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,946评论 0 245
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,271评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,636评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,767评论 1 221
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,989评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,733评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,457评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,674评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,155评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,518评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,160评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,114评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,898评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,822评论 2 280
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,705评论 2 273

推荐阅读更多精彩内容