Tigress adalah virtualizer diversifikasi/obfuscator untuk bahasa C yang mendukung banyak pertahanan baru terhadap serangan rekayasa terbalik statis dan dinamis dan serangan de-virtualisasi. Secara khusus, Tigress melindungi terhadap de-virtualisasi statis dengan menghasilkan set instruksi virtual kompleksitas dan keragaman yang sewenang-wenang, dengan menghasilkan penerjemah dengan berbagai jenis pengiriman instruksi, dan dengan memasukkan kode untuk analisis anti alias. Tigress melindungi terhadap de-virtualisasi dinamis dengan menggabungkan kode nyata dengan fungsi palsu, dengan memasukkan aliran implisit, dan dengan membuat penerjemah reenetrant yang dieksekusi secara perlahan. Tigress mengimplementasikan versi pengemasan kode sendiri melalui penggunaan pembuatan kode runtime. Akhirnya, transformasi dinamis Tigress memberikan bentuk umum modifikasi kode runtime kontinous.
Tim Tigress telah memberikan beberapa tantangan di mana kita dapat menemukan berbagai jenis perlindungan
Semua tantangan mengambil sebagai masukan angka dan mengembalikan hash. Contoh:
$ ./obfuscated_binaries/tigress-2-challenge-2 1234 202180712448 $ ./obfuscated_binaries/tigress-2-challenge-2 823748 50564355584 $ ./obfuscated_binaries/tigress-2-challenge-2 2834723 50714072576
Fungsi perhitungan hash dikalahkan. Jenis serangan yang mungkin:
Tujuan kami adalah untuk:
Dan semua ini hanya dengan satu skrip generik :). Untuk melakukannya, kami membuat dalam urutan berikut:
Jika Anda ingin informasi lebih lanjut, Anda dapat memeriksa skrip Solve-VM.Py kami.

Namun, kami sudah mendorong semua hasil kami di repositori ini tetapi jika Anda ingin mereproduksi sendiri analisis ini, Anda hanya perlu melakukan pelaksanaan solve-vm.py seperti ini:
$ ./solve-vm.py ./obfuscated_binaries/_binary_
Contoh:
$ ./solve-vm.py ./tigress-challenges/tigress-0-challenge-0 [+] Memuat 0x400040 - 0x400238 [+] Memuat 0x400238 - 0x400254 [+] Memuat 0x400000 - 0x400f14 [+] Memuat 0x601e28 - 0x602550 [+] Memuat 0x601e50 - 0x601fe0 [+] Memuat 0x400254 - 0x400298 [+] Memuat 0x400DC4 - 0x400E08 [+] Memuat 0x000000 - 0x000000 [+] Memuat 0x601e28 - 0x602000 [+] Hooking Printf [+] Hooking __libc_start_main [+] Mengaitkan Strtoul [+] Mulai emulasi. [+] __libc_start_main diantakan [+] argv [0] = ./tigress-challenges/tigress-0-challenge-0 [+] argv [1] = 1234 [+] Strtoul ketagihan [+] Melambangkan pengembalian strtoul [+] printf terpikat 3035321144166078008 [+] Mengiris ekspresi pengguna titik akhir [-] Instruksi Tidak Didukung: 0x400539: HLT [+] Instruksi dieksekusi: 39816 [+] Instruksi Unik Dieksekusi: 458 [+] Pc len: 0 [+] Emulasi dilakukan. [+] Menghasilkan Symbolic_Expressions/Tigress-0-Challenge-0.py [+] Mengubah ekspresi simbolik ke modul LLVM ... [+] Modul llvm menulis di llvm_expressions/tigress-0-challenge-0.ll [+] Membenaga ulang biner deobfuscated ... [+] DEOBFUSCATED BINARYE BINARY RECREMILE: deobfuscated_binaries/tigress-0-challenge-0.deobfuscated
Kemudian, ekspresi simbolik dapat ditemukan di sini, representasi LLVM dapat ditemukan di sini dan biner yang dikompilasi ulang dapat ditemukan di sini.
Menggunakan Docker:
$ git clone [email protected]: jonathansalwan/tigress_protection.git $ CD/path/to/tigress_protection $ docker build -t image_tigress_protection. $ docker run -v/path/to/tigress_protection:/root/tigress_protection -ti --name = TIGRESS_PROTECTION --UlImit = 'stack = -1: -1' Image_Tigress_Protection
Tes di dalam wadah Docker
# CD ~/Tigress_Protection # ./solve-vm.py Tigress-challenges/Tigress-0-challenge-0
Saat kami menyederhanakan dan mengkompilasi kembali binari baru, kami harus memberikan perilaku yang sama dari biner asli. Jadi, untuk menguji versi biner kami, kami menggunakan skrip ini.
$ ./scripts/testing_equeality.py ./tigress-challenges/tigress-0-challenge-0 ./deobfuscated_binaries/tigress-0-challenge-0.deobfuscated [...] [+] Sukses dengan 272966812638982633 [+] Sukses dengan 2304147855662358786 [+] Sukses dengan 15697842028176298504 [+] Sukses dengan 15273138908025273913 [+] Sukses dengan 17329851347176088980 [+] Sukses dengan 12160831137213706322 [+] Sukses dengan 3489058267725840982 [+] Sukses dengan 6474275930952607745 [+] Sukses dengan 7363567981237584398 [+] Sukses dengan 3685039181436704621 [+] Sukses: 100.00
Pada dasarnya, skrip ini menjalankan binari yang dikaburkan dan deobfuscated dengan input acak dan memeriksa apakah mereka memiliki hasil output yang sama.

Mengenai tabel rasio, setelah diselesaikan tantangan Tigress yang kami minta untuk Christian Collberg sumber -sumber tantangannya untuk membandingkan ukuran sumber asli dan versi devirtual kami. Perhatikan bahwa atas permintaan Kristen, kami tidak dapat memberikan sumber tantangan harimau, jika Anda ingin sumber -sumber ini, silakan minta langsung kepadanya :).
Kami juga mengambil 20 algoritma hash (10 terkenal, 10 dari Tigress Challenge) dan kami melindungi masing-masing algoritma ini menggunakan 46 perlindungan harimau yang berbeda (lihat bagian berikutnya). Pada akhirnya, kami memiliki bangku uji 920 binari yang dilindungi. Masing-masing dari biner yang dilindungi ini telah berhasil didevirtual menggunakan skrip solve-vm.py . Algoritma hash ini dapat ditemukan di direktori sampel dan versi devirtualnya ke direktori Deobfuscated_binaries. Tabel berikut adalah ringkasan dari hasil kami mengenai 920 sampel kami.

Untuk informasi lebih lanjut tentang opsi ini, lihat halaman 1 dan 2.