最近学习了解了一下安卓的反编译技术,进行一下学习总结。
一、准备阶段
下载反编译所需软件
- apktool 作用:把apk文件反编译,取出资源
- dex2jar 作用:把存有java内容的dex文件反编译(classes.dex转化成jar文件)
- jd-gui 作用:查看APK中classes.dex转化成出的jar文件,即源码文件
百度网盘:https://pan.baidu.com/s/1T94PX4EBYyuJKOqfNqyc6g 提取码: mquv
二、使用阶段
1. 使用apktool反编译apk得到图片、XML配置、语言资源等文件
在存放下载好的反编译工具所在目录的上方输入cmd可以使cmd直接定位到该文件夹目录下
java -jar apktool_2.4.0.jar d -f jiazirili1.0.0_2265.com.apk -o MMTS
命令格式为
java -jar apktool.jar包的文件名 d -f 要反编译软件包名 -o 要输出的文件夹
(由于我这里软件包和输出文件夹都在该目录下所以没有加全路径)如上图所示没有报错便是运行成功了
成功便可在输出的MMTS文件夹下看到资源内容了
2.使用dex2jar反编译dex文件得到Java源码
以压缩包的的形式打开apk安装包我这里使用的是7z解压软件
找到dex结尾的文件classes.dex,这就是java编译打包后的文件
将获取到的classes.dex放到之前解压出来的反编译工具【dex2jar】文件夹内
通过cd指令将cmd定位到dex2jar
cd 文件夹路径
由于dex2jar的文件夹是我当前的cmd所在文件夹的下,所以没有输绝对路径
cmd进入该文件夹后输入
d2j-dex2jar 你放进去的dex文件名
我这里是
d2j-dex2jar classes.dex
执行完成后就可以在该目录下看到dex文件反编译成功后得到的jar包了
最后打开所下载的jd-gui-windows工具打开反编译得到的jar文件就可以反编译得到java源代码了
如果是未加壳的软件那么到这里就算是反编译完成了,当然里面可能会有许多的文件命名是a,b,c这样的包括许多的变量名也是如此,这是由于使用了代码混淆技术,加大了阅读的难度。
可以在我的截图中看出,我反编译所得到的内容很少,并且可以看到得到的文件包名写着qihoo360(万恶的360),这是因为我反编译的这个软件使用了加壳技术,所以无法直接反编译得到内容。需要先脱壳然后再进行反编译。
参考:https://blog.csdn.net/s13383754499/article/details/78914592
通过模拟器脱壳 : //www.greatytc.com/p/2a5612aa6e02