【小工具】反编译指南

2022-08-13 16:01:19 浏览数 (1)

‍‍1 什么是编译和反编译

相信在大学学习过编译原理这门课程的小伙伴都看过这段话,“编译的主要的目的是将便于人编写、阅读、维护的高级语言所写作的源代码程序,翻译为计算机能解读、运行的低级语言的程序,也就是可执行文件。那么反之,我们亦可以通过低级语言进行反向工程,获取其源代码。这个过程,就叫做反编译。”

简单来说,

编译:人读的 > 机器读的;

反编译:机器读的 > 人读的。

我们说Java编译,一般是将java文件转换成class文件。那么反编译就是值将class文件转换成java文件。

java中的编译器:javac是jdk中的JAVA语言编译器,使用javac命令可以将以.java结尾的源文件编译成以.class结尾的能够由jvm识别的字节码。

那么如何进行反编译呢?这就需要借助工具了,接下来我们就来讲讲几种常用的反编译工具。

2 常用的反编译工具

jd-gui:将打成jar包的class文件转化成的java文件,即源码文件。

dex2jar:将dex文件转换为class文件,然后class文件打成jar包。

apktool:编译或者反编译apk文件。

AXMLPrinter2:反编译apk的xxx.xml文件。

在线反编译工具:decompiler,大一统,支持多种文件反编译。

注:dex文件是Android系统的可执行文件,包含应用程序的全部操作指令以及运行时数据。当java程序编译成class后,还需要使用dex工具将所有的class文件整合到一个dex文件。

1、jd-gui

jd-gui下载:https://github.com/java-decompiler/jd-gui/releases/download/v1.6.6/jd-gui-windows-1.6.6.zip

将zip包解压后双击jd-gui.exe即可打开jd-gui。

可直接将jar包直接拖拽到jd-gui页面,即可查看反编译后的源代码。

2、dex2jar

dex2jar下载:

https://sourceforge.net/projects/dex2jar/

dex2jar使用:

cmd下进入到d2j-dex2jar.bat目录,

执行:d2j-dex2jar.bat classes.dex,

(将apk后缀名改为zip或者rar再解压即可查看classes.dex)

得到classes-dex2jar.jar

强制覆盖:d2j-dex2jar.bat ../classes.dex --force。

将classes-dex2jar.jar拖拽到jd-gui即可查看源码。

3、apktool

apltool.jar下载:https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.6.0.jar,

将jar包重命名为apktool.jar。

apltool.bat下载:https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/apktool.bat ,

将脚本另存为apktool.bat,和apktool.jar放同一个文件夹下。

apktool是否安装成功:

apktool --version。

apktool的使用:

cmd下进入到apktool目录,

反编译:apktool d xxx.apk;

编译打包apk:apktool b xxx。

设置编译后的文件输出到固定文件夹:

apktool d xxx.apk -o (destination)。

覆盖原文件:apktool d -f xxx.apk。

如果报错非法Dex,比如有些apk的assets目录下有加密后的Dex文件,添加–only-main-classes参数即可:

apktool d -f xxx.apk -only-main-classes。

用apktool反编译apk之后的目录:

4、AXMLPrinter2

下载静态分析工具之-AXMLPrinter2.jar,进入cmd(AXMLPrinter2.jar所在路径),

AXMLPrinter2的使用:

cmd下进入到AXMLPrinter2.jar目录,

1、执行:java -jar AXMLPrinter2.jar AndroidManifest.xml>AndroidManifest.txt

(注:可将需要解析的xml放到和jar同级目录下)

2、执行:java -jar AXMLPrinter2.jar AndroidManifest.xml

(直接在控制台查看AndroidManifest.xml文件内容)

源AndroidManifest.xml内容

(将apk后缀名改为zip或者rar再解压即可查看AndroidManifest.xml)。

反编译AndroidManifest.xml文件后AndroidManifest.xml内容

5、在线反编译工具

https://www.decompiler.com/

直接将文件上传上去,即可查看反编译后的代码,非常方便。

3 总结

为什么需要反编译呢?假设被人给我们提供一个jar包或者apk包,我们可以通过反编译查看其源代码来分析代码或者定位问题。

感兴趣的小伙伴可以跟着教程实际操作一波,也许哪天就用到了呢,多去了解些基础知识准没错。

0 人点赞