#binary-data #ascii-text #string

程序+库 rust-strings

rust-strings 是从二进制数据中提取 ASCII 字符串的库

5 个版本 (重大更改)

0.6.0 2024年2月4日
0.4.0 2023年1月7日
0.3.0 2022年5月28日
0.2.0 2022年2月25日
0.1.0 2022年1月30日

#630 in 编码

Download history 72/week @ 2024-04-11 79/week @ 2024-04-18 158/week @ 2024-04-25 80/week @ 2024-05-02 61/week @ 2024-05-09 90/week @ 2024-05-16 84/week @ 2024-05-23 144/week @ 2024-05-30 206/week @ 2024-06-06 125/week @ 2024-06-13 84/week @ 2024-06-20 71/week @ 2024-06-27 84/week @ 2024-07-04 131/week @ 2024-07-11 75/week @ 2024-07-18 135/week @ 2024-07-25

每月433次下载
用于 2 crates

MIT 许可协议

34KB
741

rust-strings

CI License Crates.io PyPI

rust-strings 是一个用于从二进制数据中提取字符串的 Rust 库。
它也提供了 Python 绑定。

安装

Python

使用包管理器 pip 安装 rust-strings.

pip install rust-strings

Rust

rust-strings 可在 crates.io 上找到,并可以像这样添加到您的 Cargo 启用项目中

[dependencies]
rust-strings = "0.6.0"

使用方法

Python

import rust_strings

# Get all ascii strings from file with minimun length of string
rust_strings.strings(file_path="/bin/ls", min_length=3)
# [('ELF', 1),
#  ('/lib64/ld-linux-x86-64.so.2', 680),
#  ('GNU', 720),
#  ('.<O', 725),
#  ('GNU', 756),
# ...]

# You can also set buffer size when reading from file (default is 1mb)
rust_strings.strings(file_path="/bin/ls", min_length=5, buffer_size=1024)

# You can set encoding if you need (default is 'ascii', options are 'utf-16le', 'utf-16be')
rust_strings.strings(file_path=r"C:\Windows\notepad.exe", min_length=5, encodings=["utf-16le"])

# You can set multiple encoding
rust_strings.strings(file_path=r"C:\Windows\notepad.exe", min_length=5, encodings=["ascii", "utf-16le"])

# You can also pass bytes instead of file_path
rust_strings.strings(bytes=b"test\x00\x00", min_length=4, encodings=["ascii"])
# [("test", 0)]

# You can also dump to json file
rust_strings.dump_strings("strings.json", bytes=b"test\x00\x00", min_length=4, encodings=["ascii"])
# `strings.json` content:
# [["test", 0]]

Rust

完整文档可在 docs.rs 上找到

use rust_strings::{FileConfig, BytesConfig, strings, dump_strings, Encoding};
use std::path::{Path, PathBuf};

let config = FileConfig::new(Path::new("/bin/ls")).with_min_length(5);
let extracted_strings = strings(&config);

// Extract utf16le strings
let config = FileConfig::new(Path::new("C:\\Windows\\notepad.exe"))
    .with_min_length(15)
    .with_encoding(Encoding::UTF16LE);
let extracted_strings = strings(&config);

// Extract ascii and utf16le strings
let config = FileConfig::new(Path::new("C:\\Windows\\notepad.exe"))
    .with_min_length(15)
    .with_encoding(Encoding::ASCII)
    .with_encoding(Encoding::UTF16LE);
let extracted_strings = strings(&config);

let config = BytesConfig::new(b"test\x00".to_vec());
let extracted_strings = strings(&config);
assert_eq!(vec![(String::from("test"), 0)], extracted_strings.unwrap());

// Dump strings into `strings.json` file.
let config = BytesConfig::new(b"test\x00".to_vec());
dump_strings(&config, PathBuf::from("strings.json"));

贡献

欢迎提交拉取请求。对于重大更改,请首先提交问题以讨论您想进行更改的内容。

请确保适当地更新测试。

许可协议

MIT

依赖

~0–5.5MB
~19K SLoC