#signature #pattern #sig #byte-array #sigsearch

sigmatch

使用Rust编写的针对Windows平台的内存签名搜索库

4个版本

0.1.3 2024年3月6日
0.1.2 2024年3月6日
0.1.1 2024年3月6日
0.1.0 2024年3月6日

#59Windows API

每月 39 次下载

MIT 许可证

22KB
340

sigmatch

使用Rust编写的针对Windows平台的内存签名搜索库。

这是从我的另一个C++项目迁移的基本版本,更多功能即将推出!

Crates.io Crates.io depstatus Crates.io

快速使用

假设您已通过 IDA-Pro-SigMaker 获取了签名。

签名类型 示例预览
IDA签名 E8 ? ? ? ? 45 33 F6 66 44 89 34 33
x64Dbg签名 E8 ?? ?? ?? ?? 45 33 F6 66 44 89 34 33
C字节数组签名 + 字符串掩码 \xE8\x00\x00\x00\x00\x45\x33\xF6\x66\x44\x89\x34\x33 x????xxxxxxxx
C原始字节签名 + 位掩码 0xE8, 0x00, 0x00, 0x00, 0x00, 0x45, 0x33, 0xF6, 0x66, 0x44, 0x89, 0x34, 0x33 0b1111111100001
[dependencies]
anyhow = "1.0"
sigmatch = "0.1"
fn main() {
        let Ok(mut sker) = sigmatch::Seeker::with_name("user32.dll") else {
        return;
    };

    // IDA sig
    let Ok(_ida_example) = sker.search("E8 ? ? ? ? 45 33 F6 66 44 89 34 33") else {
        return;
    };

    // x64dbg sig
    let Ok(_x64dbg_example) = sker.search("E8 ?? ?? ?? ?? 45 33 F6 66 44 89 34 33") else {
        return;
    };

    // c sig + mask
    let Ok(_c_example) = sker.raw_search(
        b"\xE8\x00\x00\x00\x00\x45\x33\xF6\x66\x44\x89\x34\x33",
        "x????xxxxxxxx",
    ) else {
        return;
    };

    // rebind and reversese_search
    let _ = || -> anyhow::Result<()> {
        // If the module name is "main", then retrieve the main module.
        let _rebind_example = sker.bind("main")?.reverse_search("ab cd ?? ef")?;
        Ok(())
    }();

    // new Seeker
    let mut sker1 = sigmatch::Seeker::new();
    if sker1.bind("ntdll.dll").is_err() {
        return;
    }
}

待办事项

  • 支持链式调用。

  • 允许指定搜索地址。

  • 基于段的搜索支持。

  • 支持限制搜索。

  • 单元测试

  • 改进的文件组织

示例

更多示例请参阅 示例

依赖项

~132MB
~2M SLoC