什么是反编译?如何防止反编译?

本文主要介绍什么是反编译、常用的反编译工具以及如何防止反编译等内容。

1.什么是反编译?

编译是指将某种编程语言写成的源代码转换成另一种编程语言;反编译是指是将已编译好的程式还原到未编译的状态,也就是找出程序的源代码。不法分子通过对APP反编译,可以推测出APP的算法、原理、结构、逻辑、敏感数据等核心要素,进而达到破解、篡改、广告植入、二次打包、仿冒/钓鱼应用等目的。


2.常用的APK反编译工具:

baksmali/smali: baksmali 能将二进制 dex 文件转化为 smali 文本文件用于分析,smali 则能将 smali 文件重新编译为 dex 文件;

Apktool : 整合了 baksmali/smali 用于处理 dex 文件, 另外实现了 res 资源文件(比如layout / strings等)的反编译;

AxmlPrinter : 用于将二进制形式的 AndroidManifest.xml 转换为文本形式的 AndroidManifest.xml;

dex2jar: 能将 dex 转化为 jar 文件;

jd-gui: 能将 jar 文件反编译为 java 源代码;

Ida Pro: 主要用于反编译 Apk 中的 So 文件,也支持将 dex 文件反编译为类似smali 语法的文本形式指令。

从以上反编译工具可以看出,反编译工具主要分三种功能:

反编译资源,如 AndroidManifest.xml、layout.xml;

反编译 Dex 文件,或者进一步将 Dex 文件转换为 Java 代码;

反编译 So 文件。

3.如何防止反编译

通过对移动应用进行全面加固保护,可以全面提升APP安全等级,有效防止应用被逆向分析、反编译、二次打包等,点击免费试用Android应用加固服务


关于如何有效防止反编译,可以通过以下文章详细了解:

如何系统有效地提升Android代码的安全性?

如何防止Unity手游代码被反编译?

如何进行SO加固?