Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/janoglezcampos/rust_syscalls
Evasione IDS/IPSPost-ExploitRed TeamingSviluppo Payload
GitHubjanoglezcampos/rust_syscalls

rust_syscalls

Syscall dirette e indirette con stub singolo e risoluzione runtime dell'SSN per Windows.

Vedi Repository
2403343 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

RUST_SYSCALLS

Stub singolo per syscall dirette e indirette con risoluzione runtime degli SSN per Windows.


Caratteristiche:

  • Una singola riga per tutte le tue syscall
  • Hashing dei nomi delle funzioni in fase di compilazione
  • Syscall dirette o indirette
  • Supporto nativo per x86_64, WOW64 e x86
  • Progettato per consentire l'implementazione di metodi personalizzati per il recupero degli SSN (controlla la fine di questo readme per maggiori informazioni)

Come si usa:

  1. Aggiungi il repository git / il percorso locale della libreria alle tue dipendenze:

    rust_syscalls = {git = "https://github.com/janoglezcampos/rust_syscalls"}

    oppure

    rust_syscalls = {path = <path to library folder>}

  2. Scegli il metodo diretto o indiretto impostando _DIRECT_ o _INDIRECT_ come feature:

rust_syscalls = {path = <path to library folder>}, features = ["_INDIRECT_"]}

  • Importa

    use rust_syscalls::syscall;

  • Esegui la syscall:

    NTSTATUS status = syscall!("NtClose", handle);


  • Esempio:

    root@kitploit:~
        #![allow(non_snake_case)]
        use ntapi::ntapi_base::CLIENT_ID;
        use rust_syscalls::syscall;
    
        use winapi::shared::ntdef::{OBJECT_ATTRIBUTES, HANDLE, NULL, NTSTATUS, PVOID};
        use winapi::um::winnt::{PROCESS_VM_WRITE, PROCESS_VM_READ, MEMORY_BASIC_INFORMATION};
        use std::mem::size_of;
        
        fn main(){
            let pid             : u64      = 3268; //Process PID
            let currentProcess  : HANDLE = -1isize as _;
            let mem_info_len    : usize = size_of::<MEMORY_BASIC_INFORMATION>() as _;
    
            let mut handle      : HANDLE   = NULL;
            let mut status      : NTSTATUS;
        
            let mem_info: MEMORY_BASIC_INFORMATION = MEMORY_BASIC_INFORMATION {
                BaseAddress: NULL,
                AllocationBase: NULL,
                AllocationProtect: 0,
                RegionSize: 0,
                State: 0,
                Protect: 0,
                Type: 0,
            };
    
            let oa : OBJECT_ATTRIBUTES = OBJECT_ATTRIBUTES {
                Length: size_of::<OBJECT_ATTRIBUTES>() as _,
                RootDirectory: NULL,
                ObjectName: NULL as _,
                Attributes: 0,
                SecurityDescriptor: NULL,
                SecurityQualityOfService: NULL
            };
    
            let cid : CLIENT_ID = CLIENT_ID {
                UniqueProcess: pid as _,
                UniqueThread: 0 as _
            };
    
            unsafe {
                status = syscall!("NtOpenProcess", &mut handle, PROCESS_VM_WRITE | PROCESS_VM_READ, &oa, &cid);
            }
            
            println!("\n\t[-] NtOpenProcess status: {:#02X}", status);
    
            if status != 0 {
                return;
            }
    
            unsafe {
                status = syscall!("NtQueryVirtualMemory", currentProcess, &pid, 0, &mem_info, mem_info_len, NULL as PVOID);
            }
            
            println!("\n\t[-] NtQueryVirtualMemory status: {:#02X}", status);
            
            if status != 0 {
                return;
            }
    
            println!("\n\t[-] Protect value: {:#02X}\n\t", mem_info.Protect);
    
            unsafe {
                status = syscall!("NtClose", handle);
            }
            
            println!("\t[-] NtClose       status: {:#02X}", status);
        }
    

    Implementazione di nuovi metodi per la risoluzione runtime degli SSN e degli indirizzi delle syscall:

    Tutto il codice necessario per il recupero degli SSN e degli indirizzi è incluso nel file src\syscall_resolve.rs.

    Esiste una funzione principale usata per recuperare i valori chiamata get_ssn, con 4 implementazioni, in cui l'argomento ricevuto è il risultato della chiamata a crate::obf!(\<your function name\>), e i valori di ritorno sono il valore SSN (u16) e, nel caso di syscall indirette, l'indirizzo dell'istruzione syscall/sysenter che si desidera utilizzare.

    • x86_64 diretto:

      fn get_ssn(hash: u32) -> (u16);

    • x86_64 indiretto:

      fn get_ssn(hash: u32) -> (u16, u64);

    • x86 diretto:

      fn get_ssn(hash: u32) -> (u16);

    • x86 indiretto:

      fn get_ssn(hash: u32) -> (u16, u32);

    È sufficiente reimplementare queste funzioni con il metodo di recupero desiderato.


    Grazie a SysWhispers3 per essere stato un forte pilastro nello sviluppo di questa libreria

    Scarica lo strumento