shellcode_loader/obf/
mod.rs1use std::fs;
2
3mod ipv4;
4mod ipv6;
5mod mac;
6mod uuid;
7mod words;
8
9use ipv4::{obfuscate_ipv4, deobfuscate_ipv4};
10use ipv6::{obfuscate_ipv6, deobfuscate_ipv6};
11use mac::{obfuscate_mac, deobfuscate_mac};
12use uuid::{obfuscate_uuid, deobfuscate_uuid};
13use words::{obfuscate_words, deobfuscate_words};
14
15pub fn obfuscate_file(file_path: &str, technique: &str) -> Result<Vec<String>, Box<dyn std::error::Error>> {
17 let current_dir = std::env::current_dir()?;
19 let full_path = current_dir.join(file_path);
20 println!("Looking for file at: {:?}", full_path);
21
22 let buffer = fs::read(&full_path)?;
23 println!("Successfully read file, size: {} bytes", buffer.len());
24
25 let mut buffer_vec = buffer.to_vec();
26
27 match technique {
28 "ipv4" => Ok(obfuscate_ipv4(&mut buffer_vec)),
29 "ipv6" => Ok(obfuscate_ipv6(&mut buffer_vec)),
30 "mac" => Ok(obfuscate_mac(&mut buffer_vec)),
31 "uuid" => Ok(obfuscate_uuid(&mut buffer_vec)),
32 "words" => Ok(obfuscate_words(&mut buffer_vec)),
33 _ => Err("Unsupported technique".into()),
34 }
35}
36
37pub fn deobfuscate_data(data: &[String], technique: &str) -> Result<Vec<u8>, Box<dyn std::error::Error>> {
39 let str_data: Vec<&str> = data.iter().map(|s| s.as_str()).collect();
40
41 match technique {
42 "ipv4" => deobfuscate_ipv4(str_data),
43 "ipv6" => deobfuscate_ipv6(str_data),
44 "mac" => deobfuscate_mac(str_data),
45 "uuid" => deobfuscate_uuid(str_data),
46 "words" => deobfuscate_words(str_data),
47 _ => Err("Unsupported technique".into()),
48 }
49}