精彩文章免费看

Android逆向(反编译一个APK)

一、反编译未加固的apk

1、反编译用到的工具

apktool :资源文件获取,可以提取出图片文件和布局文件进行使用查看
dex2jar :将apk反编译成java源码(classes.dex转化成jar文件)
jd-gui :查看APK中classes.dex转化成出的jar文件,即源码文件

2、使用apktool反编译资源文件和Manifest文件

为了方便操作,首先将下载好的3个工具统一放到1个文件夹中

运行apktool对apk进行反编译
使用如下命令将Demo.apk反编译到【Demo】文件夹下:

java -jar apktool_2.4.0.jar d -f Demo.apk -o Demo

打开Demo文件,就可以看到反编译后生成的文件

image.png

至此,一个没有加壳的apk已经被反编译完成了,但是实际工作中,上线的apk包大多数都会进行加固,有些应用市场甚至后要求加固,例如360,应用宝等,下面会介绍一中常见的脱壳技术

加固后的apk在通过以上的反编译流程后,无法得到正常的java源码,如下图

从上图可以看出,经过加固后的apk,通过常规方法反编译无法获取到源码。

1、脱壳用到的工具

FDex2 :通过Hook ClassLoader的loadClass方法,反射调用getDex方法取得Dex(com.android.dex.Dex类对象),再将里面的dex写出
VirtualXposed:无需root手机即可使用的xp框架

Step1、将 【VirtualXposed】、【FDex2】和需要脱壳的apk都安装到手机上
Step2、启动【VirtualXposed】,并在【VirtualXposed】中安装【FDex2】: