美文网首页
反编译笔记

反编译笔记

作者: 桃先森_ | 来源:发表于2021-07-13 15:34 被阅读0次

    原文作者:CrazyCodeBoy
    原文链接:https://www.jianshu.com/p/48a0f9e6e51a
    为了方便,自己搬过来了

    什么是APK?

    APK的全程是Android application package,是Android的应用程序包,平时我们安装Android应用的时候需要将APK文件下载到本地然后安装,Android系统会将其识别为Android应用包。另外,需要指出的是APK 其实是一个基于 ZIP 文件格式的文件,所以支持你用解压软件将其解压,当你将APK文件解压之后你会看到如下文件:

    image
    • .dex代码文件:它是classes文件通过DEX编译后的文件格式,用于在Dalvik虚拟机上运行的主要代码部分;
    • resources 资源文件:以resources以及res目录为代表的Android程序中所需要的一些资源,如图片资源,颜色资源,字符串,布局等;
    • assets文件:assets目录下存放的是原生资源文件,比如在里面存放字体,铃声等;
    • manifest清单文件:以AndroidManifest.xml为代表的Android清单文件,清单文件向 Android 系统提供应用的必要信息,系统必须具有这些信息方可运行应用的任何代码。

    了解过,APK的之后,接下来就给大家介绍反编译一个APK所需要那些工具:

    反编译一个APK需要那些工具?

    无论是在Windows平台还是在Mac平台,反编译APK都离不了ApkTool、dex2jar、JD-GUI 这三种工具,那么这三种工具都是做什么用的呢?

    • ApkTool:是一款应用在Apk上的逆向工程的工具,它有编译、反编译、签名等功能,在这篇文章中会讲解如何利用ApkTool查看apk的xml文件、AndroidManifest.xml和图片等。
    • dex2jar:顾名思义,这款工具的作用主要是将dex文件转换成jar文件,转换成jar后我们才好借助JD-GUI来查看反编译dex后的代码;
    • JD-GUI:一款Java反编译器GUI,通过它我们能查看到反编译后的dex的代码,通常需要配合dex2jar使用;

    准备工作(安装ApkTool、dex2jar、JD-GUI的具体流程)

    介绍过ApkTool、dex2jar、JD-GUI 的作用后,接下来我们做一些反编译前的准备工作,首先呢我们需要安装ApkTool。

    ApkTool

    下载ApkTool

    大家可以从https://ibotpeaches.github.io/Apktool/install/上下载ApkTool,也可以下载我为大家准备好的ApkTool、dex2jar、JD-GUI

    安装ApkTool

    1. 将下载好的apktool文件与apktool_2.3.1.jar文件准备好,并将apktool_2.3.1.jar更名为apktool.jar

    2. apktool.jarapktool移动到/usr/local/bin目录下(可以通过在终端中输出命令open /usr/local/bin来打开这个目录);

    3. 为上述两个文件增加可执行权限,即在终端中输入并执行:

      chmod +x apktool.jar
      chmod +x apktool
      
      
    4. 在终端输入apktool看是否可以运行,如果不可以需要在系统偏好设置中打开安全与隐私中点击仍要运行apktool.jar;

    至此ApkTool的安装便完成了,在终端运行apktool命令会看到如下输出:

    image

    dex2jar

    下载dex2jar

    大家可以从https://sourceforge.net/projects/dex2jar/files/上下载dex2jar,也可以下载我为大家准备好的ApkTool、dex2jar、JD-GUI
    下载后直接解压即可。

    JD-GUI

    下载JD-GUI

    大家可以从http://jd.benow.ca/上下载JD-GUI,也可以下载我为大家准备好的ApkTool、dex2jar、JD-GUI

    使用ApkTool反编译APK得到xml文件、AndroidManifest.xml和图片

    cd /你存放apk的目录或在下面命令中使用xxx.apk文件的绝对路径
    apktool d xxx.apk //该命令执行后会在同级目录下生成一个与你编译的apk同名的目录
    
    

    通过上述命令就可以反编译apk了。

    image

    然后在反编译后生成的目录中你会看到相关的资源文件:

    image

    由于APkTool只能将资源文件提取处理,对于.dex类型的文件是无法查看的,这里就需要用到dex2jar了。

    dex2jar将dex反编译成jar

    第一步,解压apk获得dex文件

    使用解压软件将apk进行解压:

    image

    也可将apk文件的后缀改为.rar然后双击进行快速解压。

    使用解压软件打开apk 和使用apktool反编译出的apk不同

    • 直接解压apk和使用apktool反编译apk都能获得AndroidManifest.xml,但直接解压获得的AndroidManifest.xml是乱码的,无法直接查看;
    • 直接解压apk获得res资源文件是不包含resources.arsc部分的,而使用apktool反编译出来的res是包含的;
    image

    从上图中可以看到有2个classes.dex文件(这是因为应用了MultiDex所致)这就是项目的源码 将这个两个文件拷贝到下载解压的dex2jar目录下:

    image

    然后执行如下代码进行反编译:

    cd /你的dex2jar解压目录 也就是上面图中存放class.dex文件的目录
    sh d2j-dex2jar.sh classes.dex
    sh d2j-dex2jar.sh classes2.dex
    
    

    通过上述命令会得到两个.jar文件:

    image

    使用JD-GUI查看反编译后的程序源码

    将dex转换成jar之后接下来我们就可以使用JD-GUI来查看反编译后的程序源码了:

    操作步骤很简单,只需双击运行jd-gui-1.4.0.jar,然后将classes-dex2jar.jar拖拽到JD-GUI界面上即可:

    image

    FAQ

    Permission denied d2j_invoke.sh

    为d2j_invoke.sh增加权限:

    sudo chmod +x d2j_invoke.sh //sudo chmod +取消权限
    
    

    Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file

    Apktool的bug使用其他版本的Apktool,我在使用apktool_2.3.3.jar中遇到了这个问题,使用如apktool_2.3.1.jar是好的,如果你也遇到了这个问题不妨换个Apktool版本试一下。

    Exception in thread "main"

    相关文章

      网友评论

          本文标题:反编译笔记

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