
OBFUS.H هي مكتبة ماكرو فقط لتطبيقات Compile-Time Corping C ، مصممة خصيصًا لـ C (TCC) الصغير . تم تصميمه للمنصات 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 الممكّن (وفقط!). خلاف ذلك ، سيتم استبدال جميع أوامر الجهاز الظاهري بمشغلين رياضيين عاديين.
تحذير
يمكن أن تؤثر المحاكاة الافتراضية في المواقع الحرجة على التحسين. استخدم بحذر فقط في المناطق التي تكون هناك حاجة إليها حقًا
| وظيفة | يكتب | المرجع | وصف | مثال |
|---|---|---|---|---|
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 ) للاستخدام. لسوء الحظ ، لا تدعم بعض إصدارات المترجم الوظائف اللازمة للتشويش تمامًا. لا يتم دعم Visual C و GCC و Clang ومن غير المرجح أن يتم دعمها.
يمكنك استخدام البرنامج النصي الخاص لنظام التشغيل Windows للحصول على أحدث إصدارات obfus.h من خلال تنزيل الحزمة من المستودع الرسمي. هذا مفيد إذا كنت بحاجة إلى أتمتة تحديثات الأمان دون استخدام git .
على سبيل المثال ، يمكنك استخدامه قبل إنشاء مشروعك:
+ C:...> call obfh-update C:...> tcc app.c -wسيقوم البرنامج النصي بتحديث محتويات ملف OBFUS.H في الدليل الحالي (وفقًا للتكوين المحدد)
من المستحيل تقريبًا استرداد رمز البرنامج (ومنطقه الأصلي الأصلي) باستخدام OBFUS.H (DeObfuscate) . ومع ذلك ، فإن استخدام هذا المحور لا يضمن حماية كاملة ضد جميع أنواع التهديدات. من المهم تطوير وصيانة أنظمة أمن البرنامج الداخلية.
كيف سيبدو الكود التخطيطي بعد التغلب:
سيرى الانعكاس شيئًا كهذا إذا حاول استخدام decompiler:
شكرا لكل من ساعد في تطوير هذا المشروع. أنا أقدر ذلك! ❤
وشكرا لك ؟ عن الاهتمام بهذا المشروع!