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】: