• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

Android

ZjDroid对象分析及脱壳详细示例

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/Android/2019/1001/667.html

条件条件:
 
1、Root手机一部
 
2、常州平台运营需求通过Xposed installer(http://dl.xposed.info/latest.apk)安置Xposed Framework;
 
一、ZjDroid对象分析
ZjDroid是基于Xposed Framewrok的动静逆向分析模块,逆向分析者可以通过ZjDroid实现以下事情:
 
DEX文件的内存dump
基于Dalvik环节指针的内存BackSmali,有用破解加固运用
敏感API的动静监控
指定内存区域数据dump
获取运用加载DEX信息。
获取指定DEX文件加载类信息。
dump Dalvik java堆信息。
在目标历程动静运转lua剧本。
二、ZjDroid关联号令
1、获取APK目前加载DEX文件信息:
 
adb shell am broadcast -a com.zjdroid.invoke --ei target pid --es cmd '{"action":"dump_dexinfo"}' 
2、获取指定DEX文件包含可加载类名:
 
adb shell am broadcast -a com.zjdroid.invoke --ei target pid --es cmd '{"action":"dump_class","dexpath":"*****"}' 
4、凭据Dalvik关联内存指针动静反编译指定DEX,并以文件形式留存。
 
adb shell am broadcast -a com.zjdroid.invoke --ei target pid --es cmd '{"action":"backsmali","dexpath":"*****"}'
该方法可以脱壳目前大片面盛行的加固防护。(因为手机性能题目,运转较忙)
 
例外环境:
 
因为ApkProtect特定防点窜检验,需求做如下点窜即可解固该护卫:
 
(1)在建筑上建立特定目次(如/data/local)并 chmod 为777
(2)复制zjdroid.apk到该目次,并点窜文件名为zjdroid.jar
(3)点窜/data/data/de.robv.android.xposed.installer/conf/modules.list,模块代码文件点窜为zjdroid.jar,而后重启建筑即可。 
5、Dump指定DEX内存中的数据并留存到文件(数据为odex花样,可在pc上反编译)。
 
adb shell am broadcast -a com.zjdroid.invoke --ei target pid --es cmd '{"action":"dump_dexfile","dexpath":"*****"}' 
6、Dump指定内存空间区域数据到文件
 
adb shell am broadcast -a com.zjdroid.invoke --ei target pid --es cmd '{"action":"dump_mem","start":1234567,"length":123}' 
7、Dump Dalvik堆栈信息到文件,文件可以通过java heap分析对象分析处分。
 
adb shell am broadcast -a com.zjdroid.invoke --ei target pid --es cmd '{"action":"dump_heap"}' 
8、运转时动静挪用Lua剧本
 
该功效可以通过Lua剧本动静挪用java代码。
 
常州微信公众平台应用场景:
 
a.可以动静挪用解密函数,实现解密。
 
b.可以动静触发特定逻辑。
 
adb shell am broadcast -a com.zjdroid.invoke --ei target pid --es cmd '{"action":"invoke","filepath":"****"}' 
luajava关联应用方法:http://www.keplerproject.org/luajava/ 
 
9、敏感API挪用监控
 
 
 
三、关联号令执行后果查看
1、号令执行后果:
 
adb shell logcat -s zjdroid-shell-{package name} 
2、敏感API挪用监控输出后果:
 
adb shell logcat -s zjdroid-apimonitor-{package name}
四、ZjDroid的安置
 
1.开始需求安置xposed框架,运转后选定“框架”==》“安置/更新”操纵。
 
 
 
2.安置模板(ZjDroid.apk)
 
安置ZjDroid.apk后,点击xposed的模块选项,勾上ZjDroid选项,而后重启体系激活软件。
 
 
 
五、脱壳案例演示
以“捕鱼达人3(1.01版)”为例来演示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指令),留存,署名从新安置,这下可以平常运转了。
 
 
 

上篇:上一篇:Android 一套完备的 Socket 办理计划
下篇:下一篇:android 8种对话框(Dialog)应用方式汇总