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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
LazyHook — 信頼されたMicrosoftコールスタック内で悪意のあるコードを実行して行動分析を回避し、ライブラリのIAT/EATをパッチレスでフッキングします。 | Kitploit
ツール/GitHubGitHub/hwbp/lazyhook
エクスプロイトIDS/IPS回避マルウェア分析学習と教育レッドチーミングアンチボット
GitHubhwbp/lazyhook

LazyHook

信頼されたMicrosoftコールスタック内で悪意のあるコードを実行して行動分析を回避し、ライブラリのIAT/EATをパッチレスでフッキングします。

リポジトリを見る
1482569ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

概要

LazyHookは、ホスト型侵入防止システム(HIPS)をバイパスするステルスAPIフッキングフレームワークで、コールスタックスプーフィングを利用します。CPUレベルのハードウェアブレークポイントとベクタード例外処理(VEH)を活用することで、あたかも信頼されたMicrosoft署名付きモジュールから発信されたかのように任意のコードを実行します。コールスタック検査やモジュール発信元検証に依存する動作解析エンジンを完全に欺きます。

信頼されたMicrosoftコールスタック内で悪意のあるコードを実行して、動作解析を回避する
ハードウェアブレークポイント + VEH を使用して正規の関数を乗っ取り、モジュールの発信元を偽装します

問題:現代のセキュリティソフトウェア

ホスト型侵入防止システム(HIPS)と動作解析エンジンは、以下の方法でアプリケーションを監視します:

  • コールスタック解析:APIコールの発信元とフローを追跡
  • モジュール発信元検証:疑わしい動作が信頼されたモジュールから発生しているかを確認
  • APIパターン認識:悪意のあるシーケンスを検出(例:VirtualAlloc → WriteProcessMemory → CreateRemoteThread)
  • リターンアドレス検証:リターンアドレスが正規のコードセクションを指しているかを確認

Kaspersky System Watcher、Windows Defender、Cylance、CrowdStrikeなどのシステムは、すべてこれらの技術のバリエーションを採用しています。

解決策:信頼されたコールスタックのスプーフィング

Microsoft署名付きアセンブリ(例:System.Windows.Forms.dll、user32.dll)内の関数を乗っ取ることで、完全に正規に見えるコールスタック内で任意のロジックを実行できます。

注:JmpHookを行うことも可能です。MsgBoxをフックし、その直後にカスタムコードを呼び出します。LazyHookはそれを行いません

これが機能する理由:

  1. フックされた関数は、信頼されたデジタル署名付きMicrosoft DLL内にあります
  2. ペイロードが実行されると、コールスタックは信頼されたモジュールを呼び出し元として表示します
  3. ハードウェアブレークポイントはメモリ改変を残さないため、整合性チェックを通過します

セキュリティソフトウェアは2番目のシナリオを見て、こう考えます:「user32.dllのMessageBoxAがWindows APIを呼び出している?それは正常な動作だ。」

仕組み

root@kitploit:~
┌─────────────────────────────────────────────────────────┐
│  1. ターゲット関数の呼び出し                            │
│     ↓                                                    │
│  2. CPUデバッグレジスタがトリガー(DR0-DR3)           │
│     ↓                                                    │
│  3. EXCEPTION_SINGLE_STEP が発生                        │
│     ↓                                                    │
│  4. VEHハンドラーが例外をインターセプト                 │
│     ↓                                                    │
│  5. フック関数へ実行がリダイレクト                       │
│     ↓                                                    │
│  6. CallOriginal() が一時的にブレークポイントを無効化   │
│     ↓                                                    │
│  7. 元の関数が実行される                                │
│     ↓                                                    │
│  8. ブレークポイントが再び有効化される                  │
└─────────────────────────────────────────────────────────┘

フックタイプ

IAT(インポートアドレステーブル)フッキング

インポートされた関数のIAT内のアドレスを特定し、ハードウェアブレークポイントを設定することで関数をインターセプトします。これにより、プロセス内の特定のインポートがフックされます。

root@kitploit:~
HookIAT("user32.dll", "MessageBoxA", HookFunction, &OriginalFunction);

EAT(エクスポートアドレステーブル)フッキング

エクスポートテーブルを介してアドレスを解決することで、DLLからエクスポートされた関数をグローバルにフックします。これは、そのエクスポートへのすべての呼び出しに影響します。

root@kitploit:~
HookEAT("amsi.dll", "AmsiScanBuffer", HookFunction, &OriginalFunction);

Entry.cpp デモ

同梱のデモは、3つの実践的なシナリオを示しています:

1. MessageBoxA IATフック

MessageBoxA呼び出しをインターセプトし、表示メッセージを変更することでIATフッキングを示します:

root@kitploit:~
int WINAPI HookMessageBoxA(HWND H, LPCSTR T, LPCSTR C, UINT U)
{
    printf("[*] MessageBoxA hooked!\n");
    return LazyHook::CallOriginal<int>(LazyHook::GetIatState(), H, "Hooked!", ">:)", U);
}

2. CreateFileA EATフック(コメントアウトされた例)

CreateFileA呼び出しをログ記録することでファイル操作を監視する方法を示します:

root@kitploit:~
HANDLE WINAPI HookCreateFileA(LPCSTR Filename, ...)
{
    printf("[*] CreateFileA hooked: %s\n", Filename);
    return LazyHook::CallOriginal<HANDLE>(...);
}

3. AmsiScanBufferフックによるAMSIバイパス

すべてのAMSIスキャンをクリーンな結果に強制することで、セキュリティソフトウェアのバイパスを示します:

root@kitploit:~
HRESULT WINAPI HookAmsiScanBuffer(...)
{
    printf("[*] AmsiScanBuffer hooked! Bypassing...\n");
    HRESULT OrgResult = LazyHook::CallOriginal<HRESULT>(...);
    (*Result) = AMSI_RESULT_CLEAN;  // Force clean regardless of content
    return OrgResult;
}

デモは、"Invoke-Mimikatz"(既知の悪意のある文字列)をスキャンしてAMSIバイパスをテストし、それがクリーンとして分類されることを示します。

実装の詳細

デバッグレジスタ設定

root@kitploit:~
DR7レイアウト(簡略化):
- ビット0、2、4、6:DR0-DR3の有効化フラグ(ローカル有効化)
- ビット16-31:ブレークポイント条件(実行、書き込み、I/O、読み取り/書き込み)

フレームワークはDR7を次のように設定します:

  • 実行ブレークポイントを有効化(実行条件は00b)
  • ブレークポイント精度を1バイトに設定

ベクタード例外処理

VEHハンドラーは:

  1. 例外がEXCEPTION_SINGLE_STEPであるかを確認
  2. 命令ポインタ(RIP/EIP)を登録済みフックと比較
  3. 一致した場合、フック関数への実行をリダイレクト
  4. EXCEPTION_CONTINUE_EXECUTIONを返してフックで再開

CallOriginalパターン

root@kitploit:~
template<typename Ret, typename... Args>
Ret CallOriginal(VehHookState* State, Args... args)
{
    RemoveHardwareBreakpoint(State->DrIndex);  // Disable temporarily
    Ret Result = ((FuncType)State->OriginalFunction)(args...);
    SetHardwareBreakpoint(State->OriginalFunction, State->DrIndex);  // Re-enable
    return Result;
}

使用例

1. AMSIバイパス

デモは、AmsiScanBufferをフックしてクリーンなスキャン結果を強制することを示しています:

root@kitploit:~
HRESULT WINAPI HookAmsiScanBuffer(...)
{
    HRESULT Result = LazyHook::CallOriginal<HRESULT>(...);
    (*Result) = AMSI_RESULT_CLEAN;  // Force clean result
    return Result;
}

これは、重要なAPI呼び出しをインターセプトすることで、セキュリティソフトウェアの動作を実行時に変更できる方法を示しています。

2. 関数呼び出しの監視

CreateFileAをフックして、アプリケーションの動作を変更せずにファイルアクセスをログ記録します:

root@kitploit:~
HANDLE WINAPI HookCreateFileA(LPCSTR Filename, ...)
{
    printf("File accessed: %s\n", Filename);
    return LazyHook::CallOriginal<HANDLE>(...);
}

責任ある使用と法的通知

このコードは、以下のための高度な回避技術を示しています:

  • セキュリティ研究と教育
  • 認可された環境でのレッドチーム運用
  • マルウェア解析と防御研究

⚠️ 警告:セキュリティ対策のバイパス、ソフトウェアの動作変更、または保護の回避を目的とした不正使用は、コンピュータ詐欺法(CFAA、GDPR、同等の法律)に違反する可能性があります。このフレームワークは、教育および認可されたセキュリティ研究専用に提供されています。


攻撃技術を理解することは、より良い防御を築きます。

ツールをダウンロード