Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
rust_syscalls — Одиночный стаб для прямых и непрямых syscall-вызовов с резолвингом SSN (System Service Number) в рантайме для Windows. | Kitploit
Инструменты/GitHubGitHub/janoglezcampos/rust_syscalls
Обход IDS/IPSПост-эксплуатацияRed TeamingРазработка Полезной Нагрузки
GitHubjanoglezcampos/rust_syscalls

rust_syscalls

Одиночный стаб для прямых и непрямых syscall-вызовов с резолвингом SSN (System Service Number) в рантайме для Windows.

Репозиторий
2403333 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

RUST_SYSCALLS

Прямые и косвенные системные вызовы с единой заглушкой и разрешением SSN во время выполнения для Windows.


Возможности:

  • Одна строка для всех ваших системных вызовов
  • Хеширование имени функции на этапе компиляции
  • Прямые или косвенные системные вызовы
  • Поддержка x86_64, WOW64 и нативного x86
  • Разработан для возможности реализации собственных методов получения SSN (см. конец этого readme для подробной информации)

Как использовать:

  1. Добавьте git-репозиторий или локальный путь к библиотеке в свои зависимости:

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

    или

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

  2. Выберите прямой или косвенный метод, установив _DIRECT_ или _INDIRECT_ в качестве фичи:

rust_syscalls = {path = <path to library folder>}, features = ["_INDIRECT_"]}
  • Импортируйте

    use rust_syscalls::syscall;

  • Системный вызов:

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


  • Пример:

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

    Реализация собственных методов разрешения SSN и адресов системных вызовов во время выполнения:

    Весь код, необходимый для получения SSN и адресов, находится в файле src\syscall_resolve.rs.

    Есть одна ключевая функция для получения значений, называемая get_ssn, с 4 реализациями, где принимаемый аргумент является результатом вызова crate::obf!(\<your function name\>), а возвращаемые значения — это ssn (u16) и, в случае косвенного системного вызова, адрес инструкции syscall/sysenter, которую вы хотите использовать.

    • x86_64 (прямой):

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

    • x86_64 (косвенный):

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

    • x86 (прямой):

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

    • x86 (косвенный):

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

    Просто переопределите эти функции с помощью желаемого метода получения.


    Спасибо SysWhispers3 за то, что он был надёжной опорой в разработке этой библиотеки

    Скачать инструмент