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

main 関数のラッピング(_main マクロ)アプリケーションのエントリポイント(main)は、複雑で多層的な難読化エンジンに変換されます:
main_body コードが実行される前に、ミニVM(シミュレートされたCPU)が「暗号化された」命令のシーケンスを実行します。これにより、真のエントリポイントと初期操作が隠蔽されます。VMの状態(レジスタ、プログラムカウンタ、ディスパッチキー)は、ランタイムでランダム化された値で初期化されます。_main マクロ内の重要なループ(プロローグとエピローグの両方)は、複雑なステートマシンに変換されます。制御フローは直接的なものではなく、高度に「暗号化された」状態変数によって決定されます。これらの状態変数のエンコード/デコードキーは動的であり、VM状態、ループカウンタ、コンパイル時ランダム性(__COUNTER__、__LINE__、__TIME__ など)、およびグローバルな不透明シードから導出されます。これにより、制御フローの静的解析が非常に困難になります。
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):
__except ブロックはプログラムの状態を変更できるため、デバッガが例外をスキップすると追跡が困難になります。Runtime マクロには、特定のVM状態またはタイミングによって条件が満たされた場合に __debugbreak() をトリガーしたり例外をスローしたりする可能性のある条件が含まれており、デバッグセッションを妨害するように設計されています。obf_vm_engine)_main マクロの難読化の核心コンポーネント:
r0、r1、r2)、プログラムカウンタ(pc)、ディスパッチキー(dispatch_key)を持つCPUをシミュレートします。カスタム「命令」(ハンドラ)を実行します。reg_dispatch_idx)。get_mem_dispatch_table)。mixed_dispatch_idx)。
dispatch_key は常に変更され、実行されるハンドラのシーケンスを非常に予測不能にします。vm_handler_table)自体が、_main のプロローグとエピローグ内でランタイムに変異し、VMの動作をさらに不明瞭にします。AES8.hpp の OBFUSCATE_STRING)__FILE__、__LINE__)、ビルド時刻(__DATE__、__TIME__)から導出されます。AES8.hpp のMSVC固有機能)。Resolve8.hpp の STEALTH_API_OBFSTR / STEALTH_API_OBF)GetModuleHandle と GetProcAddress がこのメカニズムによってまだ解決されていない場合、それらをバイパスして初期解決を行います。CT_HASH)を使用します。これにより、これらのマクロを使用する際に、バイナリのインポート関連データや文字列テーブルに平文のDLL名とAPI名が出現するのを防ぎます。K8_SYSCALL)Obfusk8は現在、ユーザーモードフック(EDR/AV)と静的解析チェックをバイパスするための最先端のIndirect Syscallメカニズムを統合しています。
NtOpenProcess の代わりに K8_SYSCALL("ZwOpenProcess", ...) を単に使用してください。OBF_METHOD)Obfusk8は現在、メソッドベースの難読化を通じて、バイナリのセキュリティを細かく制御できます。プロジェクト全体を難読化する(パフォーマンスに影響を与える可能性がある)代わりに、特定の価値の高い関数やクラスメソッドを選択的に保護できるようになりました。
OBF_METHOD マクロを使用してメソッドを定義します: ```cpp
OBF_METHOD(ret_type, func_name, params, method_body)
ret_type: 関数の戻り値の型(例:bool, int, void*)。func_name: メソッドの名前。params: 関数のパラメータ(括弧で囲む必要があります)。method_body: { } で囲まれた関数の実際のロジック。この例では、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"); }
// 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; })
*完全な例はこちらで確認できます:[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**:

* **ida pro の一部のチャンク**:



* **Detect It Easy のシグネチャ検出結果**:

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

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

* **セクション**:

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

### エンジン解析と検出プロファイル
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` を開いた後:

* `/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` を開いた後:

* **CMAKE && Microsoft Visual Studio**:
* `microsoft visual studio` を開いた後、`Ctrl + B` をクリックしてプロジェクトをコンパイルします:

* **バイナリサイズと将来の拡張に関する考慮事項**:
* **サイズへの影響**: ヘッダーのみの難読化を広範囲に使用すると、特にジャンクコードのインライン化、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