eversinc33/MicroSMT

GitHub: eversinc33/MicroSMT

MicroSMT是一款IDA Pro插件,通过将微代码提升到z3 SMT求解器来自动识别并解决不透明谓词,实现条件跳转指令的去混淆和修补。

Stars: 56 | Forks: 2

# MicroSMT MicroSMT 是一款 IDA Pro 插件,旨在通用化地解决不透明谓词。 它通过从 `jcc`/`setcc` 指令进行反向切片,并将相关的 Hex-Ray 微代码片段提升为 z3 表达式。这些表达式可以通过 SMT 求解,然后相应地修补指令。 MicroSMT 目前处于 *pre-alpha* 状态——使用微代码存在一些陷阱,我并不期望它能处处可用。此外,lifter 尚未实现所有指令的支持。 尽管如此,MicroSMT 已经能够自主解决多个系列的不透明谓词(见下文示例)。 在可解决的不透明谓词方面存在一些限制——值得注意的例外包括: * 依赖内存访问的谓词 * 依赖外部 API 调用及其返回结果的谓词 * 跨越多个基本块的谓词 对于这些类型,我建议使用完整的符号执行或类似方法。 *MicroSMT 已在 IDA Pro 9.2 上进行过测试* ### 安装说明 将 `MicroSMT.py` 复制到您的 IDA 插件文件夹(例如 `~/.idapro/plugins`)。请确保已通过 `pip` 安装 `z3`。 ### 使用方法 将光标指向 `jcc` 或 `setcc` 指令,按下 `Alt+m`,MicroSMT 将判断该条件是否为不透明谓词,如果是,则进行求解。如果您在插件设置菜单中勾选修补选项,MicroSMT 还将进行相应修补(例如将 `jcc` 修补为 `nop` 或 `jmp`,或将 `setcc` 替换为赋值 0 或 1)。 ### 示例 ``` Lumma Stealer 00f1a9c6185b346f8fdf03e7928facfc44fc63e6a847eb21fa0ecd7fb94bb7e3 ``` ![/img/lumma.gif](/img/lumma.gif) ``` ANELLOADER (Apt10) 362b0959b639ab720b007110a1032320970dd252aa07fc8825bb48e8fdd14332 ``` ![/img/apt10.gif](/img/apt10.gif) ### 设计动机 在为一个 bin2bin 混淆器实现 IR lifter 时,我产生了将微代码提升到 z3 以进行去混淆的想法。由于我以前在逆向工程中从未真正使用过 SMT,而是通常依赖动态分析/追踪,所以我想尝试一下。此外,我喜欢对问题采取通用/自动化的解决方案,而 MicroSMT 正好填补了我所需的工具空白。
标签:CTF工具, DAST, Hex-Rays, IDA Pro插件, SMT求解, Z3, 不透明谓词, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 去混淆, 反混淆, 可配置连接, 微代码分析, 恶意软件分析, 指令切片, 漏洞分析, 漏洞搜索, 程序分析, 符号执行, 自动化分析, 跨站脚本, 路径探测, 逆向工具, 逆向工程, 静态分析