
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 | 長的 | + | 添加兩個數字 | VM_ADD(5, 3) = 8 |
VM_SUB | 長的 | - | 減去兩個數字 | VM_SUB(5, 3) = 2 |
VM_MUL | 長的 | * | 乘以兩個數字 | VM_MUL(5, 3) = 15 |
VM_DIV | 長的 | / | 劃分兩個數字 | VM_DIV(6, 3) = 2 |
VM_MOD | 長的 | % | 計算兩個數字的模量 | VM_MOD(5, 3) = 2 |
VM_EQU | 布爾 | == | 檢查兩個數字是否相等 | VM_EQU(5, 5) = true |
VM_NEQ | 布爾 | != | 檢查兩個數字是否不相等 | VM_NEQ(5, 3) = true |
VM_LSS | 布爾 | < | 檢查第一個數字是否小於第二個數字 | VM_LSS(3, 5) = true |
VM_GTR | 布爾 | > | 檢查第一個數字是否大於第二個數字 | VM_GTR(5, 3) = true |
VM_LEQ | 布爾 | <= | 檢查第一個數字是小於還是等於第二個數字 | VM_LEQ(3, 5) = true |
VM_GEQ | 布爾 | >= | 檢查第一個數字是大於還是等於第二個數字 | VM_GEQ(5, 3) = true |
VM_ADD_DBL | 長雙 | + | 添加兩個雙數字 | VM_ADD_DBL(5.5, 3.2) = ≈8.7 |
VM_SUB_DBL | 長雙 | - | 減去兩個雙數 | VM_SUB_DBL(5.5, 3.2) = ≈2.3 |
VM_MUL_DBL | 長雙 | * | 乘以兩個雙數 | VM_MUL_DBL(5.5, 3.2) = ≈17.6 |
VM_DIV_DBL | 長雙 | / | 劃分兩個雙數 | VM_DIV_DBL(6.0, 3.0) = ≈2.0 |
VM_LSS_DBL | 布爾 | < | 檢查第一個雙數是否小於第二個雙重數 | VM_LSS_DBL(3.5, 5.2) = true |
VM_GTR_DBL | 布爾 | > | 檢查第一個雙數是否大於第二個雙數 | 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 )。不幸的是,某些版本的編譯器不支持完全混淆所需的功能。視覺C , GCC和Clang不受支持,不可能得到支持。
您可以通過從官方存儲庫中下載軟件包來使用Windows的特殊腳本來獲取obfus.h的最新版本。如果您需要在不使用git的情況下自動化安全更新,這將很有用。
例如,您可以在構建項目之前使用它:
+ C:...> call obfh-update C:...> tcc app.c -w該腳本將在當前目錄中更新obfus.h文件的內容(根據指定的配置)
使用obfus.h保護程序(及其原始邏輯)的代碼幾乎無法恢復(DEOBFUSCATE) 。但是,使用此混淆器不能保證完全保護所有類型的威脅。開發和維護內部程序安全系統很重要。
混淆後,圖形代碼會是什麼樣:
如果他試圖使用分解器,則反擊者將會看到這樣的東西:
感謝所有幫助開發該項目的人。我很感激! ❤️
謝謝你?要注意這個項目!