3个版本
0.2.2 | 2024年8月7日 |
---|---|
0.2.1 | 2024年4月3日 |
0.2.0 | 2024年2月22日 |
#704 在 编码
每月 173 次下载
16KB
77 行
muddy
muddy
是一个静态字符串混淆库,旨在提供一个简单的方式来避免简单的静态二进制分析工具,如 strings
或 YARA规则。它通过在构建时加密文本,并在运行时懒加载地解密它们来实现。
用法与示例
use muddy::{m, muddy_init};
muddy_init!();
println!("{}", m!("My highly obfuscated text"));
println!("{}", "My non obfuscated static str - ripgrep me");
编译此示例并使用grep在二进制文件中查找
obfuscated
cargob --examplesimple
strings./target/debug/examples/simple|grep obfuscated
只有第二行非混淆行应该出现。
muddy
主要提供导出的宏 m!()
、#[muddy]
和 muddy_all! { }
,所有这些宏都接受文本作为输入并对其进行加密。宏 muddy_init!()
为在运行时解密字符串提供框架,并应放在用户crate的 root
。
这些宏可以作为内联文本替换与 m!("my text")
使用
use muddy::{muddy_init, m};
muddy_init!();
println!("{}", m!("my plaintext"));
作为一个带有 muddy
属性的注解 &'static str
use muddy::{muddy, muddy_init};
muddy_init!();
#[muddy]
static MY_STR: &str = "my plaintext";
或者作为一个带有 muddy_all
的多个注解 &'static str
的调用
use muddy::{muddy_all, muddy_init};
muddy_init!();
muddy_all! {
pub static MY_STR: &str = "my plaintext";
pub static MY_SECOND_STR: &str = "my second plaintext";
static MY_THIRD_STR: &str = "my module-specific third plaintext";
}
默认情况下,muddy
将使用 chacha20poly1305
实现加密静态字符串,并将密钥嵌入到二进制文件中。
为了避免将去混淆密钥硬编码到您的二进制文件中,您可以使用
use muddy::{m, muddy_init};
muddy_init!("env");
// If you build your program with `muddy_init!("env")`,
// the deobfuscation key env variable and deobfuscation key
// will be printed out to stderr:
// `MUDDY='D47A372C13DEFED74FD3B9B4C741C355F9CB2C23C43F98ADE2C02FD50CA55C3D'`
// This key needs to be provided at runtime else the program will panic.
// `MUDDY='D47A372C13DEFED74FD3B9B4C741C355F9CB2C23C43F98ADE2C02FD50CA55C3D' ./target/debug/examples/env`
println!("{}", m!("My highly obfuscated text"));
println!("{}", "My non obfuscated static str - ripgrep me");
如果设置了 muddy_init!("env")
,则在运行时会检查 MUDDY
(默认)环境变量以获取密钥。如果未找到,程序将崩溃。
您也可以在构建时通过 MUDDY
设置自己的环境密钥标识符
例如: MUDDY='MY_KEY_NAME_2' cargo b --example env
将输出: MY_KEY_NAME_2='FD5B85045B5278F5EDA567AD7C58EB56934BD8D7432C878B1AB6090052A64080'
muddy_init!
muddy_init!()
可以取两个值之一
muddy_init!("embed")
muddy_init!("env")
如果没有提供值,该宏默认为 "embed"
配置。
如果提供了 "env"
,您还可以将环境密钥标识符设置为第二个字段: muddy_init!("env", "MY_KEY")
关于混淆和加密的说明
此 crate 不提供任何形式的实际加密。它只是使理解您二进制文件中的字符串更困难。 混淆不是安全。
此 crate 也不混淆您可能有的任何调试符号。配置文件设置,如
# inside Cargo.toml
[profile]
strip = true
panic = "abort"
# ...
等等,可以在 cargo参考 中找到。
宏展开
要检查此宏展开的内容
- 安装 cargo expand
- 运行:
cargo expand -p muddy --example env
下一步
- 处理
#![no_std]
环境 - 通过泄漏
mut
静态检查安全性 - 检查过程宏测试套件
免责声明
此库的开发目的是提供一种工具,以挑战和教育网络安全专业人员。它不适用于任何恶意或非法活动。此库的创建者和贡献者不支持或鼓励使用此工具进行任何非法目的。
类似/相关项目
许可证
根据 Apache 2.0 和 MIT 条款双许可。
依赖关系
~1.5–2.1MB
~43K SLoC