美文网首页工具类
Android 反编译

Android 反编译

作者: Jian_98 | 来源:发表于2019-12-20 14:49 被阅读0次

    Android程序打完包之后是一个apk程序,可以安装到Android手机上。我们反编译其实也就是对这个APK文件进行反编译。Android的反编译主要又分为两个部分,一个是对代码的反编译,一个是对资源的反编译,我们马上来逐个学习一下。

    一、反编译

    本人自己写了一个程序来进行反编译,毕竟反编译别人的程序不是特别好的事情。这里我的代码很简单就是一个按钮点击弹出一个Toast来提示“反编译例子”。

    这是我们的APP例子:Android反编译.apk

    下面让我们用此APP为例来开始学习!

    1、我们需要先准备Android反编译的三个工具

    - apkTool  谷歌提供的 APK 编译工具,可以反编译和回编译。[apkTool下载地址]

    - dex2jar:将 dex 文件转换成 jar 包。 [dex2jar下载地址]

    - jd-gui:用来查看 jar 包里面的代码的一种工具。  [jd-gui下载地址]

    2、对资源进行反编译

    1. 这里我们需要用到apkTool

    2. 接下来的工作就很简单了,我们将Android反编译.apk拷贝到和这两个文件同样的目录当中,然后cmd也进入到这个目录下,并在cmd中执行如下命令:

    apktool d Android反编译.apk

    其中d是decode的意思,表示我们要对Android反编译.apk这个文件进行解码。那除了这个基本用法之外,我们还可以再加上一些附加参数来控制decode的更多行为:

    -f 如果目标文件夹已存在,则强制删除现有文件夹(默认如果目标文件夹已存在,则解码失败)。

    -o 指定解码目标文件夹的名称(默认使用APK文件的名字来命名目标文件夹)。

    -s 不反编译dex文件,也就是说classes.dex文件会被保留(默认会将dex文件解码成smali文件)。

    -r 不反编译资源文件,也就是说resources.arsc文件会被保留(默认会将resources.arsc解码成具体的资源文件)。

    常用用法就这么多了,那么上述命令的执行结果如下图所示(下图为成功案例):

    3、对代码进行反编译

    1. 这里我们用到dex2jar工具

    解压dex2jar压缩包后,如下图

    这里面我们用到的是d2j-dex2jar.bat文件。

    2. 我们先对Android反编译.apk进行更改为Android反编译.zip我们更改apk为zip就行,然后用解压软件打开。解压之后你会发现里面有一个classes.dex文件,如下图所示:

    这个classes.dex文件就是存放所有java代码的地方了,我们将它拷贝到dex2jar解压后的目录下。

    3. 在cmd中也进入到同样的目录,然后执行:( dex2jar   为文件夹名称,一般cmd要到此文件夹下 。  d2j-dex2jar 与classes.dex  为文件夹内部的文件!!!)

    d2j-dex2jar classes.dex

    那么上述命令的执行结果如下图所示(下图为成功案例):

    这样我们的目录下就会多出两个文件

    可以看到,classes-dex2jar.jar这个文件就是我们借助工具之后成功转换出来的jar文件了。但是对于我们而言,jar文件也不是可读的,因此这里还需要再借助一下jd-gui这个工具来将jar文件转换成java代码。

    4. 下面我们就要用到我们的第三个工具了 jd-gui

    直接运行jd-gui.exe打开classes-dex2jar.jar后就可以了。结果如下图所示:

    OK,由此可见,我们的代码反编译工作已经成功了,MainActivity中的代码非常清晰,基本已经做到了90%以上的还原工作。但是如果想要做到100%的代码还原还是非常有难度的,因为像setContentView()方法传入的参数,其实就是一个资源的id值而已,那么这里反编译也就只能将相应的id值进行还原,而无法变成像R.layout.activity_main这样直观的代码展示。

    文章来源:[Android安全攻防战,反编译与混淆技术完全解析(上)]

    相关文章

      网友评论

        本文标题:Android 反编译

        本文链接:https://www.haomeiwen.com/subject/mdiogctx.html