Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
rust_syscalls — Stub único de chamadas de sistema (syscall) diretas e indiretas com resolução de SSN em tempo de execução para Windows. | Kitploit
Ferramentas/GitHubGitHub/janoglezcampos/rust_syscalls
Evasão de IDS/IPSPós-ExploraçãoRed TeamingDesenvolvimento de Payloads
GitHubjanoglezcampos/rust_syscalls

rust_syscalls

Stub único de chamadas de sistema (syscall) diretas e indiretas com resolução de SSN em tempo de execução para Windows.

Ver Repositório
2403314há 3 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

RUST_SYSCALLS

Stub único para syscalling direto e indireto com resolução de SSN em tempo de execução para Windows.


Recursos:

  • Uma única linha para todas as suas syscalls
  • Hash do nome da função em tempo de compilação
  • Syscalls diretas ou indiretas
  • Suporte nativo a x86_64, WOW64 e x86
  • Projetado para permitir a implementação de métodos personalizados de obtenção de SSN (consulte o final deste readme para mais informações)

Como usar:

  1. Adicione o repositório git / caminho local da biblioteca às suas dependências:

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

    ou

    rust_syscalls = {path = <caminho para a pasta da biblioteca>}

  2. Escolha o método direto ou indireto definindo _DIRECT_ ou _INDIRECT_ como uma feature:

    rust_syscalls = {path = <caminho para a pasta da biblioteca>}, features = ["_INDIRECT_"]}

  3. Importe

    use rust_syscalls::syscall;

  4. Syscall:

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


Exemplo:

    #![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);
    }

Implementando novos métodos de resolução em tempo de execução de SSN e endereços de syscall:

Todo o código necessário para fazer a obtenção de SSN e endereços está incluído no arquivo src\syscall_resolve.rs.

Existe uma função central usada para recuperar os valores chamada get_ssn, com 4 implementações, onde o argumento recebido é o resultado da chamada a crate::obf!(\<nome da sua função\>), e os valores de retorno são o ssn (u16) e, no caso de syscalling indireto, o endereço da instrução syscall/sysenter que você deseja usar.

  • x86_64 direto:

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

  • x86_64 indireto:

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

  • x86 direto:

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

  • x86 indireto:

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

Basta reimplementar essas funções com o método de obtenção desejado.


Agradecimentos ao SysWhispers3 por ser um forte pilar no desenvolvimento desta biblioteca

Baixar ferramenta