Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
rust_syscalls — Windows向けに、ランタイムSSN解決を備えたシングルスタブによる直接的・間接的なシステムコーリング。 | Kitploit
ツール/GitHubGitHub/janoglezcampos/rust_syscalls
IDS/IPS回避ポストエクスプロイトレッドチーミングペイロード開発
GitHubjanoglezcampos/rust_syscalls

rust_syscalls

Windows向けに、ランタイムSSN解決を備えたシングルスタブによる直接的・間接的なシステムコーリング。

リポジトリを見る
2403343年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

RUST_SYSCALLS

ランタイムSSN解決を備えたWindows向けの、シングルスタブによる直接・間接syscall。


特徴:

  • すべてのsyscallを1行で実行可能
  • コンパイル時に関数名をハッシュ化
  • 直接または間接syscall
  • 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_"]}

  3. インポート

use rust_syscalls::syscall;

  • 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およびsyscallアドレスのランタイム解決メソッドの実装:

    SSNとアドレス取得に必要なコードはすべて、ファイルsrc\syscall_resolve.rsに含まれています。

    値の取得に使用される中心的な関数はget_ssnで、4つの実装があります。受け取る引数はcrate::obf!(\<your function name\>)を呼び出した結果で、戻り値はSSN (u16)、および間接syscallの場合には使用したい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 に感謝します。このライブラリの開発において大きな柱となってくれました。

    ツールをダウンロード