Rust-Obfuscator
rust-obfuscator — это набор инструментов, предназначенных для автоматической обфускации исходного кода Rust путем внедрения процедурных макросов или (по желанию) предоставления обфускации непосредственно в исходном коде. Для более детальной обфускации также доступна библиотека процедурных макросов cryptify.
В настоящее время поддерживается
- шифрование строковых литералов
- обфускация управления потоком
- обфускация управления потоком (исходный код)
- переименование переменных (исходный код)
Возможности
- Шифрование строк: Автоматически шифрует строковые литералы, присваиваемые локальным переменным во время компиляции.
- Может также использоваться для форматированных строк, но в настоящее время требует ручного размещения
println!("{}", cryptify::encrypt_string!("hello!"));
``
- Обфускация управления потоком: Вводит фиктивные циклы компиляции и случайные переменные.
- Настраиваемая обфускация: Предоставляет возможность включать или отключать определённые функции обфускации в зависимости от ваших требований.
- Переименование переменных: Обфускация исходного кода напрямую, если вы хотите распространять код или просто сделать его менее читаемым.
- ПРИМЕЧАНИЕ: переименование переменных не полностью работает в версии 1.1.1, ведётся работа над полной поддержкой, некоторые случаи пока не охвачены. Инструмент всё равно можно использовать и исправлять соответствующие ошибки компилятора.
Установка
Добавьте
cryptify в ваш Cargo.toml как зависимость:
toml
[dependencies]
cryptify = "3.2.1"
cargo build --release --bin rust-obfuscatorЧтобы установитьrust-obfuscator, клонируйте репозиторий и соберите инструмент с помощью Cargo из корня:
Бинарный файл можно найти в /target/release, вы можете скопировать его в корневую папку проекта следующим образом
cp ./target/release/rust-obfuscator .
Использование
Установите переменную окружения CRYPTIFY_KEY для пользовательского шифрования, иначе будет использоваться заданный фиксированный ключ
- Добавьте в исходный код, который хотите изменить
rs
use cryptify;
Двоичный файл можно использовать как для файла, так и для каталога. Если указан каталог, он будет изменять только исходные файлы rust внутри этого каталога, но не в каких-либо подкаталогах.sh
./rust-obfuscator path/to/your_project - Весь обфусцированный код будет находиться в директории obfuscated_code, которая создаётся из директории, где был запущен инструмент.
- Рекомендуется использовать Rust Formatter с обфусцированным кодом, поскольку syn естественно изменяет структуру и код будет записан в файл одной строкой
Флаги опций
- --no_string: Отключает обфускацию строк.
- --no_flow: Отключает обфускацию управляющего потока.
- --disable_macro: Использует прямое изменение исходного кода для обфускации потока вместо процедурных макросов.
- --var: Включает обфускацию исходного кода путём переименования переменных.
Пример использования с флагом
sh
rust-obfuscator path/to/your_project --no_flow
(отключает обфускацию потока)Ввод
-запуск инструмента без конфигурацииrs
use cryptify;
mod word_counter;
use std::env;
use std::fs;
use word_counter::count_words;
fn main() {
let b = "Hello World";
println!("{}", b);
let args: Vecfn dummy() { let a = 1; let b = 2; let c = a + b; println!("{}", c); }
fn calc_sum(a: i32, b: i32) -> i32 { cryptify::flow_stmt!(); let c = a + b; c }
fn helloooo(){ println!("hi"); }
# Выводrs
fn main() {
cryptify::flow_stmt!();
let b = cryptify::encrypt_string!("Hello World");
println!("{}", b);
let args: Vec## Расширенный выводrs
fn main() {
{
let _is_dummy_145 = true;
let mut _dummy_counter = std::hint::black_box(4i32 as i32);
let _dummy_increment = std::hint::black_box(1i32 as i32);
let _dummy_upper_bound = std::hint::black_box(53i32 as i32);
loop {
if std::hint::black_box(_dummy_counter)
> std::hint::black_box(_dummy_upper_bound)
{
break;
}
_dummy_counter = std::hint::black_box(
std::hint::black_box(_dummy_counter)
+ std::hint::black_box(_dummy_increment),
);
}
};
match (&1, &1) {
(left_val, right_val) => {
if !(left_val == right_val) {
let kind = ::core::panicking::AssertKind::Eq;
::core::panicking::assert_failed(
kind,
&*left_val,
&*right_val,
::core::option::Option::None,
);
}
}
};
}
fn dummy() {
{
let _is_dummy_145 = true;
let mut _dummy_counter = 4i32;
let _dummy_upper_bound = 100;
let _dummy_increment = 3i32;
loop {
if _dummy_counter > _dummy_upper_bound {
break;
}
unsafe {
std::ptr::write_volatile(
&mut _dummy_counter,
_dummy_counter + _dummy_increment,
);
}
}
};
let a = 1;
let b = 2;
let c = a + b;
{
::std::io::_print(format_args!("{0}\n", c));
};
}
fn calc_sum(a: i32, b: i32) -> i32 {
{
let _is_dummy_145 = true;
let mut _dummy_counter = 8i32;
let _dummy_increment = 3i32;
let _extra_dummy_var = 4i32;
let _dummy_upper_bound = 100;
loop {
if _dummy_counter > _dummy_upper_bound {
break;
}
unsafe {
std::ptr::write_volatile(
&mut _dummy_counter,
_dummy_counter + _dummy_increment,
);
}
}
};
let c = a + b;
c
}
fn helloooo() {
{
::std::io::_print(format_args!("hi\n"));
};
}
``
Лицензия
rust-obfuscator лицензирован по лицензии MIT — подробности см. в файле LICENSE.--- Tranlated By Open Ai Tx | Last indexed: 2026-03-21 ---