Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Win32_Offensive_Cheatsheet — ペンテスター向けのWin32およびカーネル悪用テクニック | Kitploit
ツール/GitHubGitHub/matthieu-hackwitharts/win32_offensive_cheatsheet
永続化メカニズムエクスプロイトIDS/IPS回避リバースエンジニアリングポストエクスプロイトペネトレーションテストバイナリ解析学習と教育レッドチーミング

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
厳選リソース
ペイロード開発
GitHubmatthieu-hackwitharts/win32_offensive_cheatsheet

Win32_Offensive_Cheatsheet

ペンテスター向けのWin32およびカーネル悪用テクニック

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

Win32 オフェンシブチートシート

ペンテスターとレッドチーマーのための Win32 およびカーネルを悪用するテクニック集。作者: @UVision と @RistBS

開発モード有効、どんな助けでも歓迎です :)

  • Windows バイナリドキュメント
    • PE 構造
    • PE ヘッダー
    • PE の解析
    • エクスポートアドレステーブル (EAT)
    • 関数アドレスの解決
    • インポートアドレステーブル (IAT)
      • IAT の解析
    • インポートルックアップテーブル (ILT)
    • SeDebug 特権を有効にする
  • バイナリの実行
    • クラシックなシェルコード実行
    • DLL の実行
    • RAW ファイルから PE へ
  • コードインジェクション手法
    • CreateRemoteThread インジェクション
    • Process Hollowing
    • APC キュー手法
    • Early Bird
    • Reflective DLL Injection
    • DLL インジェクション
    • Process Doppelganging
    • Fibers
    • CreateThreadPoolWait
    • Thread Hijacking
    • MapView コードインジェクション
    • Module Stomping
    • Function Stomping
  • フッキング手法
    • インラインフッキング
    • IAT フッキング
  • RE 回避手法
    • 呼び出しと文字列の難読化
    • 手動関数解決
    • Win32 API ハッシング
  • EDR/エンドポイントバイパス
    • Direct syscall
    • 高水準言語
    • インラインフックのパッチ
    • フックの検出
    • ETW のパッチ
    • サンドボックス回避
    • デバッグ回避
    • VirtualProtect テクニック
    • Fresh copy unhook
    • Hell's Gate
    • Heaven's Gate
    • PPID スプーフィング
    • Process Instrumentation Callback
    • ヒープ暗号化
    • スリープ難読化
  • ドライバープログラミングの基礎
    • 基本概念
    • システムサービスのディスパッチテーブル (SSDT)
    • ドライバーエントリ
    • 入出力)
    • ドライバーとの通信
    • ドライバー署名 (Microsoft)
    • カスタムコールバック (ObRegisterCallbacks)
  • 攻撃的ドライバープログラミング
    • カーネルコールバックのパッチ
    • 保護されたプロセスのパッチ
  • OPSEC 向上のための Win32 API の使用
    • 永続化
      • スケジュールされたタスク
    • コマンドラインスプーフィング
  • その他
    • x64 呼び出し規約
    • 間接実行
      • SetProcessValidCallTargets による CFG バイパス

  • マルウェア/高度なテクニック
    • Emotet の事例: WMI を使った PPID スプーフィング
    • Zeus マルウェアの隠しファイルテクニック
    • SpyEye キーロガーのフッキングテクニック
    • 最も馬鹿げたマルウェア停止 (WannaCry)

Windows バイナリドキュメント

便利なツールと Web サイト/書籍/チートシート

  • 🔹 https://github.com/RistBS/Awesome-RedTeam-Cheatsheet/ (非常に優れたチートシート)
  • 🔹 https://www.ired.team/ (優れたコードインジェクションのメモがある素晴らしいレッドチームチートシート)
  • 🔹 https://undocumented.ntinternals.net/ (非公開 NT 関数)
  • 🔹 https://docs.microsoft.com/en-us/windows/win32/api/ (Microsoft 公式ドキュメント)
  • 🔹 Windows Kernel Programming - Pavel Yosifovich
  • 🔹 https://research.checkpoint.com/ (回避、アンチデバッグなどに関する非常に興味深いドキュメント)
  • 🔹 https://www.vx-underground.org/ (マルウェア開発とリバースエンジニアリングに関する素晴らしいコンテンツ)

PE 構造

PE ヘッダー

  • DOS_HEADER : PE の最初のヘッダー。MS DOS メッセージ ("This programm cannot be run in DOS mode....")、MZ ヘッダー (PE を識別するマジックバイト)、およびスタブコンテンツを含む。
  • IMAGE_NT_HEADER : PE ファイルシグネチャ、File Header、Optionnal Header を含む。
  • SECTION_TABLE : セクションヘッダーを含む。
  • SECTIONS : ヘッダーではありませんが、知っておくと便利です。これらは PE のセクションです。

詳細 : https://www.researchgate.net/figure/PE-structure-of-normal-executable_fig1_259647266

PE の解析

IAT と ILT の絶対アドレスを取得するための簡単な PE 解析:

  • ベースアドレスの取得 : GetModuleHandleA(NULL);
  • PIMAGE_DOS_HEADER = ベースアドレス、DOS ヘッダー
  • PIMAGE_NT_HEADER = BaseAddress+PIMAGE_DOS_HEADER.e_lfnanew (NT_HEADER の RVA)
  • IMAGE_DATA_DIRECTORY = PIMAGE_NT_HEADER の OptionnalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]
  • IMAGE_IMPORT_DIRECTORY = IMAGE_DATA_DIRECTORY.VirtualAddress (IMAGE_IMPORT_DIRECTORY の RVA)
  • IMAGE_IMPORT_DESCRIPTOR = BaseAddress + IMAGE_IMPORT_DIRECTORY.VirtualAddress (IMAGE_IMPORT_DESCRIPTOR の RVA)
  • IAT 絶対アドレス : IMAGE_IMPORT_DESCRIPTOR.FirstThunk (IAT の RVA) + BaseAddress
  • ILT 絶対アドレス : IMAGE_IMPORT_DESCRIPTOR.OriginalFirstThunk (ILT の RVA) + BaseAddress

エクスポートアドレステーブル (EAT)

EAT は、PE によってエクスポートされるすべての関数を解決し、DLL も解決します。これは IMAGE_EXPORT_DIRECTORY 構造体で定義されています:```c
typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics; DWORD TimeDateStamp; WORD MajorVersion; WORD MinorVersion; DWORD Name; // name of DLL DWORD Base; // first ordinal number DWORD NumberOfFunctions; // number of entries in EAT DWORD NumberOfNames; // number of entries in (1) (2) DWORD AddressOfFunctions; // RVA EAT and contains also RVA of exported functions DWORD AddressOfNames; // Pointer array contains address of function names DWORD AddressOfNameOrdinals; // Pointer array contains address of ordinal number of functions (index in AddressOfFunctions) } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;

EAT は「実際の」PE ではなく、DLL 内で定義されていることに注意してください(PE は、ロードされた DLL の EAT を使用して、使用したい関数へのポインタを解決します)。
 
### 関数アドレスを解決する

**関数アドレスを使用する**

何を待っているのですか?この関数を見つけてください!

**序数を使用する**

序数とは、`AddressOfFunctions` 配列内の対応する関数アドレスへの**インデックス位置**です。これを使用して、**関数の正しいアドレスを取得**できます。例は次のとおりです:

 与えられた序数 3 を使って、対応するアドレス(Addr4)を見つけてみましょう。

 - **AddressOfFunctions** : *Addr1 Addr2 Addr3 Addr4 .... AddrN*
 - **AdressOfNameOrdinals** : *2 5 7 3 ... N*

 探しているアドレスは(0 から数えて)3 番目の位置にあり、序数はこのアドレスの**インデックス**に対応しています。

 **関数名を使用する**

AddressOfNames 配列の N 番目の要素は AddressOfNameOrdinals 配列の N 番目の要素に対応しています。つまり、名前を指定すれば対応する序数を取得でき、その番号を使って関数アドレスを特定できます。

## インポート アドレス テーブル (IAT)

- PE ローダーは、どの関数にどのアドレスが対応するのかを把握していません。そこで、IAT に助けてもらいましょう。
- IMAGE_IMPORT_DIRECTORY 構造体で定義されています:```c
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
    DWORD	Characteristics; 
    DWORD	OriginalFirstThunk;	// RVA to ILT
    DWORD	TimeDateStamp;	
    DWORD	ForwarderChain;
    DWORD	Name; 		        // RVA of imported DLL name
    DWORD	FirstThunk;             // RVA to IAT
} IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;

まとめとして、IATは、読み込まれたDLL(ntdll、kernel32...)からPEによってインポートされるいくつかの関数へのポインタを含むテーブルである。

IATの解析

  1. IATのRVAを取得する
  2. IMPORT_DESCRIPTOR構造体を解析する: Nameメンバーは現在のDLLの名前のRVAである
  3. 実際のDLL名を取得するには: ILT(originalFirstThunk+BaseAddress)内でそれを見つける
  4. 現在のDLLのエクスポート関数を取得するには: PIMAGE_IMPORT_BY_NAME function_name->Name = ImageBase+AdressOfData

詳細なコード例はこちら: https://github.com/matthieu-hackwitharts/Win32_Offensive_Cheatsheet/blob/main/miscellaneous/iat_parser.cpp

Import Lookup Table(インポート参照テーブル)

PEによってインポートされるすべてのDLLは、それぞれ独自のILTを持つ。``` Absolute address of ILT = BaseAddress + OriginalFirstThunk (IAT)

インポートされたDLL内のすべての関数名が含まれています。

<br>


## SeDebug特権を有効にする

**SeDebug** 特権は、Windowsの特権リストすべての中で「最も欲しい」特権です。これにより、認可された任意のプロセスを「デバッグ」でき、```PROCESS_ALL_ACCESS``` 権限を持つハンドルを開くなど、いくつかの攻撃的な操作に変換できます。

ユーザーモードで有効にするには、次のような関数を使用する必要があります。```cpp
void EnableDebugPriv()
{
    HANDLE hToken;
    LUID luid;
    TOKEN_PRIVILEGES tkp;
ツールをダウンロード