myph-v2~ rust shellcode loader with evasive capabilities |
| git clone https://github.com/djnnvx/myph-v2.git |
| log | files | refs | archive | README |
capability_matrix.rs (3070B)
1 use crate::internals::templates::techniques::capabilities::{list_all_techniques, Capability}; 2 3 pub fn generate_capability_matrix() -> String { 4 let techniques = list_all_techniques(); 5 let mut output = String::new(); 6 7 output.push_str("### Technique Capability Matrix\n\n"); 8 output.push_str("| Technique | Detection Difficulty | Admin Required | Process Injection | Dynamic Resolver | AMSI Patch | Requires Ntdll |\n"); 9 output.push_str("|-----------|---------------------|----------------|-------------------|------------------|------------|----------------|\n"); 10 11 for tech in techniques { 12 let requires_admin = if tech.has_capability(Capability::RequiresAdmin) { 13 "✓" 14 } else { 15 "" 16 }; 17 let process_injection = if tech.has_capability(Capability::RequiresProcessInjection) { 18 "✓" 19 } else if tech.has_capability(Capability::LocalExecutionOnly) { 20 "Local" 21 } else { 22 "" 23 }; 24 let dynamic_resolver = if tech.supports_dynamic_resolver() { 25 "✓" 26 } else { 27 "" 28 }; 29 let amsi_patch = if tech.has_capability(Capability::SupportsAMSIPatch) { 30 "✓" 31 } else { 32 "" 33 }; 34 let requires_ntdll = if tech.has_capability(Capability::RequiresNtdll) { 35 "✓" 36 } else { 37 "" 38 }; 39 40 output.push_str(&format!( 41 "| {} | {} | {} | {} | {} | {} | {} |\n", 42 tech.name, 43 tech.detection_difficulty.as_str(), 44 requires_admin, 45 process_injection, 46 dynamic_resolver, 47 amsi_patch, 48 requires_ntdll 49 )); 50 } 51 52 output.push_str("\n**Legend:**\n"); 53 output.push_str("- **Admin Required**: Technique requires administrator privileges\n"); 54 output.push_str( 55 "- **Process Injection**: ✓ = Injects into remote process, Local = Executes locally\n", 56 ); 57 output.push_str("- **Dynamic Resolver**: Supports runtime API resolution via PEB walk\n"); 58 output.push_str("- **AMSI Patch**: Compatible with AMSI patching\n"); 59 output.push_str("- **Requires Ntdll**: Uses native NT API functions from ntdll.dll\n"); 60 61 output 62 } 63 64 #[cfg(test)] 65 mod tests { 66 use super::*; 67 68 #[test] 69 fn test_generate_capability_matrix() { 70 let matrix = generate_capability_matrix(); 71 assert!(!matrix.is_empty()); 72 assert!(matrix.contains("Technique")); 73 assert!(matrix.contains("Detection Difficulty")); 74 assert!(matrix.contains("crt")); 75 assert!(matrix.contains("fairy-law")); 76 assert!(matrix.contains("Legend")); 77 } 78 79 #[test] 80 fn test_matrix_contains_all_techniques() { 81 let matrix = generate_capability_matrix(); 82 let techniques = list_all_techniques(); 83 84 for tech in techniques { 85 assert!( 86 matrix.contains(tech.name), 87 "Matrix should contain technique: {}", 88 tech.name 89 ); 90 } 91 } 92 }