未提供项目描述
项目描述
蟒蛇调情
用于解析、编译和匹配快速库识别和识别技术 (FLIRT)签名的 Python 库。这些签名通常由 Hex-Rays IDA Pro 工具使用;这个库是逆向工程匹配引擎和重新实现解析器和匹配器的结果。您可以使用该库将 FLIRT 签名与字节序列进行匹配,从而在没有 IDA Pro 的情况下识别静态链接代码。
这些是通过 PyO3为 Python 3.x 生成的与 lancelot- flirt 的Python 绑定,可在 PyPI 上作为 python- flirt 使用。
用法
添加python-flirt到你的 Python 项目依赖项(例如 via setup.py);例如,像这样:
setuptools.setup(
...
install_requires=[
"python-flirt~=0.6.3",
]
...
)
下面是一个从字符串解析 FLIRT 签名并匹配字节序列的示例:
import flirt
BUF = bytes([
# utcutil.dll
# MD5 abc9ea116498feb8f1de45f60d595af6
# SHA-1 2f1ba350237b74c454caf816b7410490f5994c59
# SHA-256 7607897638e9dae406f0840dbae68e879c3bb2f08da350c6734e4e2ef8d61ac2
# __EH_prolog3_catch_align
0x51,0x8b,0x4c,0x24,0x0c,0x89,0x5c,0x24,0x0c,0x8d,0x5c,0x24,0x0c,0x50,0x8d,0x44,
0x24,0x08,0xf7,0xd9,0x23,0xc1,0x8d,0x60,0xf8,0x8b,0x43,0xf0,0x89,0x04,0x24,0x8b,
0x43,0xf8,0x50,0x8b,0x43,0xfc,0x8b,0x4b,0xf4,0x89,0x6c,0x24,0x0c,0x8d,0x6c,0x24,
0x0c,0xc7,0x44,0x24,0x08,0xff,0xff,0xff,0xff,0x51,0x53,0x2b,0xe0,0x56,0x57,0xa1,
0x70,0x14,0x01,0x10,0x33,0xc5,0x50,0x89,0x65,0xf0,0x8b,0x43,0x04,0x89,0x45,0x04,
0xff,0x75,0xf4,0x64,0xa1,0x00,0x00,0x00,0x00,0x89,0x45,0xf4,0x8d,0x45,0xf4,0x64,
0xa3,0x00,0x00,0x00,0x00,0xf2,0xc3
])
PAT = """\
518B4C240C895C240C8D5C240C508D442408F7D923C18D60F88B43F08904248B 21 B4FE 006E :0000 __EH_prolog3_GS_align ^0041 ___security_cookie ........33C5508941FC8B4DF0895DF08B4304894504FF75F464A1000000008945F48D45F464A300000000F2C3
518B4C240C895C240C8D5C240C508D442408F7D923C18D60F88B43F08904248B 1F E4CF 0063 :0000 __EH_prolog3_align ^003F ___security_cookie ........33C5508B4304894504FF75F464A1000000008945F48D45F464A300000000F2C3
518B4C240C895C240C8D5C240C508D442408F7D923C18D60F88B43F08904248B 22 E4CE 006F :0000 __EH_prolog3_catch_GS_align ^0042 ___security_cookie ........33C5508941FC8B4DF08965F08B4304894504FF75F464A1000000008945F48D45F464A300000000F2C3
518B4C240C895C240C8D5C240C508D442408F7D923C18D60F88B43F08904248B 20 6562 0067 :0000 __EH_prolog3_catch_align ^0040 ___security_cookie ........33C5508965F08B4304894504FF75F464A1000000008945F48D45F464A300000000F2C3
---
"""
# parse signature file content into a list of signatures.
sigs = flirt.parse_pat(PAT)
# compile signatures into a matching engine instance.
# separate from above so that you can load multiple files.
matcher = flirt.compile(sigs)
# match the signatures against the given buffer, starting at offset 0.
# results in a list of rule instances with a field `name` tuple like:
#
# ("__EH_prolog3_catch_align", "public", 0)
for m in matcher.match(BUF):
print("match: " + m.names[0])
预期输出:
match: __EH_prolog3_catch_align
请注意,上述逻辑不处理下面描述的“引用”;但是,它确实为解析和编译规则所需的设置提供了意义。
用途:签名文件格式
该库支持从 .sig 和 .pat 文件格式加载签名:
-
.sig 文件是通常输入 IDA Pro 进行匹配的编译签名。它们在结构上被压缩(并且不常见地使用类似 zlib 的算法进行压缩,此处不支持)并且具有原始二进制表示。
-
.pat 文件是由
sigmake.exe. 这些通常被编译成 .sig 文件以在 IDA Pro 中使用;但是,由于lancelot-flirt将规则编译为自己的中间表示,因此您可以直接使用它们。值得注意的是,该库支持轻微扩展以启用带有前缀行的文件头#,这使您能够嵌入确认/版权/许可证。
了解上述内容后,您还可以考虑.pat.gz在客户端应用程序中支持签名文件,因为这样可以实现很高的压缩率,同时保留文件许可标头和人工可检查性。
用法:匹配引用
为了区分具有共享字节表示的函数,例如分派其他地址的包装函数,FLIRT 引擎使用“引用”递归匹配。此功能大量用于匹配现代 C/C++ 运行时库提供的常见例程。
不幸的是,客户端代码必须协调 FLIRT 匹配的递归调用。
因此,当将此库集成到客户端应用程序中时,您应该查看lancelot::core::analysis::flirt 此处的匹配逻辑。本质上,您需要检查在函数中找到的“引用”并递归地 FLIRT 匹配这些例程以解析最佳匹配签名。在 Python 中还有一个用于 vivisect 的匹配实现,它依赖于更彻底的代码流恢复。
用法:示例工具
工具capa用于python-flirt识别 PE 文件中的静态链接函数。您可以将此代码用作如何将此库与您的客户端代码集成的示例。
执照
该项目根据 Apache 许可证 2.0 版 ( https://www.apache.org/licenses/LICENSE-2.0 ) 获得许可。您不应重新分发 Hex-Rays 分发的 FLIRT 签名;但是,这里有可用的开源签名:
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。