|
|
本帖最后由 Mtawei 于 2026-8-7 10:03 编辑
参考:
BlackDex —— 虚拟化脱壳思路
Shizuku —— 无 root 权限方案
frida-dexdump —— 内存 dex 扫描
DEX 格式规范:AOSP dalvik/docs/dex-format.html
安装 Shizuku 管理器(v13.5+)
打开手机 开发者选项 → 无线调试,开启后用 Shizuku 的"配对"流程完成授权
(Android 11+ 无需电脑;或通过 adb 执行 adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh)
确认 Shizuku 显示"运行中"
安装并打开脱壳程序
点击 申请授权(Shizuku 会弹出授权确认)
点击 解锁非 SDK 接口(放开 hidden API,脱壳前置)
进入 已安装应用 → 选择目标 → 确认脱壳(可选"深度模式")
等待进度完成(数秒 ~ 数十秒,深度模式更久)
进入 脱壳结果 → 选择 dex → 导出(通过系统文件选择器保存)
依赖私有目录解密的壳:部分壳把加密 dex 放在 /data/data/<pkg>/ 下,shell
uid 无权限读取,解密可能失败。此场景无 root 无解(root 模式下 Shizuku 可弥补)。
反虚拟化/反调试检测:检测到异常运行环境(uid 非自身、无系统进程特征等)而
拒绝解密的壳,本项目不处理对抗(与 BlackDex 声明一致)。
深度模式不包含主动调用解密、指令回填,仅提高扫描密度与等待时长。
为什么需要"触发"
加固壳的 dex 是加密的。真实 dex 只有在壳的 Application 被实例化并执行
attachBaseContext 时才会被解密并加载进内存(InMemoryDexClassLoader 或解密后 mmap)。
因此脱壳的关键两步:
触发:让壳的完整解密流程跑起来
捕获:在 dex 存在于内存期间把它原样转储
Shizuku UserService 由 Shizuku 以 shell 权限(uid 2000)通过 app_process 启动,
运行在我们 APK 自己的 :unpack 进程中。引擎与 UI 天然隔离:UI 崩溃不影响脱壳。
无 root 也能脱壳的秘密:不跨进程操作目标(那需要 ptrace,被 SELinux/Yama 双重
禁止),而是把目标应用加载进自己的进程,模拟其启动流程触发解密,再扫自己
进程的内存。与 BlackDex 的虚拟化思路同源,但实现更轻量、零第三方依赖。
Android 16 适配:不做 inline hook(避免 libart 符号/偏移在 Android 16 的
ART 内部变更与 16KB 页对齐下失效),纯内存扫描天然跨版本。
目前此版本还在测试阶段……… |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|