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

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 }