Kang Asu
CallObfuscator - Mengaburkan Windows Apis Tertentu Dengan API Berbeda
Mengaburkan (menyembunyikan) impor PE dari alat analisis statis / dinamis.
Teori
Ini cukup maju, katakanlah saya telah menggunakan VirtualProtect
dan saya ingin mengaburkannya dengan Sleep
, alat akan memanipulasi IAT sehingga thunk yang menunjuk VirtualProtect
akan mengarah ke Sleep
, sekarang saat mengeksekusi file, windows loader akan memuat Sleep
alih-alih VirtualProtect
, dan memindahkan eksekusi ke titik masuk, dari sana eksekusi akan diarahkan ke shellcode, alat yang diletakkan sebelumnya, untuk menemukan alamat VirtualProtect
dan menggunakannya untuk menggantikan alamat Sleep
yang ditetapkan sebelumnya oleh loader.
Cara Penggunaan
- Ini dapat dimasukkan langsung sebagai perpustakaan, lihat cuplikan berikut (berdasarkan contoh), Anda juga dapat melihat di cli.cpp .
#include <cobf.hpp>
int main() {
cobf obf_file = cobf("sample.exe");
obf_file.load_pe();
obf_file.obf_sym("kernel32.dll", "SetLastError", "Beep");
obf_file.obf_sym("kernel32.dll", "GetLastError", "GetACP");
obf_file.generate("sample_obfuscated.exe");
obf_file.unload_pe();
return 0;
};
- Juga dapat digunakan sebagai alat baris perintah dengan menyediakannya dengan jalur PE input, jalur PE output dan secara opsional jalur ke file konfigurasi (defaultnya adalah
config.ini
).cobf.exe <input file> <out file> [config file]
File konfigurasi berisi kebingungan yang diperlukan (dll, simbol, ...).
Berikut adalah template untuk konten file konfigurasi
; Template for the config file:
; * Sections can be written as:
; [dll_name]
; old_sym=new_sym
; * The dll name is case insensitive, but
; the old and the new symbols are not.
; * You can use the wildcard on both the
; dll name and the old symbol.
; * You can use '#' at the start of
; the old or the new symbol to flag
; an ordinal.
; * The new symbol should be exported
; by the dll so the windows loader can resolve it.
; For example:
; * Obfuscating all of the symbols
; imported from user32.dll with ordinal 1600.
[user32.dll]
*=#1600
; * Obfuscating symbols imported from both
; kernel32.dll and kernelbase.dll with Sleep.
[kernel*.dll]
*=Sleep
; * Obfuscating fprintf with exit.
[*]
fprintf=exit
Contoh
Buat contoh kode ini
#include <windows.h>
#include <stdio.h>
int main() {
SetLastError(5);
printf("Last error is %d\n", GetLastError());
return 0;
};
Setelah membuatnya, seperti inilah tampilan impor kernel32
Sekarang mari kita mengaburkan keduanya SetLastError
dan GetLastError
dengan Beep
dan GetACP
(sebenarnya api apa pun dari kernel32 akan baik-baik saja meskipun tidak diimpor sama sekali).
Konfigurasi yang digunakan adalah
[kernel32.dll]
SetLastError=Beep
GetLastError=GetACP
Berikut adalah outputnya (Anda juga bisa menggunakan library secara langsung seperti yang ditunjukkan di atas).
Sekali lagi mari kita lihat impor kernel32
Tidak ada SetLastError
atau GetLastError
konfirmasi bahwa dua file akan bekerja dengan baik
Dampak
IDA HexRays Decompiler
Debugger IDA
Panduan
ApiMonitor
Itu karena semua alat analisis statis bergantung pada apa nama api yang tertulis di IAT yang dapat dimanipulasi seperti yang ditunjukkan.
Untuk ApiMonitor, karena menggunakan pengait IAT, masalah yang sama muncul.
Di sisi lain, untuk alat seperti x64dbg, nama api yang ditampilkan hanya akan bergantung pada apa yang sebenarnya dipanggil (bukan yang tertulis di IAT).
Tambahan
- Menghapus PE yang dikaburkan dari memori tidak akan membatalkan penyamarannya , karena IAT yang dimanipulasi akan sama.
- Tujuan utama alat ini adalah mengacaukan proses analisis (membuatnya lebih lambat).
- Seseorang dapat mengaburkan simbol yang diimpor (dengan nama atau ordinal) dengan simbol lain (nama atau ordinal).
- Kode shell dijalankan sebagai callback tls pertama yang memproses simbol yang dikaburkan yang diperlukan oleh callback tls lain sebelum titik masuk dieksekusi.
- Kode shell dikirimkan sebagai kode c, dibuat saat alat dikompilasi untuk memudahkan pengeditan.
- Nama simbol yang dikaburkan diselesaikan dengan hash bukan dengan nama secara langsung.
- Alat tersebut menonaktifkan relokasi dan menghapus salah satu simbol debug.
- Alat tersebut membuat bagian rwx baru yang diberi nama
.cobf
untuk menyimpan kode shell dan data lain yang diperlukan. - Ini dapat digunakan beberapa kali pada PE yang dikaburkan yang sama.
- Diuji hanya pada Windows 10 x64.
- Dapatkan sumber dengan .
git clone https://github.com/d35ha/CallObfuscator
- Unduh binari dari Bagian Rilis .
SEMUA
- Shellcode kebingungan (mungkin dengan obfusion ).
- Mendukung simbol-simbol yang memuat penundaan.
- Minimalkan ukuran bagian yang dibuat.
- Kompilasi hashing waktu.
- Pengujian yang lebih baik.
Regards
Kang Asu
No comments:
Post a Comment
# Silahkan berkomentar, bertanya dan kritik dengan sopan
# Disini anda boleh menyisipkan Link di kolom komentar
# Tetapi akan saya moderasi atau Review terlebih dahulu tiap komentar
# Jangan sampai komentar anda mengandung SPAM.
# Terima Kasih - Regards Muhammad Sobri Maulana