version: "1.0.0" name: android-deobfuscation description: 识别并分析 Android 应用的名称/字符串混淆、动态 DEX 加固、native OLLVM 控制流和虚拟化保护,按证据进行局部恢复及等价性验证。
Android 去混淆与加固分析
先分类,后选择处理方式
| 观察到的现象 | 待验证解释 | 起点 | |
|---|
| 类名短但方法体完整 | 名称混淆 | 根据调用者/资源逐步重命名 | |
| 字符串运行时出现 | 字符串或常量解密 | 定位解密边界并关联调用位置 | |
| APK 只有 stub,运行时才有业务类 | 动态加载或 DEX 壳 | Application、ClassLoader、加载时机 | |
| native 有状态变量和集中分发块 | 控制流平坦化 | 分发器、状态赋值和真实基本块 | |
| 自定义指令流、handler 和虚拟寄存器 | VM 保护 | VM 状态和 opcode 语义 | |
库名或厂商特征只是线索;JADX 失败也可能是字节码结构或工具限制。检查 smali、其他反编译结果和运行行为再定性。
DEX 加载与恢复
在用户提供的测试环境中记录类出现的时间、所属 loader、DEX 来源与业务触发条件。文件加载和内存加载分别处理;枚举 loader/path 只能证明加载关系,不等于完成 dump。
需要运行时导出时,先确认系统/ART/ABI 与工具的兼容性,限定样本进程及业务触发窗口。记录导出时间、来源、长度与哈希;核对 DEX 头、表范围、类/方法覆盖及反编译结果。方法抽取、延迟解密或 VM 保护可能仍留下缺失代码,不能把能打开的 DEX 当成完整恢复。
native 去混淆
按 控制流恢复说明 从一个目标函数做起。保留原始 CFG 和输入输出,用静态约束或运行轨迹恢复可证明的边;未知分支保持未知。工具选择依赖架构、IR 和版本,不根据“最强插件”之类描述直接决定。
仅在分析数据库内优化显示、输出伪代码,和真正修补 ELF 是不同结果。后者需要保存补丁偏移、原字节、新字节并独立验证。
验收与交接
比较原始与恢复后的函数在正常、边界及错误路径上的返回值、内存副作用和调用序列。CFG 更小或伪代码更好看并不能证明等价。
交付保护类型及证据、恢复覆盖范围、未恢复部分、操作步骤和差分验证。为定位算法而恢复的函数交还 native 或 签名,无需默认恢复整个 APP。