Skip to content
/ ZjDroid Public

📲 A modified version of Zjdroid, which allows dump dex on the ART virtual machine

License

Notifications You must be signed in to change notification settings

imlk0/ZjDroid

Repository files navigation

ZjDroid

release

凑齐了ZjDroid的源码,并在原版的基础上进行了一些改进。

有什么不同?

  1. 通过源码可以编译出多个平台的so文件,使得在Android x86虚拟机上脱壳成为可能。
  2. 修改源码,解决了原来的版本拖出来之后拿到的是壳子的问题(原版原理上其实是没有问题的,就是一个小细节没有处理好)。
    详细原因请看我的文章:
    https://blog.csdn.net/u010746456/article/details/80150250
  3. 增加dexinfo时显示mCookie
  4. dump时使用mCookie作为参数。(dumpdex文件等操作都以mCookie这串数字作为唯一标识)
  5. 增加了对art虚拟机上dump dexfile的支持

局限(TODO)

  • 只能在dalvik虚拟机上使用(Android4.4及以下)
  • [非常有用的功能] 监控应用敏感行为模块 不支持高AndroidSDK版本的API,需要修复(简单但是繁琐)
    相关类所在项目文件夹:
    https://github.com/KB5201314/ZjDroid/tree/master/app/src/main/java/com/android/reverse/apimonitor
  • 动态反编译指定DEX模块 由于使用的库版本过旧,不支持ART虚拟机,需要换用新版库,但是大部分接口已改,需要时间去学习新版库的使用
  • [非常有用的功能] 增加反Xposed检测
  • [非常有用的功能] 增加反模拟器检测
  • [调试方便] 增加查找指定类所在的dex文件
  • 支持hook多ClassLoader
  • 动态hook

用法

除了将索引dex文件的方式改为用mCookie,在用法上基本和原版无差别

1.获取APK当前加载DEX文件信息:

adb shell am broadcast -a com.zjdroid.invoke --ei target <target-pid> --es cmd '{"action":"dump_dexinfo"}'
结果示例:
06-30 21:22:59.211 20298 23084 E zjdroid-shell-com.browser2345: filepath:/data/app/com.browser2345-1/base.apk dexElementToString:dex file "/data/app/com.browser2345-1/base.apk" mCookie:3013523232
分3个部分:filepath 文件路径
          dexElementToString 文件路径及相关信息(描述这是个dex文件还是zip文件)
          mCookie 关键参数,后面用到

2.获取指定mCookie对应的DEX文件包含的可加载类名:

adb shell am broadcast -a com.zjdroid.invoke --ei target <target-pid> --es cmd '{"action":"dump_class","mCookie":"*****"}'

3.根据Dalvik相关内存指针动态反编译指定DEX,并以文件形式保存。

adb shell am broadcast -a com.zjdroid.invoke --ei target <target-pid> --es cmd '{"action":"backsmali","mCookie":"*****"}'

4.Dump指定DEX内存中的数据并保存到文件(数据为odex格式,可在pc上反编译)。

adb shell am broadcast -a com.zjdroid.invoke --ei target <target-pid> --es cmd '{"action":"dump_dexfile","mCookie":"*****"}'

5.Dump指定内存空间区域数据到文件。

adb shell am broadcast -a com.zjdroid.invoke --ei target <target-pid> --es cmd '{"action":"dump_mem","start":1234567,"length":123}'

6.Dump Dalvik堆栈信息到文件,文件可以通过java heap分析工具分析处理。

adb shell am broadcast -a com.zjdroid.invoke --ei target <target-pid> --es cmd '{"action":"dump_heap"}'

7.运行时动态调用Lua脚本 该功能可以通过Lua脚本动态调用java代码。 使用场景: 可以动态调用解密函数,完成解密。 可以动态触发特定逻辑。 luajava相关使用方法: http://www.keplerproject.org/luajava/

adb shell am broadcast -a com.zjdroid.invoke --ei target <target-pid> --es cmd '{"action":"invoke","filepath":"****"}'

8.敏感API调用自动监控

执行结果查看:

1.命令执行结果:

adb shell logcat -s zjdroid-shell-{package name}

2.敏感API调用监控输出结果:

adb shell logcat -s zjdroid-apimonitor-{package name}

相关开源项目

halfkiss/ZjDroid:
https://github.com/halfkiss/ZjDroid
mikusjelly/HeyGirl:
https://github.com/mikusjelly/HeyGirl
mkottman/AndroLua:
https://github.com/mkottman/AndroLua

LICENSE

Apache License, Version 2.0

About

📲 A modified version of Zjdroid, which allows dump dex on the ART virtual machine

Resources

License

Stars

Watchers

Forks

Packages

No packages published