Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
rust_syscalls — Syscalling directo e indirecto con un único stub y resolución de SSN en tiempo de ejecución para Windows. | Kitploit
Herramientas/GitHubGitHub/janoglezcampos/rust_syscalls
Evasión de IDS/IPSPost-ExplotaciónRed TeamingDesarrollo de Payloads
GitHubjanoglezcampos/rust_syscalls

rust_syscalls

Syscalling directo e indirecto con un único stub y resolución de SSN en tiempo de ejecución para Windows.

Ver Repositorio
240334hace 3 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

RUST_SYSCALLS

Stub único para syscalls directas e indirectas con resolución de SSN en tiempo de ejecución para Windows.


Características:

  • Una sola línea para todas tus syscalls
  • Hash del nombre de la función en tiempo de compilación
  • Syscalls directas o indirectas
  • Soporte nativo para x86_64, WOW64 y x86
  • Diseñado para permitir la implementación de métodos personalizados de obtención de SSN (consulta el final de este readme para más información)

Cómo usar:

  1. Añade el repositorio git / la ruta local a la librería en tus dependencias:

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

    o

    rust_syscalls = {path = <ruta a la carpeta de la librería>}

  2. Elige el método directo o indirecto estableciendo _DIRECT_ o _INDIRECT_ como una feature:

rust_syscalls = {path = <ruta a la carpeta de la librería>}, features = ["_INDIRECT_"]}

  • Importa

    use rust_syscalls::syscall;

  • Syscall:

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


  • Ejemplo:

    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);
        }
    

    Implementación de nuevos métodos de resolución de SSN y direcciones de syscalls en tiempo de ejecución:

    Todo el código necesario para realizar la obtención de SSN y direcciones está incluido en el archivo src\syscall_resolve.rs.

    Hay una función principal utilizada para recuperar los valores llamada get_ssn, con 4 implementaciones, donde el argumento recibido es el resultado de llamar a crate::obf!(\<nombre de tu función\>), y los valores de retorno son el ssn (u16) y, en caso de syscalls indirectas, la dirección de la instrucción syscall/sysenter que quieras usar.

    • x86_64 directo:

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

    • x86_64 indirecto:

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

    • x86 directo:

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

    • x86 indirecto:

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

    Solo reimplementa estas funciones con el método de obtención que desees.


    Gracias a SysWhispers3 por ser un pilar fuerte en el desarrollo de esta librería

    Descargar herramienta