
Pada artikel ini, kami akan memahami cara mendekompilasi file ELF di Cutter menggunakan contoh tugas ringan. Pengantar Sebelumnya tentang
Bagian Terbalik: Bagian 1: C, C ++ dan Dekompilasi DotNet - Dasar-dasar Terbalik
Bagian 2: Mundur MIPS dan Golang - Dasar-dasar Terbalik
Informasi organisasi
, - , :
, , , .
, , Telegram . , , .
. , - , .
- PWN;
- (Crypto);
- c (Network);
- (Reverse Engineering);
- (Stegano);
- WEB-.
, , , .
, , Telegram . , , .
. , - , .
Instruksi palsu
Ini adalah tugas kedelapan dalam kategori ini, dan kami diberi tahu tentang adanya instruksi palsu. Mari kita mulai dengan melihat informasi file.
Saya membuka program di Cutter - GUI untuk radare2 dengan pengurai ghidra built-in yang memiliki kemampuan untuk meniru dan baru-baru ini melakukan debug. Dan segera kami mendapatkan daftar fungsi yang menarik.
Mari beralih ke fungsi utama dan mendekompilasinya.
Pada awalnya, kenari diinisialisasi dan jumlah argumen diperiksa. Setelah itu, byte 0x1f dialokasikan, di mana string konstan yang ditentukan disalin, alamat disimpan dalam variabel iVar3, dan selanjutnya byte individu dari string ini diubah. Selanjutnya, transformasi terjadi dengan string s1, yang tidak menarik bagi kami. Fungsi WPA juga diinisialisasi, dan kata sandi yang kami masukkan ditulis ke alamat auStack50 dan diteruskan bersama dengan string iVar3 yang dikonversi ke fungsi WPA, setelah itu nilai canary diperiksa dan program dihentikan.
Mari beralih ke fitur WPA.
Baris yang sebelumnya dimasukkan ke dalam program diubah lagi, setelah itu kedua baris dibandingkan. Jika mereka sama, fungsi blowfish () akan dipanggil, yang akan menampilkan kepada kita kata sandi yang benar untuk perubahan, jika tidak fungsi RS4 () akan dipanggil.
Karena dekripsi dari nilai yang dimasukkan sebelumnya terjadi, kita dapat men-debug program dan mengubah hasil perbandingan. Mari kita pergi ke tempat string dibandingkan dan menetapkan breakpoint.
Sekarang mari kita mulai debugging - F9, dan masukkan argumen program.
Klik tombol lebih jauh di bilah navigasi sampai kami mencapai titik putus kami. Hasil dari membandingkan string menggunakan fungsi strcmp () akan ditulis ke register EAX, yang kemudian akan diperiksa. Karena string tidak sama, register ini berisi nilai 1.
Mari kita ubah ke 0 untuk mengubah cabang dari perilaku program dan terus mengeksekusi. Setelah selesai di konsol Cutter, kami akan melihat jawaban yang benar, yang harus disampaikan di situs.
Ptrace
Unduh program dan periksa.
Tidak ada yang mewah, Anda perlu mencari kata sandi. Tetapi ada sedikit perlindungan terhadap debugging (ptrace) dan transisi yang perlu diedit secara manual. Ini adalah bagaimana grafik ditampilkan di IDA Pro.
Kami juga akan melakukan tugas ini di Cutter, ini akan secara otomatis memperbaiki semua transisi.
Mari beralih ke mendekompilasi fungsi utama.
Dan kata sandi yang benar adalah 4 huruf yang sesuai dari string yang ditentukan di awal.
ARM ELF
Ini adalah binar untuk arsitektur ARM, kami membuangnya ke Cutter dan memilih fungsi utama. Dari grafik fungsi, kita melihat apa yang kita hadapi, dan kemungkinan besar ini adalah perbandingan karakter demi karakter.
Kami membuka decompiler dan menganalisis program.
Pertama-tama, keberadaan argumen program dan panjangnya diperiksa, itu harus sama dengan 6.
Jadi variabel var_14h bertindak sebagai indeks dan mengambil nilai 0. Dan kemudian sejumlah perbandingan terjadi, yang akan kita anggap sebagai kondisi:
str [0] == str [5]
str [0] + 1 == str [1]
str [3] + 1 == str [0]
str [2] + 4 == str [5]
str [4] + 2 == str [2]
0 == str [3] ^ 0x72
Mari menerapkan algoritme dan mendapatkan sandi.
Dan kami mendapatkan kata sandi yang diperlukan. Itu saja untuk saat ini.
Anda dapat bergabung dengan kami diTelegram . Di sana Anda bisa menemukan materi menarik, bocoran kursus, dan software. Mari kita kumpulkan komunitas, di mana akan ada orang-orang yang berpengalaman di banyak bidang IT, kemudian kita selalu bisa saling membantu dalam setiap masalah IT dan keamanan informasi.