
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) 。但是,使用此混淆器不能保证完全保护所有类型的威胁。开发和维护内部程序安全系统很重要。
混淆后,图形代码会是什么样:
如果他试图使用分解器,则反击者将会看到这样的东西:
感谢所有帮助开发该项目的人。我很感激! ❤️
谢谢你?要注意这个项目!