ZjDroid工具介绍及脱壳详细示例 - AndroSec
四、ZjDroid的安装
1.首先需要安装xposed框架,运行后选择“框架”==》“安装/更新”操作。
2.安装模板(ZjDroid.apk)
安装ZjDroid.apk后,点击xposed的模块选项,勾上ZjDroid选项,然后重启系统激活软件。
五、脱壳案例演示
以“捕鱼达人3”为例来演示ZjDroid的脱壳过程,“捕鱼达人3”通过加的是“某加密”的壳,这个壳的关键词是chaosvmp。在手机上安装好程序并运行,然后依据以下步骤进行脱壳: 1、打开命令行输入以下命令查看logcat:
adb logcat -s zjdroid-shell-org.cocos2d.fishingjoy3
如下图所示:
记下hook的pid=14630
2、另外开启一个命令窗口,通过adb shell向手机发送执行命令获取APK当前加载的DEX文件的信息,命令如下:
am broadcast -a com.zjdroid.invoke --ei target 14630 --es cmd '{action:dump_dexinfo}'
这时候第一个打开的命令窗口就会出现以下信息:
从图中可以看到3个filepath信息,到底应该dump哪个呢?我们一般首先选择.apk后缀的,如果dump出现错误,可以再试试包含classes.jar的路径(梆梆加固的要选择classes.jar的路径)。现在开始执行dump dex的命令:
am broadcast -a com.zjdroid.invoke --ei target 14630 --es cmd '{action:backsmali, " dexpath " : " /data/app/org.cocos2d.fishingjoy3-1.apk " }'
正常情况下,如果dump完毕,则会提示“ build the dexfile ok ”,dump出来的dex文件保存在 /data/data/ 应用包名 /files 目录下,文件名为dexfile.dex。我们将该文件重命名为classes.dex替换掉原包中的同名文件,再重新签名安装运行就可以了。下图所示为对陌陌5.0版本成功dump的结果。
但是在本例中,等待一段时间后,并没有出现跟上面类似的提示,并且程序停止不再运行,如下图所示。
查看 /data/data/ org.cocos2d.fishingjoy3/files 目录下的dexfile.dex文件,内容为空,说明dump时建立dex文件不成功。不过不要紧,还有一个smali文件夹,里面包含了执行backsmali命令后得到的全部smali文件。
注意:如果执行backsmali命令的时候提示“ the cmd is invalid ”,则可能是以下几个原因:
(1)命令输入不对。仔细检查一下命令是否输入正确,包括引号的输入。
(2)没有获取root权限。已经root的手机su一下即可。
3、修复错误 用apktool把原apk反编译,将smali文件夹里面的文件用dump出来的文件替换,然后重编译,出现如下错误信息:
根据错误提示,找到对应文件的1767和3963行的代码
将这几行代码注释掉,并以同样方法处理掉接下来的错误,就可以顺利进行重打包了。将重打包后的文件签名并安装运行,闪退。后来在AndroidManifest.xml文件中发现android:name没有修改,于是把该属性删除,重打包安装还是闪退,这到底是肿么了?
通过LogCat查看log信息,发现问题在这里:
用IDA打开各个so文件,按下shift+F12快捷键,搜索“fuck exit1!”,在libfishingjoy3.so中找到了该字符串,查看其调用情况,如图所示:
在002020B8处存在唯一调用:
用010Editor打开该so,CTRL+G跳转到002020B8处,修改16进制数据为 00 00 A0 E1 (NOP指令),保存,签名重新安装,这下可以正常运行了。

浙公网安备 33010602011771号