#hacking #reverse-engineering #byte-array #game-hacking #sigscan

patternscan

根据通配符模式搜索连续的字节序列

3个版本 (稳定)

1.2.0 2021年1月23日
1.1.1 2020年12月31日
0.1.1 2020年8月13日
0.1.0 2020年8月13日

#1710 in 解析器实现

Download history 14/week @ 2024-03-10 11/week @ 2024-03-17 7/week @ 2024-03-24 42/week @ 2024-03-31 17/week @ 2024-04-07 8/week @ 2024-04-14 17/week @ 2024-04-21 52/week @ 2024-04-28 6/week @ 2024-05-05 12/week @ 2024-05-12 14/week @ 2024-05-19 21/week @ 2024-05-26 16/week @ 2024-06-02 6/week @ 2024-06-09 13/week @ 2024-06-16 16/week @ 2024-06-23

每月54次下载

MIT 许可证

18KB
295

patternscan

CI Badge Crates Badge License Badge Issues Badge

根据给定的模式搜索连续的字节序列。模式可以包含支持的通配符字符,如下所示。

通配符

  • ? 匹配任何字节

示例模式

  • fe 00 68 98 - 仅匹配 fe 00 68 98
  • 8d 11 ? ? 8f - 可能匹配 8d 11 9e ef 8f8d 11 0 0 8f

文档

docs.rs

许可证

此项目采用MIT许可证 - 请参阅LICENSE.md以获取详细信息。


lib.rs:

根据给定的模式搜索连续的字节序列。模式可以包含支持的通配符字符,如下所示。

通配符

  • ? 匹配任何字节

示例模式

  • fe 00 68 98 - 仅匹配 fe 00 68 98
  • 8d 11 ? ? 8f - 可能匹配 8d 11 9e ef 8f8d 11 0 0 8f

示例用法

使用scan函数在Read的输出中搜索模式。使用Cursor在内存中的字节数组中扫描可能如下所示

use patternscan::scan;
use std::io::Cursor;

let bytes = [0x10, 0x20, 0x30, 0x40, 0x50];
let pattern = "20 30 40";
let locs = scan(Cursor::new(bytes), &pattern).unwrap(); // Will equal vec![1], the index of
                                                        // the pattern

任何实现Read的结构都可以作为读取器传递,以便扫描模式的实例,因此可以在可执行文件中扫描字节序列,如下所示

use patternscan::scan;
use std::fs::File;

let reader = File::open("somebinary.exe").unwrap();
let instruction = "A3 ? ? ? ?";
let locs = scan(reader, &instruction).unwrap();

有关此模块的更多示例用法,请参阅测试

无运行时依赖