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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Obfusk8 — Obfusk8: C++17 ベースの軽量難読化ライブラリ / Windows バイナリ向け Header Only | Kitploit
ツール/GitHubGitHub/x86byte/obfusk8
エクスプロイトフレームワークリバースエンジニアリングシェルコード暗号化ペネトレーションテストレッドチーミングペイロード開発
GitHubx86byte/obfusk8

Obfusk8

Obfusk8: C++17 ベースの軽量難読化ライブラリ / Windows バイナリ向け Header Only

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

人気

すべて見る →

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

すべてのツールを探索

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

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

Obfusk8: C++17ベースの難読化ライブラリ

Obfusk8 は、アプリケーションの難読化を大幅に強化し、リバースエンジニアリングをはるかに困難にすることを目的とした、軽量なヘッダオンリーのC++17ライブラリです。これは、コードのロジックとデータを保護することを目的とした、コンパイル時および実行時の多様なテクニックを通じて実現されます。

banner


目次

  1. 主要な難読化戦略
  2. 依存関係
  3. 可視化
  4. エンジン分析と検出プロファイル
  5. 構造的およびフォレンジック的特徴
  6. 使用方法
  7. ビルド
  8. デモ
  9. コントリビューションとフィードバック

主要な難読化戦略

1. main 関数のラッピング(_main マクロ)

アプリケーションのエントリポイント(main)は、複雑で多層的な難読化エンジンに変換されます:

  • 仮想マシン(VM)実行(概念):実際の main_body コードが実行される前に、ミニVM(シミュレートされたCPU)が「暗号化された」命令のシーケンスを実行します。これにより、真のエントリポイントと初期操作が隠蔽されます。VMの状態(レジスタ、プログラムカウンタ、ディスパッチキー)は、ランタイムでランダム化された値で初期化されます。
  • 間接制御フロー平坦化(ICFF):_main マクロ内の重要なループ(プロローグとエピローグの両方)は、複雑なステートマシンに変換されます。制御フローは直接的なものではなく、高度に「暗号化された」状態変数によって決定されます。これらの状態変数のエンコード/デコードキーは動的であり、VM状態、ループカウンタ、コンパイル時ランダム性(__COUNTER__、__LINE__、__TIME__ など)、およびグローバルな不透明シードから導出されます。これにより、制御フローの静的解析が非常に困難になります。
    • 2つの異なるICFFエンジン(obf_icff_ns_dcff と obf_icff_ns_epd)が、異なる状態遷移ロジックとキー生成で使用され、解析をさらに複雑にします。
  • 偽の制御フロー(OBF_BOGUS_FLOW_* マクロ):多数の誤解を招くジャンプパターンと入り組んだ条件構造が _main 全体に注入されます。これらは、不透明述語(常にtrueまたはfalseに評価されるが、計算コストが高いか静的に判断することが難しい条件)と組み合わせた goto 文を使用します。これにより、逆アセンブラや逆コンパイラにとって迷路のような偽のパスが作成されます。
    • 多様で複雑な偽フローを生成するために、OBF_BOGUS_FLOW_LABYRINTH、OBF_BOGUS_FLOW_GRID、OBF_BOGUS_FLOW_SCRAMBLE、OBF_BOGUS_FLOW_WEAVER、OBF_BOGUS_FLOW_CASCADE、OBF_BOGUS_FLOW_CYCLONE が含まれます。
  • 解析対策&デバッグ対策のトリック(Runtime マクロ、SEH):
    • 強制例外&SEH:構造化例外処理(SEH)を使用して、強制例外を伴うパスを作成します。__except ブロックはプログラムの状態を変更できるため、デバッガが例外をスキップすると追跡が困難になります。
    • デバッガチェック(概念):Runtime マクロには、特定のVM状態またはタイミングによって条件が満たされた場合に __debugbreak() をトリガーしたり例外をスローしたりする可能性のある条件が含まれており、デバッグセッションを妨害するように設計されています。

2. 仮想ISAエンジン(obf_vm_engine)

_main マクロの難読化の核心コンポーネント:

  • カスタムミニCPUシミュレーション:揮発性レジスタ(r0、r1、r2)、プログラムカウンタ(pc)、ディスパッチキー(dispatch_key)を持つCPUをシミュレートします。カスタム「命令」(ハンドラ)を実行します。
  • 難読化された命令:VM命令ハンドラは、Mixed Boolean-Arithmetic(MBA)とビット演算を使用して高度に偽装された操作を実行します。ハンドラには、算術演算、ビット論理演算、キー改変、ジャンクシーケンス、条件付き更新、メモリシミュレーション、PC改変が含まれます。
  • 動的ディスパッチ:次のVM命令ハンドラの選択は、複数のディスパッチメカニズムを通じてランダム化されます:
    • レジスタベースのディスパッチ(reg_dispatch_idx)。
    • メモリテーブルベースのディスパッチ(スクランブルされた関数ポインタテーブル get_mem_dispatch_table)。
    • 混合ディスパッチ(mixed_dispatch_idx)。 dispatch_key は常に変更され、実行されるハンドラのシーケンスを非常に予測不能にします。
  • ハンドラテーブルの変異:VM命令ハンドラのテーブル(vm_handler_table)自体が、_main のプロローグとエピローグ内でランタイムに変異し、VMの動作をさらに不明瞭にします。

3. コンパイル時文字列暗号化(AES8.hpp の OBFUSCATE_STRING)

  • 隠された文字列:変更されたAES暗号を使用して、すべての文字列リテラルをコンパイル時に暗号化します。
  • 動的キー:暗号化キーは文字列インスタンスごとに一意であり、文字列コンテンツ、ファイル位置(__FILE__、__LINE__)、ビルド時刻(__DATE__、__TIME__)から導出されます。
  • ジャストインタイム復号:文字列は、実行時にアクセスされたときだけスタック上で復号され、メモリ内の平文の寿命を最小限に抑えます。
  • (オプション)デコイPEセクション:一般的なパッカーシグネチャを模倣するように設計されたカスタムPEセクションに暗号化文字列を格納でき、アナリストを誤誘導する可能性があります(AES8.hpp のMSVC固有機能)。

4. ステルスなWindows API呼び出し(Resolve8.hpp の STEALTH_API_OBFSTR / STEALTH_API_OBF)

  • IATの不明瞭化:インポートアドレステーブル(IAT)にWindows APIの直接で識別しやすいエントリを残しません。
  • PEBベースの解決:実行時にProcess Environment Block(PEB)データ構造を直接解析することにより、ロードされたDLLのベースアドレスとAPI関数のアドレスを動的に見つけます。これにより、標準の GetModuleHandle と GetProcAddress がこのメカニズムによってまだ解決されていない場合、それらをバイパスして初期解決を行います。
  • ハッシュ化された名前:DLL名とAPI名のルックアップにコンパイル時ハッシュ(カスタムアルゴリズム CT_HASH)を使用します。これにより、これらのマクロを使用する際に、バイナリのインポート関連データや文字列テーブルに平文のDLL名とAPI名が出現するのを防ぎます。

5. 間接システムコールエンジン(K8_SYSCALL)

Obfusk8は現在、ユーザーモードフック(EDR/AV)と静的解析チェックをバイパスするための最先端のIndirect Syscallメカニズムを統合しています。

  • 「The Sorting Hat」方式の解決:しばしばフックまたは監視されている ntdll.dll の .text セクションを読み取る代わりに、エンジンはエクスポートディレクトリを解析します。Zw で始まる関数をフィルタリングし、メモリアドレス順にソートして、そのインデックスに基づいてシステムコール番号(SSN)を推定します。これにより、実行可能コードに一切触れることなくSSNを解決できます。
  • ラテラルガジェット実行:エンジンは自身のバイナリ内に syscall (0F 05) 命令を含みません。代わりに、実行時に ntdll.dll メモリ内の有効な syscall; ret ガジェットを特定します。 クリーンなコールスタック:ntdllガジェットにジャンプするカスタムサンクが割り当てられます。OSカーネルとセキュリティセンサーにとって、システムコールは ntdll.dll から正当に発信されているように見え、クリーンなコールスタックが維持されます。
  • 使用方法: NtOpenProcess の代わりに K8_SYSCALL("ZwOpenProcess", ...) を単に使用してください。

6. メソッドベースの難読化(OBF_METHOD)

Obfusk8は現在、メソッドベースの難読化を通じて、バイナリのセキュリティを細かく制御できます。プロジェクト全体を難読化する(パフォーマンスに影響を与える可能性がある)代わりに、特定の価値の高い関数やクラスメソッドを選択的に保護できるようになりました。


使用方法

  1. パスをインクルードする
    メソッド難読化ロジックをプロジェクトに含めるようにしてください: ```cpp #include "../transform/PASSES/obf_cmethods.cxx"
    root@kitploit:~
  2. マクロ構文
    OBF_METHOD マクロを使用してメソッドを定義します: ```cpp OBF_METHOD(ret_type, func_name, params, method_body)
    root@kitploit:~
  • ret_type: 関数の戻り値の型(例:bool, int, void*)。
  • func_name: メソッドの名前。
  • params: 関数のパラメータ(括弧で囲む必要があります)。
  • method_body: { } で囲まれた関数の実際のロジック。

例:標準メソッド vs 難読化メソッド

この例では、PrintStatus は通常の読み取り可能な関数です。Obfusk8_PrintStatus は Obfusk8 によって保護されています。```cpp #include "../Instrumentation/materialization/state/Obfusk8Core.hpp" #include "../Instrumentation/materialization/transform/K8_UTILS/k8_utils.hpp" // for the printf_, u can change the printf_ with anything else...

class Obfusk8_C { public: // standard method which is visible to reverse engineers void PrintStatus(void) { printf_("method\n"); }

root@kitploit:~
// Obfuscated method protected by Obfusk8
OBF_METHOD_(void, Obfusk8_PrintStatus, (void),
{
    printf_("same method but Obfuscated\n");
})

};

_main({ Obfusk8_C *pp = new Obfusk8_C; pp->PrintStatus(); pp->Obfusk8_PrintStatus(); delete pp; })

root@kitploit:~
*完全な例はこちらで確認できます:[obfusk8_methods.cpp](https://github.com/x86byte/Obfusk8/blob/main/Obfusk8/EXAMPLES/obfusk8_methods.cpp)*

---
### 6. 組み込みステルス機能を備えたAPI抽象化クラス
Obfusk8は、一般的なWindows APIセットをカプセル化するヘルパークラスを提供します。これらのクラスは、構築時にステルスAPI解決メカニズム(`STEALTH_API_OBFSTR`)を自動的に使用し、明らかな静的インポート痕跡を残さずに基盤となるWindows関数を解決します。

   - **`K8_ProcessManipulationAPIs::ProcessAPI` (`k8_ProcessManipulationAPIs.hpp`)**:
     *   `OpenProcess`、`TerminateProcess`、`CreateRemoteThread`、`VirtualAllocEx`、`WriteProcessMemory`、`ReadProcessMemory`、`GetProcAddress`、`GetModuleHandleA`、`NtQueryInformationProcess`、`SuspendThread`、`GetCurrentProcessId` など、プロセス操作のためのWindows APIへの便利なアクセスを提供します。
     *   **自動ステルス解決**: `kernel32.dll` と `ntdll.dll` から必要な関数をステルスに解決します。
     *   静的解析のフットプリントを減らしてプロセス関連の操作を簡素化します。`NtQueryInformationProcess` で使用する `PROCESSINFOCLASS` 列挙型を含みます。

   - **`k8_CryptographyAPIs::CryptographyAPI` (`k8_CryptographyAPIs.hpp`)**:
     *   一般的なWindows Cryptography API(CAPI/CNG)関数のラッパーを提供します。(機能はこのファイルの実際の実装に依存します。提供されたスニペットは重複していました。`CryptAcquireContextA`、`CryptCreateHash` などの一般的なCAPI関数を想定しています。)
     *   **自動ステルス解決**: 主に `advapi32.dll`(コア関数には `kernel32.dll`)から必要な関数をステルスに解決します。
     *   暗号化APIの使用の露出を最小限に抑えながら、暗号操作を容易にします。

   - **`k8_NetworkingAPIs::NetworkingAPI` (`k8_NetworkingAPIs.hpp`)**:
     *   `wininet.dll`(例:`InternetOpenA`、`HttpOpenRequestA`、`FtpPutFileA`)、`urlmon.dll`(例:`URLDownloadToFileA`)、`ws2_32.dll`(例:`socket`、`connect`、`WSAStartup`)、`shell32.dll`(例:`ShellExecuteA`)、`dnsapi.dll`(例:`DnsQuery_A`)、`mpr.dll`(例:`WNetOpenEnumA`)など、幅広いネットワーク関数への簡単なアクセスを提供します。
     *   **自動ステルス解決**: コンストラクタで `STEALTH_API_OBFSTR` と `OBFUSCATE_STRING` を使用して、それぞれのDLL(`LoadLibraryA`/`GetLastError` には `kernel32.dll`)から必要なすべての関数を、明らかなインポート痕跡を残さずに解決します。
     *   難読化されたネットワークリクエストの作成やその他のネットワーク関連タスクを簡素化します。

   - **`RegistryAPIs::RegistryAPI` (`k8_RegistryAPIs.hpp`)**:
     *   `RegSetValueExA`、`RegCreateKeyExA`、`RegOpenKeyExA`、`RegQueryValueExA`、`RegCloseKey` など、一般的に使用されるWindowsレジストリ関数をラップします。
     *   **自動ステルス解決**: 構築中に `advapi32.dll`(および `kernel32.dll`)から関数をステルスに解決します。
     *   追跡されにくいAPI呼び出しでレジストリ操作を実行するのに役立ちます。

### 7. コア難読化プリミティブ(`Obfusk8Core.hpp` のマクロ)
これらは、ライブラリ全体、特に `_main` マクロとVMエンジンで広く使用されるビルディングブロックです:
*   **混合ブール演算(MBA)**: 単純な数学的・論理的操作(ADD、SUB、XOR、NOT、MUL)を、複雑であるが同等のビット演算と算術式のシーケンス(例:`OBF_MBA_ADD`、`OBF_MBA_XOR`)に変換します。これらは、デコンパイラが元の形式に単純化し直すことを非常に困難にするように設計されています。
*   **オペーク述語(Opaque Predicates)**: 条件が常に真(例:`OBF_OPAQUE_PREDICATE_TRUE_1`)または常に偽(例:`OBF_OPAQUE_PREDICATE_FALSE_1`)と評価される条件分岐を挿入します。これらの条件は、`__COUNTER__`、`__LINE__`、`__TIME__`、`_obf_global_opaque_seed` を含む複雑で静的に評価しにくい式から構築されます。誤解を招くコードパスを作成し、デッドコードのガードや特定の実行フローの強制に使用できます。
*   **ジャンクコード注入**:
    *   `OBF_CALL_ANY_LOCAL_JUNK`: `obf_junk_ns` で定義された多数の小さなランダム化ジャンク関数のうちの1つを呼び出します。これらの関数は些細で揮発性の操作を実行し、コンパイル時にランダムに選択されます。その目的は、コードのエントロピーを高め、単純なコードパターンを断片化し、シグネチャベースの検出や解析ツールを誤誘導する可能性があることです。
    *   `NOP()`: オプティマイザによる簡単な削除を防ぎ、グローバルシードを微妙に変更するように設計された揮発性操作を挿入するマクロです。
*   **アンチ逆アセンブル&アンチ解析テクニック**:
    *   **難読化ジャンプ(`OBF_JUMP_*` マクロ)**: 条件やターゲットが難読化された `goto` 文を作成します。多くの場合、オペーク述語やMBAに依存します。
    *   **難読化状態遷移(`OBF_SET_NEXT_STATE_*` マクロ)**: ICFFで使用され、難読化ジャンプと同様の難読化テクニックを使用して、フラット化された制御フローディスパッチャの次の状態変数を設定します。
    *   **スタック操作(`OBF_STACK_ALLOC_MANIP`、`OBF_FAKE_PROLOGUE_MANIP`)**: スタック上に可変サイズのチャンクを割り当て、それらに対して偽の操作を実行します。偽プロローグはスタック解析を混乱させようとします。
    *   **難読化関数呼び出し(`OBF_CALL_VIA_OBF_PTR`)**: 関数ポインタは使用前後に動的キーでXORされ、実際の呼び出しターゲットを不明瞭にします。
    *   `K8_ASSUME(0)`: デッドコードパスで使用され、MSVCコンパイラにこれらのパスが到達不能であることをヒントとして伝え、パッチによって仮定が破られた場合に解析をさらに混乱させる可能性のある異なる最適化やコード生成を可能にします。

### 依存関係

Obfusk8ライブラリはモジュール式です。中核機能は以下に依存します:

- `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp`: (このファイル)主要な難読化マクロとプリミティブを統括・提供する中心的なヘッダーです。
- `Obfusk8/Instrumentation/materialization/transform/AES8.hpp`: AESベースのコンパイル時文字列暗号化とオプションのPEセクション操作機能を提供します。
- `Obfusk8/Instrumentation/materialization/transform/Resolve8.hpp`: PEBベースのステルスWindows API解決を実装します。
* `Obfusk8/Instrumentation/materialization/transform/k8_indsys.hpp`: **間接システムコールエンジン(Indirect Syscall Engine)** を統括します。遷移スタブのライフサイクルを管理し、横方向のメモリガジェットを通じてシステムコールを実行するためのインターフェースを提供します。
* `Obfusk8/Instrumentation/materialization/transform/getpeb8.hpp`: 初期ブートストラップと **PEBディスカバリ** を容易にします。カスタムハッシュロジック、ネイティブ構造体定義、SSN推定のための「ソーティングハット」アルゴリズムを含みます。すべてのモジュール列挙タスクの低レベル基盤として機能します。
オプションのヘルパーAPIクラスは、通常サブディレクトリにある別々のヘッダーで提供されます:
- `k8_ProcessManipulationAPIs/k8_ProcessManipulationAPIs.hpp`: ステルスなプロセス操作API用。
- `k8_CryptographyAPIs/k8_CryptographyAPIs.hpp`: ステルスな暗号化API用。
- `k8_NetworkingAPIs/k8_NetworkingAPIs.hpp`: ステルスなネットワークAPI用。
- `k8_RegistryAPIs/k8_RegistryAPIs.hpp`: ステルスなレジストリAPI用。

### 可視化

  *   **ida graph**:
    
      ![image](https://assets.kitploit.com/production/public/readmes/8984/3e59704c1c37835ddc2e47faf69914ba1fb63943fcd37a983f5690bcc4b4e373.png)
     
  *   **ida pro の一部のチャンク**:
    
      ![image](https://assets.kitploit.com/production/public/readmes/8984/5c24307f490de40a07f88ca20821999c19912088d3047ca9446a84dfda2d0ec7.png)
      ![image](https://assets.kitploit.com/production/public/readmes/8984/edd0c5deae9d9d69006ca4bb1cd0cc0d2ba3e9794ac242460028fe438388c338.png)
      ![image](https://assets.kitploit.com/production/public/readmes/8984/341057315e4d3ea12c920df05ce3e6bcd13ecbc86386ffc3265e80b34f3bdcee.png)
    
  *   **Detect It Easy のシグネチャ検出結果**:
    
      ![image](https://assets.kitploit.com/production/public/readmes/8984/007b2a1139fc33a9ff82675e10c8fe99f6be7b1d012ce773a5b7464db6b299ab.png)

  *   **virustotal のクラウドソースYARAルール**:

      ![yararules](https://assets.kitploit.com/production/public/readmes/8984/b168f882e1f945399908ab0cf4638a151e6991f98ec03460d305c1eca0b482cd.png)


  *   **メモリマップ(DIE より)**:

      ![map](https://assets.kitploit.com/production/public/readmes/8984/75d11fce1656cc1944251d0e46f14c88ed9b8684acf5d1230c53f4d7385aaaf8.png)
  
  *   **セクション**:

      ![sections](https://assets.kitploit.com/production/public/readmes/8984/bdb9bef4c155c4af8a73656ab5bdba533cf3283b7b729d9fa42fbb125e208978.png)

  *   **バインドされたファイル**:

      ![bfiles](https://assets.kitploit.com/production/public/readmes/8984/fe8cf0d963706cdd0fc532144e0e9b118daad7f3ca6d53705b4691b5f8c0aba2.png)

### エンジン解析と検出プロファイル

Obfusk8は、静的シグネチャベースの検出エンジンのバイパスを優先するように設計されています。業界標準ベンダーに対するテストでは、コア難読化ロジックが主要なセキュリティ製品に検出されないことが示されています:

*   **Microsoft Defender**: 未検出
*   **Kaspersky**: 未検出
*   **ESET-NOD32**: 未検出
*   **BitDefender**: 未検出

静的シグネチャはバイパスされますが、一部の次世代AVやEDR(CrowdStrikeやSymantecなど)は、「疑わしい」または「高信頼性の悪意のある」とラベル付けされたヒューリスティックフラグを生成する可能性があります。これらの検出は通常、特定可能な悪意のあるコードではなく、高いアーキテクチャの複雑さとカスタムPEセクションの存在によって引き起こされます。

### 構造的・フォレンジック特性

*   **エントロピー管理**: 現在の実装では、全体のエントロピーは約6.2です。これは、ロジックを不明瞭にするのに十分高く、7.0を超えるエントロピーレベルによって引き起こされる一般的な「パックされたファイル」アラートを回避するのに十分低くなるように意図的にバランスが取られています。
*   **セクションのカスタマイズ**: デフォルト構成には23個のPEセクションが含まれており、その一部は既知の商用プロテクターを模倣するためにデコイ名(例:`.themida`、`.vmp0`、`.enigma2`)を使用しています。 
    *   **ヒューリスティック最適化**: 疑わしさのスコアをさらに減らすために、ユーザーはこれらのセクションを汎用的な文字列(例:`.data_01`、`.rdata_aux`)に名前を変更できます。セクション名を標準化すると、ヒューリスティックな「一意性」スコアが低下することが多く、バイナリが従来のコンパイル済みアプリケーションのように見えます。
*   **インポート難読化**: このライブラリは、重要なWindows APIのインポートアドレステーブル(IAT)フットプリントを排除することに成功します。解決にプロセス環境ブロック(PEB)と間接システムコールエンジンを利用することで、バイナリはクリーンなコールスタックを維持し、動作モニターがシステムコールを保護されたコード領域まで追跡するのを防ぎます。
     - **簡単な説明**:
        *   **SSN推定**: ntdll.dll の命令ストリームに配置されることが多いユーザーモードフックをバイパスするために、エンジンは相対ソートアルゴリズムを利用します。エクスポートディレクトリを解析し、すべてのZw接頭辞付き関数をメモリアドレスでソートすることにより、エンジンは相対インデックスに基づいてシステムサービス番号(SSN)を推定します。これにより、フレームワークは関数プロローグのフックされたバイトを読み取ることなく、正しいシステムコールインデックスを識別できます。
動的システムコールスタブ: ユーザーランドバイナリ内で静的システムコール命令を利用する代わりに、ライブラリは一時的な遷移スタブをホストするために実行可能メモリを動的に割り当てます。エンジンはこれらのスタブにカスタムシェルコードシーケンス(`mov r10, rcx; mov eax, ssnnumber; syscall; ret`)を入力して、システムコールを間接的に実行します。
        *   **チェーンブートストラップ**: 解決プロセスは自己ブートストラップ方式です。エンジンは初期解決呼び出しを使用して、後続の間接システムコールの環境を確立します。これにより、モジュール列挙から関数実行までのプロセスライフサイクル全体が動作モニターに対して不透明なままとなり、クリーンなコールスタックが維持されます。
*   **アンチフォレンジック**: 混合ブール演算(MBA)と多層仮想命令セットアーキテクチャ(V-ISA)の使用により、メモリダンプが取得された場合でも、基盤となるロジックを自動化された逆難読化ツールで再構築することは簡単ではありません。

### 使用方法

1.  メインプロジェクトファイル(例:`main.cpp`)に `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp` をインクルードします。
    ```cpp
    #include "Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp" // Adjust path as needed
    ```
2.  `main` 関数の本体を `_main` でラップします:
    ```cpp
    _main({
        // Your application's original main code here
        // Example:
        // OBFUSCATE_STRING("Hello, Obfuscated World!").c_str();
        
        // Using an API wrapper class
        k8_NetworkingAPIs::NetworkingAPI* netAPI = new k8_NetworkingAPIs::NetworkingAPI;
        if (netAPI->IsInitialized() && netAPI->pInternetOpenA) {
            HINTERNET hInternet = netAPI->pInternetOpenA(OBFUSCATE_STRING("MyAgent").c_str(), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
            if (hInternet) {
                // ... use hInternet ...
                netAPI->pInternetCloseHandle(hInternet);
            }
        }

        delete netAPI;
    })
    ```
3.  すべての重要な文字列リテラルに `OBFUSCATE_STRING("your string")` を使用します。API呼び出しに必要な場合は、復号化された文字列に `.c_str()` メソッドでアクセスするか、`Obfusk8/Instrumentation/materialization/transform/AES8.hpp` によって提供される `.print_to_console()` などの他のメソッドを使用します。
4.  直接のステルスAPI呼び出しには `STEALTH_API_OBFSTR("dll_name.dll", "FunctionNameA")` を使用するか、できれば利便性と組み込みのステルス機能のためにAPIラッパークラス(例:`K8_ProcessManipulationAPIs::ProcessAPI`、`k8_NetworkingAPIs::NetworkingAPI`)を使用します。
5.  難読化レイヤーを追加するために、パフォーマンスに影響しない重要なコードセクションに `OBF_BOGUS_FLOW_*`、`OBF_CALL_ANY_LOCAL_JUNK`、`NOP()`、その他のプリミティブを散りばめます。

* main.cpp ファイルを参照してください。

### ビルド

*   **コンパイラ要件**: このライブラリはC++17向けに設計されています。Microsoft C++コンパイラ(`cl.exe`)が主なターゲットであり、特にPEセクション機能とSEHの使用において重要です。
*   **Windowsで `cl.exe`(MSVCコンパイラ)を入手する**:
    1.  **Visual Studioをインストールする**: `cl.exe` を入手する最も簡単な方法は、Visual Studioをインストールすることです。[Visual Studioのウェブサイト](https://visualstudio.microsoft.com/downloads/) からVisual Studio Communityエディションを無料でダウンロードできます。
    2.  **ワークロードを選択する**: インストール中に、「C++によるデスクトップ開発」ワークロードを必ず選択してください。これにより、C++コンパイラ、Windows SDK、その他の必要なツールがインストールされます。
    3.  **開発者コマンドプロンプトを使用する**: インストール後、スタートメニューで「開発者コマンドプロンプト for VS」(例:「x64 Native Tools Command Prompt for VS 2022」)を検索して実行します。このコマンドプロンプトは、`cl.exe` の使用に必要な環境変数(PATH、INCLUDE、LIB)を自動的に設定します。
*   **インクルードパス**:
    *   `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp` を含むディレクトリがコンパイラのインクルードパスにあることを確認してください。
    *   `Obfusk8/Instrumentation/materialization/transform/AES8.hpp`、`Obfusk8/Instrumentation/materialization/transform/Resolve8.hpp`、およびAPIラッパーディレクトリ(例:`k8_NetworkingAPIs/`)が `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp` と同じディレクトリにない場合は、それらのパスも正しく構成されていることを確認してください。`Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp` は、APIラッパーの内部インクルードの一部に `../Obfusk8Core.hpp` のような相対パスを使用するため、ディレクトリ構造が重要です。`Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp` がこのライブラリのインクルードディレクトリのルートにある場合、APIラッパーは `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp` が期待する場所を基準とした `k8_NetworkingAPIs/` のようなサブディレクトリにある必要があります。または `Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp` 内のインクルードパスを調整してください。
*   **コンパイル例(開発者コマンドプロンプトを使用)**:
    `main.cpp` とObfusk8ヘッダーが正しく構成されている場合、次のようなコマンドでコンパイルできます:
    ```bash
    cl /std:c++17 /EHsc main.cpp
    ```
    *   `x64 Native Tools Command Prompt for VS 2022` を開いた後:
      
        ![x64 Native Tools Command Prompt for VS 2022](https://assets.kitploit.com/production/public/readmes/8984/86c7ebae9ed88a06bb6de06a0766ebeebd213ac98a9f353af8db4dd462acd849.jpg)

        
    *   `/std:c++17`: C++17標準を指定します。
    *   `/EHsc`: C++例外処理モデルを指定します。
    *   `main.cpp`: メインのソースファイルです。
    *   `/I"path/to/your/obfusk8_includes"`: (オプション、ヘッダーがデフォルトパスにない場合)`Obfusk8/Instrumentation/materialization/state/Obfusk8Core.hpp` とその依存関係が配置されているディレクトリを追加します。サブディレクトリにある場合は、`Obfusk8Core.hpp` 内の相対パスがレイアウトと一致することを確認してください。
    *   **ライブラリに関する注意**: ステルスAPI解決は難読化された関数の静的リンクを回避することを目的としていますが、Windows SDKヘッダー自体が、難読化されていないSDKの使用や内部型(例:`Ws2_32.lib`、`Wininet.lib`、`Advapi32.lib` など)を解決するために、リンカが利用できる特定の `.lib` ファイルを必要とする場合があります。`cl /std:c++17 /EHsc main.cpp` のような単純なプロジェクトでは、標準のWindowsライブラリである場合、リンカがこれらを自動的に解決することがよくあります。

*   **CMAKE**: cmakeを使用してObfusk8をビルドすることもできます。
   1. リポジトリをクローンして移動します:`git clone https://github.com/x86byte/Obfusk8.git` そしてディレクトリに移動します `cd Obfusk8`
   2. ファイルを構成して生成します:`cmake CMakeLists.txt`
   3. ビルドツールの自動選択とコンパイル:`cmake --build .`
   *   `x64 Native Tools Command Prompt for VS 2022` を開いた後:
     
        ![x64 Native Tools Command Prompt for VS 2022](https://assets.kitploit.com/production/public/readmes/8984/0f644508b0677934acc81220dfe0131598c22302f78aefaea101cc38e413cb2b.png)

*   **CMAKE && Microsoft Visual Studio**:
    *   `microsoft visual studio` を開いた後、`Ctrl + B` をクリックしてプロジェクトをコンパイルします:
      
       ![Microsoft Visual Studio](https://assets.kitploit.com/production/public/readmes/8984/23789327b22943c754f4a06e036cb2c7521c5b764d4c78f1363ed0edf974cb1e.png)
        
*   **バイナリサイズと将来の拡張に関する考慮事項**:
    *   **サイズへの影響**: ヘッダーのみの難読化を広範囲に使用すると、特にジャンクコードのインライン化、MBA展開、フラット化された制御フローなどのテクニックにより、最終的なバイナリサイズが大幅に増加する可能性があることに注意してください。小さなプログラムは、適用される難読化の強度に応じて、数キロバイトから潜在的に2MB以上に成長する可能性があります。
    *   **カスタマイズとパッキング(将来の方向性)**:
        *   現在、Obfusk8はコード内難読化に焦点を当てています。バイナリサイズが重要な制約である場合、ユーザーはさまざまなマクロの使用法(例:`OBF_CALL_ANY_LOCAL_JUNK` の密度を減らす、`_main` のループの複雑さを減らす)を微調整する必要があるかもしれません。
        *   難読化後の大幅なサイズ削減には、外部のPEパッカー(UPX、MPRESS、カスタムソリューションなど)の統合または使用が別途必要なステップになります。
        *   Obfusk8の将来の開発では、難読化の強度をより細かく制御するオプションや、ライブラリ内に軽量のパッキング/圧縮スタブを直接統合することも検討される可能性があります。ただし、これにより複雑さが大幅に増加します。

### ビルド後のPE難読化
Obfusk8には、フォレンジックアーティファクトを除去してコンパイル済みバイナリをさらに強化するためのビルド後スクリプトが含まれています。

*   **スクリプトの場所**: `Obfusk8/SCRIPTS/obfuscate_pe.ps1`
*   **機能**:
    1.  **リッチヘッダーの除去** — コンパイラのバージョンとツールチェーンの詳細を明らかにするMSVCビルド環境のフィンガープリントを削除します。
    2.  **TimeDateStampの偽装** — PEヘッダーのタイムスタンプを固定値に置き換えて、ビルド時刻を不明瞭にします。
    3.  **デバッグディレクトリのクリア** — PDBパスやビルドメタデータを漏洩させる可能性のあるデバッグディレクトリエントリを消去します。
*   **使用方法**:
    コンパイル後のビルド後ステップとして実行します:
    ```powershell
    PowerShell -NoProfile -ExecutionPolicy Bypass -File Obfusk8/SCRIPTS/obfuscate_pe.ps1 -Path "path\to\Obfusk8.exe"
    ```
    このスクリプトはバイナリをインプレースで変更します。バックアップは作成されません。

### デモ
   [[Obfusk8: C++17-Based Obfuscation Library - IDA pro Graph View] ~ビデオデモ](https://youtu.be/B9g4KSg3tHQ)


### コントリビューション&フィードバックこのプロジェクト、Obfusk8は、高度なC++難読化技術への継続的な探求です。現在のバージョンは、多数の絡み合った戦略により強固な基盤を築いています。

*   **あなたのフィードバックは非常に貴重です**: Obfusk8の開発者として、あなたの視点、洞察、そしてあらゆるフィードバックに深い関心を持っています。新機能の提案、既存技術の改善、Obfusk8で保護されたコードに対するリバースエンジニアリングの試み(成功・失敗を問わず)の報告、あるいはライブラリの使いやすさや有効性に関する一般的な意見など、どんな内容でも歓迎します。
*   **貢献**: すべての貢献を歓迎し、心から感謝します。このプロジェクトは、コミュニティからの意見と実際のテストによって成長し、その限界を押し広げ、コード保護のためのさらに強力なツールになることを目指しています。ぜひご意見をお聞かせいただき、問題を報告したり、その進化に貢献したりしてください!。
      *    **[Obfusk8への貢献方法は?](https://opensource.guide/how-to-contribute/)**

### 謝辞
*   [sadMosquito](https://github.com/sadMosquito) — 問題の報告とプロジェクトのテストに協力してくれた方

**免責事項**
難読化は防御の一層であり、完全な解決策ではありません。十分なスキルと時間を持った執拗な攻撃者は、難読化されたコードをリバースエンジニアリングできることがよくあります。Obfusk8は、そのような試みに対するハードルを大幅に引き上げることを目指しています。他のセキュリティ対策と併用してください。

**連絡先**
フィードバックの共有、難読化技術の議論、リバースエンジニアリングの試みの報告、あるいは単に技術的な議論をしたい場合は、遠慮なく直接ご連絡ください。私は常に建設的な会話とコラボレーションにオープンです(難読化関連プロジェクトやその他のことでも、喜んで協力します)。

- x : https://x.com/x86byte  
- telegram: https://t.me/x86byte  
- discord: @x86byte
ツールをダウンロード