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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
obfus.h — コンパイル時C難読化用マクロヘッダー (tcc, win x86/x64) | Kitploit
ツール/GitHubGitHub/dosx-dev/obfus.h
防御ツールコード分析リバースエンジニアリングセキュリティ仮想化バイナリ解析
GitHubdosx-dev/obfus.h

obfus.h

コンパイル時C難読化用マクロヘッダー (tcc, win x86/x64)

リポジトリを見る
1.7k15014日前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
ウェブサイト

obfus.h

obfus.h は、Cアプリケーションをコンパイル時に難読化するためのマクロオンリーのライブラリで、特に Tiny C (tcc) 向けに設計されています(ここからダウンロードできます -> Tiny-C-Compiler/releases)。Windows x86 および x64 プラットフォーム向けに調整されており、ほぼすべてのバージョンのコンパイラをサポートしています。Cプログラムにとって非常に信頼性の高いアーマーです!

どのような機能がありますか?...

  • 🔍 関数呼び出しの難読化: 関数呼び出しを混乱させ、不正な目からコードを読み取りにくくします。
  • 🛡️ アンチデバッグ技術: 実行時のコード解析を防ぐための組み込みメカニズム。
  • 🔄 制御フローコードの変異: コードをスパゲッティ化し、条件文やループの解析を困難にします。
  • 🧶 文字列の隠蔽: 指定された文字列をファイル内に隠し、実行時に動的に収集します。
  • 🚫 逆コンパイル対策技術: 多くの一般的な逆コンパイラの出力を視覚的に破壊し、役に立たなくします。
  • 😈 偽の署名の追加: さまざまなパッカーやプロテクターの偽の署名を追加して、リバースエンジニアを混乱させることができます。
  • 🧠 仮想化: 仮想マシンコマンドを使用して、数学演算を非常に理解しにくくします。

👾 使用方法

obfus.h をプロジェクトに統合するのは簡単なプロセスです。コードに次の行を追加するだけです:

root@kitploit:~
#include "obfus.h"

これにより、コンパイル中にコードが自動的に難読化され、知的財産の保護と機密性が保証されます。

保護設定に利用可能なオプション:

root@kitploit:~
// Advanced code protection (see the "Virtualization" part of the documentation!)
#define VIRT           1  // Allows you to use the functions of a math VM

// Additional options
#define CFLOW_V2       1  // More powerful Control Flow obfuscation (slowly!)
#define ANTIDEBUG_V2   1  // Use better dynamic anti-debugging protection
#define FAKE_SIGNS     1  // Adds fake signatures of various protectors or packers

// Disabling default features
#define NO_OBF         1  // Don't obfuscate (for debugging)
#define NO_CFLOW       1  // Don't use Control-Flow obfuscation
#define NO_ANTIDEBUG   1  // Don't build in debugging protection

またはコンパイラ引数で使用する場合:

root@kitploit:~
tcc "app.c" -w  -D NO_CFLOW  -D ANTIDEBUG_V2  -D FAKE_SIGNS  -D VIRT

[!WARNING] 難読化を有効にしてアプリケーションをコンパイルするときは、警告を抑制するために -w 引数を使用してください。そうしないと、コンソールに、最終結果には影響しない数多くの威圧的なログが表示されます。それらを心配する必要はありません。

🔐 デバッグ保護は、多くの基本的なMSVCRT関数への呼び出しによってトリガーされます。 コードの重要な場所では、ANTI_DEBUG; 構文を使用できます。例:

root@kitploit:~
ANTI_DEBUG;
if (!licenseExpired()) {
	// ...
}

🧶 文字列の隠蔽

HIDE_STRING(str) は文字列を変異させて難読化し、視覚的に隠すことで、ソースコード内での発見やパッチ適用を大幅に困難にします。この方法で宣言された文字列は、一度にロードされるのではなく mov 命令を通じてスタック上に組み立てられます。この手法により、文字列が静的に宣言されることはなく、実行時に構築されるため、静的解析の影響を受けにくくなります。ただし、この機能は関数呼び出しを伴うため、静的フィールドの宣言時に隠すために使用することはできないことに注意してください。

[!IMPORTANT] 一部の逆コンパイラは、静的最適化によりそれらを明らかにする可能性があります。逆アセンブラ出力では、コードは複雑で厄介に見えるため、単純な解析は妨げられますが、意図的なリバースエンジニアリングの試みを完全に防ぐことはできないかもしれません。

標準ライブラリの printf 関数を、メッセージの静的隠蔽とスタック上での復号化とともに呼び出す例:

root@kitploit:~
char *hidden_message = HIDE_STRING("Hello, world!");
// ...
printf(hidden_message);

👺 仮想化

これは、特定の計算がコマンドに応じて組み込み仮想マシンを介して実行される保護技術です。数学演算の解析を非常に困難にします! VIRT オプションを有効にした場合にのみ機能します。そうでない場合、仮想マシンコマンドはすべて通常の数学演算子に置き換えられます。

[!WARNING] 重要な場所での仮想化は最適化に影響を与える可能性があります。本当に必要な領域でのみ注意して使用してください

仮想マシンは、一部の基本的な double 比較演算をサポートしていません。

仮想マシン呼び出しを使用する論理演算子を使用して、コードの理解をさらに複雑にすることができます:

演算子説明
VM_IFif の代わりに使用します

これは if/else の完全な置き換えではなく、標準の演算子を複雑にするだけです。

仮想化の簡単な使用例:

root@kitploit:~
// ...
#define VIRT 1
// ...

// if ((2 + 2) == 4) { ... }
VM_IF (VM_EQU(VM_ADD(2, 2), 4)) {
	printf("2 + 2 == 4!");
}

// if (condition1) { ... }
// else if (condition2) { ... }
// else { ... }
VM_IF (condition1) {
	// if
} VM_ELSE_IF (condition2) {
	// else if
} VM_ELSE {
	// else
}

仮想マシンのすべての関数の使用例は、ファイル tests/virtualmachine.c にあります。

❓ 使用例

熟練したリバーサーに対する高度な保護が必要な場合は、CFLOW_V2 と ANTIDEBUG_V2 オプションを使用してください。

root@kitploit:~
// Let's obfuscate your code!

#include <stdio.h>

#define VIRT         1 // [+] Use math virtual machine

#define CFLOW_V2     1 // [+] ControlFlow v2
#define FAKE_SIGNS   1 // [+] Fake signatures
#define ANTIDEBUG_V2 1 // [+] AntiDebug v2

#define NO_OBF       0 // [-] Don't obfuscate (disable all)
#define NO_CFLOW     0 // [-] Disable ControlFlow
#define NO_ANTIDEBUG 0 // [-] Disable AntiDebug


#include "obfus.h"

void main() {
	char *out = malloc(256);

	strcpy(out, HIDE_STRING("Hello, world!\n"));

	if (out) {
		printf(out);
	} else {
		printf("Error!\n");
	}

	free(out);

	int result = VM_ADD(5, 7); // 5 + 7

	VM_IF (VM_EQU(result, 12)) { // (5 + 7) == 12
		printf("5 + 7 == 12");
	}
}

🤖 どのように動作しますか?

🛠 コンパイラ(重要)

最新バージョンの Tiny C(0.9.27)の使用をお勧めします。残念ながら、一部のバージョンのコンパイラは完全な難読化に必要な機能をサポートしていません。Visual C、GCC、Clang はサポートされておらず、サポートされる見込みもありません。

🌐 obfus.h アップデータ

Windows用の特別なスクリプトを使用すると、公式リポジトリからパッケージをダウンロードして obfus.h の最新バージョンを取得できます。これは、git を使用せずにセキュリティ更新を自動化する必要がある場合に便利です。

たとえば、プロジェクトのビルド前に使用できます:

root@kitploit:~
+ C:\...> call obfh-update
  C:\...> tcc app.c -w

スクリプトは、カレントディレクトリ内の obfus.h ファイルの内容を更新します(指定された設定に応じて)

🦎 セキュリティ監査とコミュニティ

  • 高度に難読化されたバイナリを攻略する - 内部の obfus.h セキュリティメカニズムとその難読化解除のブラックボックス分析。すべての脆弱性は現在修正されています。
  • ObfusHunter - obfus.h によって保護されたファイルをスキャンするためのユーティリティ

📖 まとめ

obfus.h を使用して保護されたプログラムのコード(およびその元の本来のロジック)は、ほぼ復元(難読化解除)不可能です。ただし、この難読化ツールを使用しても、すべての種類の脅威に対する完全な保護は保証されません。内部プログラムのセキュリティシステムを開発し、維持することが重要です。

難読化後の図式的なコードの見え方:

リバーサーが逆コンパイラを使用しようとした場合、次のようなものが表示されます:

HIDE_STRING 機能で隠された文字列はすべて、逆アセンブラ(x86-64アーキテクチャ)では次のように見えます:

root@kitploit:~
  ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
  ; PROTECTED STRING:                  ; ORIGINAL STRING:         ;
  mov eax, 48h                         lea rax, aHelloWorld       ;
  mov [rbp-0Fh], al                    mov r11, rax               ;
  mov eax, 65h                         ; . . .                    ;
  mov [rbp-0Eh], al                                               ;
  mov eax, 6Ch                                                    ;
  mov [rbp-0Dh], al                                               ;
  mov eax, 6Ch                                                    ;
  mov [rbp-0Ch], al                                               ;
  mov eax, 6Fh                                                    ;
  mov [rbp-0Bh], al                                               ;
  mov eax, 2Ch                                                    ;
  ; etc . . .                                                     ;
  ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

🌈 スペシャルサンクス

このプロジェクトの開発を手伝ってくれたすべての人に感謝します。感謝しています! ❤️

  • 👨🏼‍💻 @horsicq (コードのヘルプとアドバイスに対して)
  • 🐺 @ac3ss0r (素晴らしいアイデアとその解決策に対して)

そして、このプロジェクトに注目してくれたあなたに感謝します 🤝!

ツールをダウンロード
関数型演算子説明例
VM_ADDlong+2つの数値を加算しますVM_ADD(5, 3) = 8
VM_SUBlong-2つの数値を減算しますVM_SUB(5, 3) = 2
VM_MULlong*2つの数値を乗算しますVM_MUL(5, 3) = 15
VM_DIVlong/2つの数値を除算しますVM_DIV(6, 3) = 2
VM_MODlong%2つの数値の剰余を計算しますVM_MOD(5, 3) = 2
VM_EQUBOOL==2つの数値が等しいかどうかをチェックしますVM_EQU(5, 5) = true
VM_NEQBOOL!=2つの数値が等しくないかどうかをチェックしますVM_NEQ(5, 3) = true
VM_LSSBOOL<最初の数値が2番目の数値より小さいかどうかをチェックしますVM_LSS(3, 5) = true
VM_GTRBOOL>最初の数値が2番目の数値より大きいかどうかをチェックしますVM_GTR(5, 3) = true
VM_LEQBOOL<=最初の数値が2番目の数値以下かどうかをチェックしますVM_LEQ(3, 5) = true
VM_GEQBOOL>=最初の数値が2番目の数値以上かどうかをチェックしますVM_GEQ(5, 3) = true
VM_ADD_DBLlong double+2つのdouble数値を加算しますVM_ADD_DBL(5.5, 3.2) = ≈8.7
VM_SUB_DBLlong double-2つのdouble数値を減算しますVM_SUB_DBL(5.5, 3.2) = ≈2.3
VM_MUL_DBLlong double*2つのdouble数値を乗算しますVM_MUL_DBL(5.5, 3.2) = ≈17.6
VM_DIV_DBLlong double/2つのdouble数値を除算しますVM_DIV_DBL(6.0, 3.0) = ≈2.0
VM_LSS_DBLBOOL<最初のdouble数値が2番目のdouble数値より小さいかどうかをチェックしますVM_LSS_DBL(3.5, 5.2) = true
VM_GTR_DBLBOOL>最初のdouble数値が2番目のdouble数値より大きいかどうかをチェックしますVM_GTR_DBL(5.5, 3.2) = true
VM_ELSE_IFelse if の代わりに使用します
VM_ELSEelse の代わりに使用します