
OBFUS.Hは、小さなC(TCC)専用に設計されたコンパイル時間の難読化Cアプリケーションのマクロのみのライブラリです。 Windows X86およびX64プラットフォームに合わせて調整され、コンパイラのほぼすべてのバージョンをサポートしています。あなたのCプログラムのための非常に信頼性の高いアーマー!
OBFUS.Hをプロジェクトに統合することは簡単なプロセスです。コードに次の行を含めるだけです。
#include "obfus.h"これにより、コンピレーション中にコードが自動的に難読化され、知的財産の保護と機密性が確保されます。
保護のための利用可能なオプション構成:
// 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_CFLOW 1 // Don't use Control-Flow obfuscation #define NO_ANTIDEBUG 1 // Don't build in debugging protectionまたは、コンパイラargsで使用します。
tcc "app.c" -w -D NO_CFLOW -D ANTIDEBUG_V2 -D FAKE_SIGNS -D VIRT
警告
難読化でアプリケーションをコンパイルするとき、 -w引数を使用して警告を抑制します。それ以外の場合、コンソールは最終結果に影響を与えない多くの威圧的なログを表示します。彼らに警戒する必要はありません。
?デバッグ保護は、多くの基本的なMSVCRT関数への呼び出しによってトリガーされます。コードの重要な場所ではANTI_DEBUG;構成。例えば:
ANTI_DEBUG ;
if (! licenseExpired ()) {
// ...
}これは、コマンド時に組み込み仮想マシンを介して特定の計算が実行される保護手法です。数学操作の分析を非常に困難にします!それは、有効になっているVIRTオプションで動作します(およびのみ!)。それ以外の場合、すべての仮想マシンコマンドは、通常の数学演算子に置き換えられます。
警告
重要な場所での仮想化は、最適化に影響を与える可能性があります。本当に必要な領域でのみ注意して使用してください
| 関数 | タイプ | op | 説明 | 例 |
|---|---|---|---|---|
VM_ADD | 長さ | + | 2つの番号を追加します | VM_ADD(5, 3) = 8 |
VM_SUB | 長さ | - | 2つの数値を減算します | VM_SUB(5, 3) = 2 |
VM_MUL | 長さ | * | 2つの数字を掛けます | VM_MUL(5, 3) = 15 |
VM_DIV | 長さ | / | 2つの数値を分割します | VM_DIV(6, 3) = 2 |
VM_MOD | 長さ | % | 2つの数値のモジュラスを計算します | VM_MOD(5, 3) = 2 |
VM_EQU | ブール | == | 2つの数値が等しいかどうかを確認します | VM_EQU(5, 5) = true |
VM_NEQ | ブール | != | 2つの数値が等しくないかどうかを確認します | VM_NEQ(5, 3) = true |
VM_LSS | ブール | < | 最初の番号が2番目の番号よりも少ないかどうかを確認します | VM_LSS(3, 5) = true |
VM_GTR | ブール | > | 最初の番号が2番目の数値より大きいかどうかを確認します | VM_GTR(5, 3) = true |
VM_LEQ | ブール | <= | 最初の番号が2番目の数値以下であるかどうかを確認します | VM_LEQ(3, 5) = true |
VM_GEQ | ブール | >= | 最初の番号が2番目の数字以上であるかどうかを確認します | VM_GEQ(5, 3) = true |
VM_ADD_DBL | 長いダブル | + | 2つのダブル番号を追加します | VM_ADD_DBL(5.5, 3.2) = ≈8.7 |
VM_SUB_DBL | 長いダブル | - | 2つの二重番号を減算します | VM_SUB_DBL(5.5, 3.2) = ≈2.3 |
VM_MUL_DBL | 長いダブル | * | 2つのダブル番号を掛けます | VM_MUL_DBL(5.5, 3.2) = ≈17.6 |
VM_DIV_DBL | 長いダブル | / | 2つの二重番号を分割します | VM_DIV_DBL(6.0, 3.0) = ≈2.0 |
VM_LSS_DBL | ブール | < | 最初の二重番号が2番目のダブル番号よりも少ないかどうかを確認します | VM_LSS_DBL(3.5, 5.2) = true |
VM_GTR_DBL | ブール | > | 最初の二重番号が2番目のダブル番号より大きいかどうかを確認します | VM_GTR_DBL(5.5, 3.2) = true |
仮想マシンは、いくつかの基本的な
double比較操作をサポートしていません。
仮想マシンコールを使用する論理演算子を使用して、コードの理解をさらに複雑にすることができます。
| オペレーター | 説明 |
|---|---|
VM_IF | ifの代わりに使用します |
VM_ELSE_IF | else ifの代わりに使用します |
VM_ELSE | elseの代わりに使用します |
仮想化の使用の簡単な例:
// ...
#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
}ファイルテスト/virtualmachine.cで仮想マシンのすべての機能を使用する例を見つけることができます。
熟練した逆転に対する高度な保護が必要な場合は、 CFLOW_V2およびANTIDEBUG_V2オプションを使用してください。
// 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_CFLOW 0 // [-] Disable ControlFlow
#define NO_ANTIDEBUG 0 // [-] Disable AntiDebug
#include "obfus.h"
void main () {
char * out = malloc ( 256 );
strcpy ( out , "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はサポートされておらず、サポートされる可能性は低いです。
Windowsに特別なスクリプトを使用して、公式リポジトリからパッケージをダウンロードすることにより、 obfus.hの最新バージョンを取得できます。これは、 gitを使用せずにセキュリティの更新を自動化する必要がある場合に便利です。
たとえば、プロジェクトを構築する前に使用できます。
+ C:...> call obfh-update C:...> tcc app.c -wスクリプトは、現在のディレクトリのobfus.hファイルの内容を更新します(指定された構成に従って)
obfus.hを使用して保護されたプログラム(およびその元のロジック)のコードは、回復することはほとんど不可能です(deobfuscate) 。ただし、このObfuscatorを使用しても、あらゆる種類の脅威に対する完全な保護を保証するものではありません。内部プログラムセキュリティシステムを開発および維持することが重要です。
難読化の後に、図式コードがどのように見えるか:
逆転は、彼がディキャパイルを使用しようとすると、このようなものが表示されます。
このプロジェクトの開発を手伝ってくれたすべての人に感謝します。それは有り難いです! ❤❤️
そして、あなたに感謝しますか?このプロジェクトに注意を払ってくれて!