Android Decompiler / 初探反编译

本文详细介绍了Android应用反编译的相关原理和方法,包括无混淆无加密无加壳时的反编译手段,如Dex2Jar和JD-GUI,以及仅混淆、仅加密和仅加壳情况下的反编译挑战。文中提到了ProGuard混淆保护、加密策略、加壳技术以及自动化反编译脚本的实现,并列举了一系列用于Android逆向工程的工具,如Baksmali、JEB、jadx和JD-GUI等。
摘要由CSDN通过智能技术生成

0x00 TOC

原理

无混淆无加密无加壳

仅混淆

仅加密

仅加壳

自动化实现

一些软件

参考链接

0x01 原理

首先在逆向领域,有一个是需要区别的。就是反汇编和反编译。

反汇编把程序的原始机器码,翻译成较便于阅读理解的汇编代码。比如IDA、OD等。

反编译,通常是将机器码(汇编语言)转换为高级编程语言。

由于Java、.net这样的基于虚拟机技术的语言都是采用了ByteCode的二进制结构,因此很容易将ByteCode转化为“抽象语法树”(简称AST,《编译原理》这门课中的概念),然后采用反编译器就可以将AST转换为代码了。

详细可以参考乌云上的文章反编译系列教程(上)

0x02 无混淆无加密无加壳

一个Android程序,如果没有进行混淆,加密,加壳等行为时,如果进行反编译的话,是可以逆向到Java源码的。

1.Dex2JarJD-GUI(或者Jad)

先通过Dex2Jar软件将classes.dex转换为jar文件,然后再通过Java反编译工具JD-GUI将jar文件转换成JAVA源文件。

总之这是通过dex转jar,然后再转java源代码的思路。其中dex转jar也可以选择一些其他软件,例如谷歌官方的enjarify

下载Dex2Jar和Jd-gui的地址:

Dex2Jar:https://github.com/pxb1988/dex2jar/releases

JD-GUI:http://jd.benow.ca/

使用Dex2Jar和Jd-gui的命令:

dex2jar <file0>
//即
./d2j-dex2jar.sh xxx.apk
java -jar jd-gui-x.y.z.jar
//或者是
java -classpath jd-gui-x.y.z.jar org.jd.gui.App
//也可以直接运行客户端

以下即为反汇编出来的结果。

2.APK改之理、APKDB、Android逆向助手、Android Killer之类软件

实际本质上还是通过Dex2jar或者apktool工具的封装。

还有一个Jadx的软件也比较好用。

3.在线反编译网站

地址:http://www.decompileandroid.com/

地址:http://www.ludaima.cn/android.html

只需要上传需要反编译的apk,稍等片刻,即可下载源码。

4.smali和Baksmali以及Smali Viewer

smali是将smali文件转换成dex。

Baksmali和smali相反,将dex转换成smali。

Quora的一篇问答中,介绍了smali和baksmali的作用。

Smali/Baksmali is an assembler/disassembler for the dex format used by dalvik,
 Android's Java VM implementation. The names "Smali" and "Baksmali" are the
  Icelandic equivalents of "assembler" and "disassembler"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值