Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
rust_syscalls — Windows용 단일 스텁 직접 및 간접 시스템 콜(Syscall) 호출과 런타임 SSN 해석 | Kitploit
도구/GitHubGitHub/janoglezcampos/rust_syscalls
IDS/IPS EvasionPost-ExploitationRed TeamingPayload Development
GitHubjanoglezcampos/rust_syscalls

rust_syscalls

Windows용 단일 스텁 직접 및 간접 시스템 콜(Syscall) 호출과 런타임 SSN 해석

저장소 보기
2403343년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

RUST_SYSCALLS

Windows용 런타임 SSN 해석을 지원하는 단일 스텁 직접/간접 시스템 콜.


Features:

  • 모든 시스템 콜에 대해 한 줄이면 충분합니다
  • 컴파일 타임에 함수 이름 해싱
  • 직접 또는 간접 시스템 콜
  • x86_64, WOW64 및 x86 네이티브 지원
  • 사용자 정의 SSN 가져오기 방식 구현을 허용하도록 설계됨 (자세한 내용은 이 README의 끝부분을 확인하세요)

사용 방법:

  1. 라이브러리의 git 저장소 / 로컬 경로를 dependencies에 추가하세요:

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

    또는

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

  2. _DIRECT_ 또는 _INDIRECT_를 feature로 설정하여 직접 또는 간접 방식을 선택하세요:

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

  • 가져오기(import)

    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에게 감사드립니다.

    도구 다운로드