Baru-baru ini saya mendapat tugas untuk memahami program Linux biner. Namun, program itu dalam bentuk biner.
Saya menggunakan perintah file
,, strings
dan objdump
untuk memiliki sedikit gagasan tentang apa yang dilakukannya, dan apa fungsi yang dipanggil.
Tampaknya biner dikompilasi dengan informasi debug. Apa lagi yang bisa saya pelajari tentang itu?
linux
reverse-engineering
Jeff Schaller
sumber
sumber
Jawaban:
Termasuk perintah yang sudah Anda gunakan, saya akan mencoba yang terbaik untuk merinci apa yang dapat dilakukan untuk melakukan beberapa operasi forensik dalam file yang dapat dieksekusi.
strings
Perintah sederhana dapat berguna untuk memvisualisasikan pesan kesalahan teks yang memberikan petunjuk tentang fungsi biner. Ini juga cara sederhana untuk mendeteksi binari terpaket seperti pada contoh (sering dengan binari malware):file
memungkinkan untuk melihat properti yang dapat dieksekusi, yaitu:Dalam contoh ini, "not stripped" menandakan ia dikompilasi dengan info debug yang disertakan.
objdump
menghasilkan daftar pembongkaran dari executable:objdump
juga memungkinkan untuk mengetahui kompiler yang digunakan untuk mengkompilasi biner yang dapat dieksekusi:objdump
juga mencantumkan fungsi eksternal yang ditautkan secara dinamis saat dijalankan:$ objdump -T exe_file
Anda dapat menjalankan biner dalam VM yang hanya dibuat dan kemudian dibuang hanya untuk tujuan menjalankan biner. Gunakan
strace
,ltrace
,gdb
dansysdig
untuk mempelajari lebih lanjut tentang apa biner yang dilakukan pada tingkat sistem panggilan pada saat dijalankan.Itu juga dapat didebug langkah demi langkah
gdb
.Untuk mengikuti / membuat dump dari banyak aktivitas sistemnya yang menjalankannya, gunakan sysdig seperti pada:
Kami akan membahas lagi dengan analisis statis dari file biner itu sendiri pada sisa jawaban ini.
ldd exe_file
daftar perpustakaan yang digunakannya;size -A exe_file
readelf -x .rodata exe_file
daftar string statisreadelf -h exe_file
mendapat informasi header ELFreadelf -s exe_file
menampilkan simbolnm exe_file
daftar simbol dari tabel objek:Selain membongkar biner
objdump
, dekompiler juga dapat digunakan.Untuk mendekompilasi, baru-baru ini saya melakukan tantangan teknis di mana saya perlu mendekompilasi dua biner linux 64-bit kecil.
Saya mencoba menggunakan Boomerang dan Snowman. Proyek Boomerang tampaknya ditinggalkan, dan saya tidak terkesan dengan keterbatasan keduanya. Beberapa alternatif lain, baik open source / freeware / old termasuk yang baru-baru ini dirilis oleh Avast, hanya mendekompilasi binari 32 bit.
Saya akhirnya mencoba demo Hopper di MacOS (ini juga memiliki versi Linux).
Hopper membongkar dan mendekompilasi biner 32 atau 64 bit untuk OS / X, Linux dan Windows. Ia mampu menangani binari besar saat berlisensi.
Ini juga membuat grafik aliran fungsi / struktur program dan variabel.
Ini juga sedang dipelihara dan diperbarui secara aktif. Namun itu komersial.
Saya sangat menikmati menggunakannya dan hasil yang dihasilkan yang membeli lisensi. Lisensi ini jauh lebih terjangkau daripada foto hex-ray.
Dalam komentar dari jawaban ini, @ d33tah dan @Josh juga menyebutkan sebagai open source alternatif radare2 ditambah antarmuka grafis yang sesuai Cutter yang mirip dengan Hopper di Linux, tidak dapat menjamin secara pribadi untuk itu karena saya tidak menggunakannya.
Juga, karena biner target dikompilasi dengan informasi debug, Anda dapat memperoleh kembali nama asli fungsi dan variabel.
Lebih penting lagi, Anda tidak akan pernah mendapatkan kembali komentar dalam kode sumber karena mereka tidak dikompilasi dengan cara apa pun menjadi executable biner.
Meningkatkan kualitas sumber output, dan pemahaman biner akan selalu menyiratkan waktu dan pekerjaan detektif. Pengurai hanya melakukan begitu banyak pekerjaan.
Contoh output Hopper tanpa info debug:
Antarmuka grafis Hopper juga sangat bermanfaat (beberapa fungsi diperluas pada saat yang sama pada gambar ini):
lihat juga pertanyaan terkait Mengapa benar dan salah begitu besar?
sumber
strace -f
untuk melacak utas / proses anak. Ada pilihan untuk membagi output ke file terpisah untuk setiap PID, atau Anda dapat hanya/12345
dalamless
untuk mencari dan menyorot baris yang dimulai dengan PID Anda sedang tertarik. Jika hal-hal yang tidak terlalu campur aduk bersama-sama (misalnya shell script yang mulai lainnya proses, bukan utas bersamaan), ini bisa digunakan. Tapi ya, itu sangat membantu hanya untuk melihat apa config / file lain beberapa perangkat lunak membingungkan mencoba untuk membaca, ketika mencoba untuk mencari tahu mengapa itu tidak senang dengan cara Anda menginstalnya.radare2
daftar.