工具
paranoid-deobfuscator 字符串反混淆工具
一个 Python 命令行工具,用于还原被 Paranoid 和 LSParanoid 这两款 Android 字符串混淆插件隐藏的字符串,使 smali 代码便于静态分析。它在 smali 目录中查找混淆器的字符串查询方法和编码后的分块数组,用移植自这两个库 DeobfuscatorHelper 和 RandomHelper 类的 Python 实现解码分块,并就地把每处查询调用改写为带标记注释的 const-string 指令。辅助命令可列出还原的字符串、把分块保存到文件,以及根据已保存的分块解码单个字符串。
- 目标
- 应用
- 类别
- Android 工具
- 关联
- 基础工具
- 来源复核于
使用条件与局限
- 审阅时最新版本为 v3.0.2,发布于 2025-02-18,并于同日上传到 PyPI;可用 pip 或 pipx 安装。pyproject.toml 要求 Python 3.10+,依赖 click 8(8.1.7 或更高)和 NumPy 2(2.1.3 或更高);CI 在每次推送时于 Python 3.10 至 3.13 上运行 pytest。所审阅的 main 分支 2025-03-26 提交在该版本之后只增加了测试和捐助链接。
- 它处理从使用者自备的 APK 或 DEX 文件解码出的 smali 目录(README 搭配 Apktool 或 smali/baksmali 进行解码和重新构建),并会就地覆盖 smali 文件。README 说明只支持用 Paranoid v0.3.0(2020 年 1 月 25 日发布)或更新版本混淆的应用;README 中已被注释掉的 Windows 警告指向 issue #14,该 issue 已关闭。
- 若找到多个候选的字符串查询方法或混淆字符串数组,命令会停止,源码称这种情况暂不支持;对无法跟踪的查询调用会记录警告。它只还原字符串常量,不会恢复名称或撤销其他混淆。测试覆盖字符串编码、smali 解析、Paranoid 解码以及 issue #18 的回归问题。
- 采用 Apache-2.0 许可证(版权 2024 Giacomo Ferretti);解码模块注明其由 Paranoid 和 LSParanoid 的 Java 辅助类转换而来。被分析的应用适用其自身条款。本次审阅未运行任何内容;所审来源未确立与 REA 的关联。
关于此条目
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · giacomoferretti/paranoid-deobfuscator · 修订 028bd05
- paranoid_deobfuscator/commands/deobfuscate.py GitHub · giacomoferretti/paranoid-deobfuscator · 修订 028bd05
- paranoid_deobfuscator/commands/helpers.py GitHub · giacomoferretti/paranoid-deobfuscator · 修订 028bd05
- paranoid_deobfuscator/paranoid/DeobfuscatorHelper.py GitHub · giacomoferretti/paranoid-deobfuscator · 修订 028bd05
- pyproject.toml GitHub · giacomoferretti/paranoid-deobfuscator · 修订 028bd05
- .github/workflows/run_tests.yml GitHub · giacomoferretti/paranoid-deobfuscator · 修订 028bd05
- LICENSE GitHub · giacomoferretti/paranoid-deobfuscator · 修订 028bd05
- https://github.com/giacomoferretti/paranoid-deobfuscator/releases/tag/v3.0.2
- https://pypi.org/project/paranoid-deobfuscator/3.0.2/