Osheep

时光不回头,当下最重要。

Android apk反编译成java源码实战操作全指南

写在前面

本文参照教程:
Android APK反编译就这么简单 详解(附图)]
如何在大量jar包中搜索特定字符
主要记录apk反编译成java源码过程及遇到的问题
工具包百度网盘下载地址在后面
本教程截止2017.09.08亲测可跑通

环境说明

  • win7
  • java jdk1.8.0
  • apktool2.2.2 反编译工具 用于资源文件的获取,可以提取出图片文件和布局文件进行查看
  • dex2jar-0.0.9.15 将apk反编译成java源码(classes.dex转化成jar文件)
  • jad 1.4 反编译成java源码
  • FileLocatorPro_x64 快速搜索工具

反编译步骤

  • 反编译得到程序的源代码、图片、XML配置、语言资源等文件
    • 使用apktool2.2.2 反编译得到资源文件的获取
  • 反编译得到Java源代码
    • 将apk解压得到classes_dex文件
    • 使用dex2jar-0.0.9.15操作 classes_dex 生成.jar文件
    • 将jar文件解压得到.class文件
    • 使用jad工具将.class文件转换为.java文件
    • 使用搜索工具全局搜索正则匹配关键字

apktool2.2.2 反编译得到源代码、图片、XML配置等文件

解压从网上下载的apktool2.2.2工具 ,将下载的apk放入同一文件夹下。

《Android apk反编译成java源码实战操作全指南》

在当前文件夹下调用cmd,执行命令

//apktool d -f [apk名字] -o  [输出文件夹名字]
apktool d -f xiaominew.apk -o  xiaominew

则在当前文件夹中就会生成xiaominew文件夹,里面是反编译出来的一些文件。我这边主要是要编译到java源码,然后从源码中查找一些东西,所以我主要采用的是下面的方法。

apk反编译成java源码

解压缩apk

网上说对于下载下来的xx.apk需要先把其后缀名改成.zip。然后对其解压缩,我是直接将xx.apk解压缩了。解压缩后的文件结构如下(以小米手机浏览器的apk为例):

《Android apk反编译成java源码实战操作全指南》

解压缩生成classes.dex

生成.jar文件

在上一步骤中我们解压缩可以拿到classes.dex文件,此时我们去dex2jar-0.0.9.15的文件夹下,调用命令行cmd,执行命令如下(路径请更改):

dex2jar.bat  E:\1\tool\apktool2.2.2\xiaominew\classes.dex   

此时再xiaominew的文件夹下生成了clasess_dex2jar.jar 文件

《Android apk反编译成java源码实战操作全指南》

生成clasess_dex2jar.jar

解压缩.jar文件

将上一步骤生成的.jar文件右键解压缩生成对应文件夹。该文件夹中即为对应的.class文件

《Android apk反编译成java源码实战操作全指南》

生成.jar文件夹
《Android apk反编译成java源码实战操作全指南》

.clsss文件

使用jad工具生成.java文件

从网上下载jad工具jad download,解压后会有jad.exe;

《Android apk反编译成java源码实战操作全指南》

5.png

这个jad.exe要使其全局生效,需要配环境变量,我这边是直接将其放到了jdk的bin文件夹下,因为该文件夹已被配置到了环境变量中,将jad.exe放入后即可全局使用。同样我们进入刚才的classes_dex2jar的文件夹里,调用当前命令行cmd,执行命令完成后,在classes_dex2jar的文件夹里会有新生成的文件夹

//jad -o -r -s java -d [生成文件名] [class路径]
jad -o -r -s java -d src ./**/*.class

为了方便区本我执行的命令是jad -o -r -s java -d newnewnewcomes ./**/*.class(新新新新来的)
从图中我们可以看出在classes_dex2jar的文件夹中生成了newnewnewcomes,进入newnewnewcomes里面的文件变成了.java形式,至此,反编译为java源码完毕。

《Android apk反编译成java源码实战操作全指南》

生成了新新新新新来的
《Android apk反编译成java源码实战操作全指南》

新新新来的里面和外边的是一样的
《Android apk反编译成java源码实战操作全指南》

但是新新新来的里面已经是java文件啦

搜索字符串

我这边反编译成java源码主要是为了去里面查找某些字符串,所以这就需要一个可以快速查找大量文件的工具,在windows平台使用了Filelocator简直好用到哭,该工具可以快速查找,支持字符串查找,正则匹配等多种方式。通过输入文件名称,匹配文本,查找位置,点击右边的开始即可快速查找。

《Android apk反编译成java源码实战操作全指南》

工具下载

整理了本文中所用的工具,上传到了百度网盘上,apk反编译工具集合下载密码:9fn8。压缩包中文件内容如图所示:

《Android apk反编译成java源码实战操作全指南》

sdfsdfaaasdfsadfsdafas.png

问题说明

  1. Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file
    需要升级APK2,0.0以上版本

    《Android apk反编译成java源码实战操作全指南》

  1. Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file
    apk 2.2.2命令结构更改了,下图的输入方式是错误的

    《Android apk反编译成java源码实战操作全指南》

    错误的输入方式

    正确的输入方式:
    apktool d -f xiaomi.apk -o foldername

    《Android apk反编译成java源码实战操作全指南》

    正确的输入方式
点赞