modified: frida_cli/Cargo.toml modified: frida_cli/src/main.rs modified: frida_client/Cargo.toml modified: frida_client/src/client.rs new file: frida_client/src/lib.rs renamed: frida_cli/src/config/mod.rs -> frida_core/src/config.rs modified: frida_core/src/device.rs modified: frida_core/src/lib.rs modified: frida_core/src/linux_tun.rs renamed: frida_cli/src/obfs.rs -> frida_core/src/obfs.rs renamed: frida_cli/src/udp.rs -> frida_core/src/udp.rs modified: frida_core/src/win_tun.rs
55 lines
1.3 KiB
Rust
55 lines
1.3 KiB
Rust
use chrono::{Timelike, Utc};
|
|
use rand::{rngs::OsRng, RngCore};
|
|
|
|
pub struct VEIL {
|
|
}
|
|
|
|
pub struct XOR {
|
|
|
|
}
|
|
|
|
pub struct DNS {
|
|
rng: OsRng
|
|
}
|
|
|
|
impl Obfuscator for DNS {
|
|
fn obfuscate(&mut self, plain: Vec<u8>) -> Vec<u8> {
|
|
let mut result = Vec::<u8>::new();
|
|
let mut tr_id = [0u8; 2];
|
|
self.rng.fill_bytes(&mut tr_id);
|
|
result.extend(tr_id);
|
|
let flags = [01u8, 00];
|
|
result.extend(flags);
|
|
let mut questions = [0u8; 2];
|
|
self.rng.fill_bytes(&mut questions);
|
|
result.extend(questions);
|
|
let rr = [0u8,0,0,0,0,0];
|
|
result.extend(rr);
|
|
result.extend(&plain[..]);
|
|
let end = [0u8, 1, 0, 1];
|
|
result.extend(end);
|
|
result
|
|
}
|
|
|
|
fn deobfuscate(&mut self, obfs: Vec<u8>) -> Vec<u8> {
|
|
let s = &mut obfs[11..].to_vec();
|
|
s.truncate(s.len()-4);
|
|
s.to_vec()
|
|
}
|
|
}
|
|
|
|
impl Obfuscator for XOR {
|
|
fn obfuscate(&mut self, plain: Vec<u8>) -> Vec<u8> {
|
|
let t: u8 = Utc::now().minute() as u8;
|
|
plain.iter().map(|i| i ^ t).collect::<Vec<u8>>()
|
|
}
|
|
|
|
fn deobfuscate(&mut self, obfs: Vec<u8>) -> Vec<u8> {
|
|
self.obfuscate(obfs)
|
|
}
|
|
}
|
|
|
|
pub trait Obfuscator {
|
|
fn obfuscate(&mut self, plain: Vec<u8>) -> Vec<u8>;
|
|
fn deobfuscate(&mut self, obfs: Vec<u8>) -> Vec<u8>;
|
|
} |