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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
SysWhispers3 — SysWhispers on Steroids - 直接システムコールによるAV/EDR回避 | Kitploit
ツール/GitHubGitHub/klezvirus/syswhispers3
防御ツールペイロード生成エクスプロイトシェルコードレッドチーミング
GitHubklezvirus/syswhispers3

SysWhispers3

SysWhispers on Steroids - 直接システムコールによるAV/EDR回避

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

人気

すべて見る →

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

すべてのツールを探索

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

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

SysWhispers3

SysWhispersは、インプラントが直接システムコールを実行できるようにするヘッダー/ASMファイルを生成することで、検知回避を支援します。

公式Discordチャンネル

Discordで交流しましょう!

Inceptorサーバー

なぜSysWhispers2にPRを作成しなかったのか?

SysWhispers3が独立したバージョンである理由は多々ありますが、最も重要な理由は以下の通りです:

  • SysWhispers3はInceptorで使用される実質的な"フォーク"であり、元のツールには関係のないユーティリティクラスを実装しています。
  • SysWhispers2はNASMコンパイル(gcc/mingw向け)のサポートに向かっていますが、本バージョンは特にMSVCでの動作を想定しテストされています(Inceptorは近い将来もWindows専用フレームワークであり続けるため)。
  • SysWhispers3には、エッグハンティングなどの部分的に実装された機能が含まれており、元のバージョンに含めるのは現実的ではありません。

SysWhispers2との違い

使用方法はSysWhispers2とほぼ同じですが、以下の点が異なります:

  • x86/WoW64もサポート
  • EGG(動的に置換される)によるシステムコール命令の置換をサポート
  • x86/x64モードでのシステムコールへの直接ジャンプをサポート(WOW64ではほぼ標準)
  • ランダムなシステムコールへの直接ジャンプをサポート(@ElephantSealのアイデアを借用)

これらの機能の詳細は、ブログ記事SysWhispers is dead, long live SysWhispers!でより詳しく説明されています。

はじめに

AVやEDRなどのセキュリティ製品は、通常、ユーザーモードAPI関数にフックを仕掛け、プログラムの実行フローを分析することで、潜在的に悪意のある活動を検出します。

SysWhispers2は、コアカーネルイメージ(ntoskrnl.exe)内の任意のシステムコールに対してヘッダー/ASMペアを生成し、C/C++コードから直接呼び出してユーザーランドのフックを回避できるように設計されたツールです。

しかし、このツールはシグネチャに含まれる可能性のあるパターンや、実行時に検出可能な動作を生成します。

SysWhispers3はSysWhispers2をベースに構築され、これらの検出方法をバイパスするための便利な機能を統合しています。

インストール

root@kitploit:~
C:\> git clone https://github.com/klezVirus/SysWhispers3.git
C:\> cd SysWhispers3
C:\> python .\syswhispers.py --help

使用法と例

ヘルプには、ツールのすべてのコマンドと機能が表示されます:

root@kitploit:~
C:\>python syswhispers.py -h

usage: syswhispers.py [-h] [-p PRESET] [-a {x86,x64}] [-m {embedded,egg_hunter,jumper,jumper_randomized}] [-f FUNCTIONS] -o OUT_FILE [--int2eh] [--wow64] [-v] [-d]

SysWhispers3 - SysWhispers on steroids

optional arguments:
  -h, --help            show this help message and exit
  -p PRESET, --preset PRESET
                        Preset ("all", "common")
  -a {x86,x64}, --arch {x86,x64}
                        Architecture
  -c {msvc,mingw,all}, --compiler {msvc,mingw,all}
                        Compiler
  -m {embedded,egg_hunter,jumper,jumper_randomized}, --method {embedded,egg_hunter,jumper,jumper_randomized}
                        Syscall recovery method
  -f FUNCTIONS, --functions FUNCTIONS
                        Comma-separated functions
  -o OUT_FILE, --out-file OUT_FILE
                        Output basename (w/o extension)
  --int2eh              Use the old `int 2eh` instruction in place of `syscall`
  --wow64               Use Wow64 to run x86 on x64 (only usable with x86 architecture)
  -v, --verbose         Enable debug output
  -d, --debug           Enable syscall debug (insert software breakpoint)

コマンドライン

標準SysWhispers、組み込みシステムコール(x64)

root@kitploit:~
# Export all functions with compatibility for all supported Windows versions (see example-output/).
py .\syswhispers.py --preset all -o syscalls_all

# Export just the common functions (see below for list).
py .\syswhispers.py --preset common -o syscalls_common

# Export NtProtectVirtualMemory and NtWriteVirtualMemory with compatibility for all versions.
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem

SysWhispers3専用サンプル

root@kitploit:~
# Normal SysWhispers, 32-bits mode
py .\syswhispers.py --preset all -o syscalls_all -m jumper --arch x86

# Normal SysWhispers, using WOW64 in 32-bits mode (only specific functions)
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem --arch x86 --wow64

# Egg-Hunting SysWhispers, to bypass the "mark of the sycall" (common function)
py .\syswhispers.py --preset common -o syscalls_common -m egg_hunter

# Jumping/Jumping Randomized SysWhispers, to bypass dynamic RIP validation (all functions) using MinGW as the compiler
py .\syswhispers.py --preset all -o syscalls_all -m jumper -c mingw


スクリプト出力

root@kitploit:~
PS C:\Projects\SysWhispers2> py .\syswhispers.py --preset common --out-file temp\syscalls_common -v 
                                                       
                  .                         ,--.
,-. . . ,-. . , , |-. o ,-. ,-. ,-. ,-. ,-.  __/
`-. | | `-. |/|/  | | | `-. | | |-' |   `-. .  \
`-' `-| `-' ' '   ' ' ' `-' |-' `-' '   `-'  '''
     /|                     |  @Jackson_T
    `-'                     '  @modexpblog, 2021

                      Edits by @klezVirus,  2022
SysWhispers3: Why call the kernel when you can whisper?


Common functions selected.

Complete! Files written to:
        temp\syscalls_common.h
        temp\syscalls_common.c
        temp\syscalls_common_.asm
Press a key to continue...

Visual Studioへのインポート

  1. 生成されたH/C/ASMファイルをプロジェクトフォルダにコピーします。
  2. Visual Studioで、プロジェクト → ビルドカスタマイズ... に進み、MASMを有効にします。
  3. ソリューションエクスプローラーで、.hファイルと.c/.asmファイルをそれぞれヘッダーファイルおよびソースファイルとしてプロジェクトに追加します。
  4. ASMファイルのプロパティに移動し、アイテムタイプをMicrosoft マクロアセンブラーに設定します。

Visual Studio以外でのコンパイル

Windows

64ビット用Makefile:

Makefile.msvc

root@kitploit:~
OPTIONS = -Zp8 -c -nologo -Gy -Os -O1 -GR- -EHa -Oi -GS-
LIBS = libvcruntime.lib libcmt.lib ucrt.lib kernel32.lib

program:
  ML64 /c syscalls-asm.x64.asm /link /NODEFAULTLIB /RELEASE /MACHINE:X64
  cl.exe $(OPTIONS) syscalls.c  program.c
  link.exe /OUT:program.x64.exe -nologo $(LIBS) /MACHINE:X64 -subsystem:console -nodefaultlib syscalls-asm.x64.obj syscalls.obj program.obj

32ビット用Makefile:

Makefile.msvc

root@kitploit:~
OPTIONS = -Zp8 -c -nologo -Gy -Os -O1 -GR- -EHa -Oi -GS-
LIBS = libvcruntime.lib libcmt.lib ucrt.lib kernel32.lib

program:
  ML /c syscalls-asm.x86.asm /link /NODEFAULTLIB /RELEASE /MACHINE:X86
  cl.exe $(OPTIONS) syscalls.c  program.c
  link.exe /OUT:program.x86.exe -nologo $(LIBS) /MACHINE:X86 -subsystem:console -nodefaultlib syscalls-asm.x86.obj syscalls.obj program.obj

nmakeでコンパイル:

root@kitploit:~
nmake -f Makefile.msvc

Linux

64ビットおよび32ビット両方用Makefile:

Makefile.mingw

root@kitploit:~
CC_x64 := x86_64-w64-mingw32-gcc
CC_x86 := i686-w64-mingw32-gcc
OPTIONS := -masm=intel -Wall

program:
  $(CC_x64) syscalls.c program.c -o program.x64.exe $(OPTIONS)
  $(CC_x86) syscalls.c program.c -o program.x86.exe $(OPTIONS)

makeでコンパイル:

root@kitploit:~
make -f Makefile.mingw

注意点と制限事項

  • エッグハンター機能はこのツール内には実装されておらず、Inceptorにあります。
  • グラフィックサブシステム(win32k.sys)のシステムコールはサポートされていません。
  • Visual Studio 2019/2022とWindows 10 SDKでテスト済み。
  • NASMのサポートは保証されていません。
  • GCCおよびMinGWのサポートは保証されていません。

トラブルシューティング

SysWhispers2から

  • 型の再定義エラー: syscalls.h内のtypedefがすでに定義されている場合、プロジェクトがコンパイルできないことがあります。
    • 必要な関数のみを含めるようにしてください(つまり、--preset allはほとんど必要ありません)。
    • 別の使用済みヘッダーですでにtypedefが定義されている場合は、syscalls.hから削除できます。

新機能

  • --verboseを使用すると、コード生成中にトラブルシューティング出力を有効にできます。
  • --debugを使用すると、ツールはシステムコールスタブにソフトウェアブレークポイントを挿入し、WinDbgでのデバッグを容易にします。
  • コンパイル中にerror A2084:constant value too largeが表示される場合は、スタブを再生成してください。

クレジット

SysWhispers2

@Jackson_Tと@modexpblogによって開発されましたが、他の多くの方々の成果に基づいています:

  • @FoxHex0ne - 多くの関数プロトタイプとtypedefを機械可読形式でカタログ化。
  • @PetrBenes、NTInternals.netチーム、およびMSDN - 追加のプロトタイプとtypedef。
  • @Cn33liz - 初期のDumpertPOC実装。

SysWhispers2 (x86/WOW64)

  • @rooster - x86/WOW64互換のフォークを作成。

その他

  • @ElephantSe4l - システムコールへのジャンプをランダム化するアイデア。
  • @S4ntiagoP - nanodumpにおける素晴らしい成果。多くのアイデアを得ました。

ライセンス

本プロジェクトもオリジナルと同様、Apache License 2.0の下でライセンスされています。

ツールをダウンロード