
Obfus.h adalah perpustakaan makro khusus untuk aplikasi C kompilasi-waktu, yang dirancang khusus untuk C Tiny C (TCC) . Ini dirancang untuk platform Windows X86 dan X64 dan mendukung hampir semua versi kompiler. Baju besi yang sangat andal untuk program C Anda!
Mengintegrasikan obfus.h ke dalam proyek Anda adalah proses yang sederhana. Cukup sertakan baris berikut dalam kode Anda:
#include "obfus.h"Ini secara otomatis akan mengaburkan kode Anda selama kompilasi, memastikan perlindungan dan kerahasiaan kekayaan intelektual Anda.
Opsi yang tersedia untuk Konfigurasi Perlindungan:
// 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 protectionatau menggunakannya dengan compiler args:
tcc "app.c" -w -D NO_CFLOW -D ANTIDEBUG_V2 -D FAKE_SIGNS -D VIRT
Peringatan
Saat menyusun aplikasi dengan kebingungan, gunakan argumen -w untuk menekan peringatan. Jika tidak, konsol akan menampilkan banyak log yang mengintimidasi yang tidak berdampak pada hasil akhir. Tidak perlu khawatir dengan mereka.
? Perlindungan debugging dipicu oleh panggilan ke banyak fungsi MSVCRT dasar. Di tempat -tempat penting dalam kode Anda dapat menggunakan ANTI_DEBUG; membangun. Misalnya:
ANTI_DEBUG ;
if (! licenseExpired ()) {
// ...
} Ini adalah teknik perlindungan di mana perhitungan tertentu dilakukan melalui mesin virtual tertanam atas perintah. Membuat analisis operasi matematika menjadi sangat sulit ! Ini akan bekerja dengan opsi VIRT yang diaktifkan (dan hanya!). Kalau tidak, semua perintah mesin virtual akan digantikan oleh operator matematika biasa.
Peringatan
Virtualisasi di lokasi kritis dapat memengaruhi optimasi. Gunakan dengan hati -hati hanya di daerah di mana itu benar -benar dibutuhkan
| Fungsi | Jenis | Op | Keterangan | Contoh |
|---|---|---|---|---|
VM_ADD | panjang | + | Menambahkan dua angka | VM_ADD(5, 3) = 8 |
VM_SUB | panjang | - | Kurangi dua angka | VM_SUB(5, 3) = 2 |
VM_MUL | panjang | * | Mengalikan dua angka | VM_MUL(5, 3) = 15 |
VM_DIV | panjang | / | Membagi dua angka | VM_DIV(6, 3) = 2 |
VM_MOD | panjang | % | Menghitung modulus dua angka | VM_MOD(5, 3) = 2 |
VM_EQU | Bool | == | Memeriksa apakah dua angka sama | VM_EQU(5, 5) = true |
VM_NEQ | Bool | != | Memeriksa apakah dua angka tidak sama | VM_NEQ(5, 3) = true |
VM_LSS | Bool | < | Memeriksa apakah angka pertama kurang dari angka kedua | VM_LSS(3, 5) = true |
VM_GTR | Bool | > | Memeriksa apakah angka pertama lebih besar dari angka kedua | VM_GTR(5, 3) = true |
VM_LEQ | Bool | <= | Memeriksa apakah angka pertama kurang dari atau sama dengan angka kedua | VM_LEQ(3, 5) = true |
VM_GEQ | Bool | >= | Memeriksa apakah angka pertama lebih besar dari atau sama dengan angka kedua | VM_GEQ(5, 3) = true |
VM_ADD_DBL | panjang ganda | + | Menambahkan dua angka ganda | VM_ADD_DBL(5.5, 3.2) = ≈8.7 |
VM_SUB_DBL | panjang ganda | - | Kurangi dua angka ganda | VM_SUB_DBL(5.5, 3.2) = ≈2.3 |
VM_MUL_DBL | panjang ganda | * | Mengalikan dua angka ganda | VM_MUL_DBL(5.5, 3.2) = ≈17.6 |
VM_DIV_DBL | panjang ganda | / | Membagi dua angka ganda | VM_DIV_DBL(6.0, 3.0) = ≈2.0 |
VM_LSS_DBL | Bool | < | Memeriksa apakah angka ganda pertama kurang dari angka ganda kedua | VM_LSS_DBL(3.5, 5.2) = true |
VM_GTR_DBL | Bool | > | Memeriksa apakah angka ganda pertama lebih besar dari angka ganda kedua | VM_GTR_DBL(5.5, 3.2) = true |
Mesin virtual tidak mendukung beberapa operasi perbandingan
doubledasar.
Anda dapat menggunakan operator logis yang menggunakan panggilan mesin virtual untuk lebih memperumit pemahaman kode Anda.
| Operator | Keterangan |
|---|---|
VM_IF | Gunakan bukan if |
VM_ELSE_IF | Gunakan bukannya else if |
VM_ELSE | Gunakan else |
Contoh sederhana menggunakan virtualisasi:
// ...
#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
}Anda dapat menemukan contoh menggunakan semua fungsi mesin virtual dalam uji file/virtualmachine.c
Jika Anda memerlukan perlindungan lanjutan terhadap pembalik yang terampil, gunakan opsi CFLOW_V2 dan 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" );
}
} Versi terbaru dari C Tiny ( 0.9.27 ) direkomendasikan untuk digunakan. Sayangnya, beberapa versi kompiler tidak mendukung fungsionalitas yang diperlukan untuk sepenuhnya kebingungan. Visual C , GCC dan Clang tidak didukung dan tidak mungkin didukung.
Anda dapat menggunakan skrip khusus untuk Windows untuk mendapatkan versi terbaru dari obfus.h dengan mengunduh paket dari repositori resmi. Ini berguna jika Anda perlu mengotomatiskan pembaruan keamanan tanpa menggunakan git .
Misalnya, Anda dapat menggunakannya sebelum membangun proyek Anda:
+ C:...> call obfh-update C:...> tcc app.c -wSkrip akan memperbarui konten file obfus.h di direktori saat ini (sesuai dengan konfigurasi yang ditentukan)
Kode program (dan logika aslinya) yang dilindungi menggunakan obfus.h hampir tidak mungkin untuk dipulihkan (Deobfuscate) . Namun, dengan menggunakan obfuscator ini tidak menjamin perlindungan lengkap terhadap semua jenis ancaman. Penting untuk mengembangkan dan memelihara sistem keamanan program internal.
Seperti apa kode diagram setelah kebingungan:
Reverser akan melihat sesuatu seperti ini jika dia mencoba menggunakan dekompiler:
Terima kasih kepada semua orang yang membantu dalam pengembangan proyek ini. Saya menghargainya! ❤️
Dan terima kasih padamu ? Untuk memperhatikan proyek ini!