Rust-Obfuscator
rust-obfuscator is a set of tools designed to automatically obfuscate Rust source code by inserting procedural macros or by (optionally) providing the obfuscation in the source code directly. For more fine-grained obfuscation a procedural macro library cryptify is also provided.
Currently Supported
- string literal encryption
- control-flow obfuscation
- control-flow obfuscation (source code)
- variable renaming (source code)
Features
- String Encryption: Automatically encrypts string literals assigned to local variables at compile time.
- Can also be used for formatted strings, but currently requires manual placement
println!("{}", cryptify::encrypt_string!("hello!"));
``
- Control Flow Obfuscation: Introduces compile-dummy dummy loops and random variables.
- Customizable Obfuscation: Offers flexibility to enable or disable specific obfuscation features based on your requirements.
- Variable Renaming: Obfuscation of the source code directly, if you'd like to ship the code or just want to make your code look worse.
- NOTE: var renaming not fully functional as of 1.1.1 working on full-support as some cases aren't covered yet. Can still use the tool and fix the appropiate compiler errors.
Installation
Add
cryptify to your Cargo.toml as a dependency:
toml
[dependencies]
cryptify = "3.2.1"
cargo build --release --bin rust-obfuscatorTo installrust-obfuscator, clone the repository and build the tool using Cargo from the root:
The binary can then be found under /target/release, you can copy it to the root of the project like such
cp ./target/release/rust-obfuscator .
Usage
Set the CRYPTIFY_KEY environment variable for custom encryption, otherwise it defaults to the defined fixed key
- Add to the source code you'd like to modify
rs
use cryptify;
The binary can be used on either a file or a directory. If provided with a directory it will only modify Rust source files within that directory, not any subdirectories.sh
./rust-obfuscator path/to/your_project - All Obfuscated code will be under the obfuscated_code directory that is created from the directory the tool was run.
- Recommended to use a Rust Formatter with the obfuscated code as syn naturally modifies the structure and it will be written to the file as one line
Option Flags
- --no_string: Disables string obfuscation.
- --no_flow: Disables control flow obfuscation.
- --disable_macro: Uses direct source manipulation for flow obfuscation instead of procedural macros.
- --var: Enables variable renaming source code obfuscation.
Example usage with flag
sh
rust-obfuscator path/to/your_project --no_flow
(disables flow obfuscation)Input
-running the tool with no configrs
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"); }
# Outputrs
fn main() {
cryptify::flow_stmt!();
let b = cryptify::encrypt_string!("Hello World");
println!("{}", b);
let args: Vec## Expanded Outputrs
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"));
};
}
``
License
rust-obfuscator is licensed under the MIT License - see the LICENSE file for details.--- Tranlated By Open Ai Tx | Last indexed: 2026-03-17 ---