Skip to main content

未提供项目描述

项目描述

蟒蛇调情

用于解析、编译和匹配快速库识别和识别技术 (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 签名;但是,这里有可用的开源签名:

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

内置发行版

python_flirt-0.7.0-cp310-none-win_amd64.whl (191.9 kB 查看哈希

已上传 cp310

python_flirt-0.7.0-cp310-none-win32.whl (185.4 kB 查看哈希

已上传 cp310

python_flirt-0.7.0-cp310-cp310-macosx_10_7_x86_64.whl (237.0 kB 查看哈希

已上传 cp310

python_flirt-0.7.0-cp39-none-win_amd64.whl (192.0 kB 查看哈希

已上传 cp39

python_flirt-0.7.0-cp39-none-win32.whl (185.6 kB 查看哈希

已上传 cp39

python_flirt-0.7.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl (263.1 kB 查看哈希

已上传 cp39

python_flirt-0.7.0-cp39-cp39-macosx_10_7_x86_64.whl (237.2 kB 查看哈希

已上传 cp39

python_flirt-0.7.0-cp38-none-win_amd64.whl (192.0 kB 查看哈希

已上传 cp38

python_flirt-0.7.0-cp38-none-win32.whl (185.6 kB 查看哈希

已上传 cp38

python_flirt-0.7.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl (263.1 kB 查看哈希

已上传 cp38

python_flirt-0.7.0-cp38-cp38-macosx_10_7_x86_64.whl (237.2 kB 查看哈希

已上传 cp38

python_flirt-0.7.0-cp37-none-win_amd64.whl (191.9 kB 查看哈希

已上传 cp37

python_flirt-0.7.0-cp37-none-win32.whl (185.6 kB 查看哈希

已上传 cp37

python_flirt-0.7.0-cp37-cp37m-macosx_10_7_x86_64.whl (237.2 kB 查看哈希

已上传 cp37

python_flirt-0.7.0-cp36-none-win_amd64.whl (192.1 kB 查看哈希

已上传