Teknik Asas Kejuruteraan Songsang
Gunakan kemahiran penyahpepijatan dan nyahhimpun anda untuk menganalisis fail binari ringkas, mengenal pasti fungsi dan memahami logik atur cara tanpa kod sumber.
Teknik Asas Kejuruteraan Songsang ialah pelajaran Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 merangkumi sejumlah 4 pelajaran.
Apakah Kejuruteraan Songsang?
Kejuruteraan songsang (RE) ialah proses menganalisis perisian untuk memahami cara dalaman perisian itu berfungsi tanpa mempunyai akses kepada kod sumber asalnya. Anggaplah anda sebagai penyiasat bagi atur cara!
Proses ini melibatkan pengambilan atur cara yang telah dikompil (binari) dan bekerja secara berundur untuk mengetahui perkara yang dilakukannya, cara atur cara itu melakukannya dan kadangkala sebabnya.
Kit Alat RE Anda
Untuk melakukan kejuruteraan songsang, anda terutamanya akan menggunakan dua jenis alat:
- Penyahtafsir Himpunan: Alat ini menukar kod mesin (bait mentah sesebuah atur cara) kembali kepada bahasa himpunan yang boleh dibaca manusia. Contoh popular termasuk
objdump, IDA Pro dan Ghidra. Alat ini ialah ‘mata’ anda untuk melihat arahan atur cara. - Penyahpepijat: Alat seperti GDB (GNU Debugger) membolehkan anda menjalankan atur cara langkah demi langkah, menjeda pelaksanaannya dan memeriksa kandungan daftar serta memori pada bila-bila masa. Alat ini ialah ‘tangan’ anda untuk berinteraksi dengan atur cara yang sedang berjalan.
Kenali Atur Cara Sasaran Kita
Untuk pelajaran ini, kita akan menganalisis atur cara bahasa himpunan x86 yang ringkas. Bayangkan anda hanya mempunyai versi terkompilnya dan perlu mengetahui logiknya!
Atur cara ini mensimulasikan ‘semakan kata laluan’ asas dengan membandingkan dua nilai yang ditetapkan terus dalam kod dan mencetak mesej berdasarkan hasil perbandingan.
section .data
msg_access db "Access granted!", 0xA
len_access equ $ - msg_access
msg_denied db "Access denied.", 0xA
len_denied equ $ - msg_denied
section .text
global _start
_start:
; Simulate checking a "password" value
mov eax, 1234 ; Our "secret" password value
mov ebx, 5678 ; A "user-provided" value
cmp eax, ebx ; Compare secret with user input
je .access_granted ; If equal, jump to access granted
.access_denied:
mov eax, 4 ; sys_write
mov ebx, 1 ; stdout
mov ecx, msg_denied
mov edx, len_denied
int 0x80
jmp .exit
.access_granted:
mov eax, 4 ; sys_write
mov ebx, 1 ; stdout
mov ecx, msg_access
mov edx, len_access
int 0x80
.exit:
mov eax, 1 ; sys_exit
mov ebx, 0 ; Exit code 0
int 0x80Mengompil dan Menyahhimpun
Pertama sekali, kita akan mengompil atur cara bahasa himpunan kita menjadi fail boleh laku. Pada Linux, proses ini biasanya melibatkan penghimpun (seperti NASM) dan pemaut (seperti LD).
nasm -f elf32 program.asm -o program.old -m elf_i386 program.o -o program
Kemudian, kita menggunakan penyahtafsir himpunan seperti objdump untuk melihat kod mesin yang ditukar kembali kepada bahasa himpunan:
objdump -d program
Berikut ialah petikan yang mungkin anda lihat:
08048060 <_start>:
8048060: b8 d2 04 00 00 mov $0x4d2,%eax
8048065: bb 36 16 00 00 mov $0x1636,%ebx
804806a: 39 d8 cmp %ebx,%eax
804806c: 74 1c je 804808a <.access_granted>
Mengenal Pasti Titik Masuk
Semasa melakukan kejuruteraan songsang, salah satu perkara pertama yang anda cari ialah titik masuk atur cara. Di sinilah pelaksanaan bermula.
Bagi fail boleh laku Linux yang dikompil daripada bahasa himpunan, titik masuk biasanya dilabel sebagai _start. Dalam keluaran nyahhimpunan kita, anda boleh melihat label <_start> pada alamat 08048060.
Ini memberitahu anda dengan tepat tempat CPU mula melaksanakan arahan apabila atur cara dimuatkan.
Menjejak Aliran dan Lompatan Atur Cara
Untuk memahami logik sesebuah atur cara, anda perlu menjejak aliran pelaksanaannya. Arahan lompatan bersyarat penting untuk memahami pembuatan keputusan, seperti pernyataan if/else.
Dalam contoh kita, selepas membandingkan eax dan ebx dengan cmp %ebx,%eax, kita melihat je 804808a <.access_granted>.
cmp: Membandingkan dua nilai dan menetapkan bendera CPU.je(Lompat jika Sama): Jika hasil perbandingan adalah sama, pelaksanaan melompat ke alamat0804808a(blok.access_grantedkita).- Jika tidak sama, pelaksanaan diteruskan ke arahan seterusnya mengikut turutan (blok
.access_denied).
Memahami Panggilan Sistem
Atur cara berinteraksi dengan sistem pengendalian melalui panggilan sistem. Pada Linux x86 (32-bit), panggilan ini biasanya dibuat menggunakan arahan int 0x80.
Sebelum int 0x80, daftar tertentu dimuatkan dengan nilai:
eax: Mengandungi nombor panggilan sistem, contohnya4untuksys_writedan1untuksys_exit.ebx, ecx, edx: Menyimpan argumen untuk panggilan sistem, contohnya pengecam fail, alamat penimbal dan panjang bagisys_write.
Dengan memerhatikan corak ini, anda boleh mengenal pasti tindakan seperti menulis pada konsol atau keluar daripada atur cara.
Mengekstrak Rentetan dan Data
Mesej dan data statik lain disimpan dalam bahagian data binari. Anda biasanya boleh melihatnya menggunakan objdump -s -j .data program atau objdump -s -j .rodata program.
Dalam bahasa himpunan, anda akan melihat arahan yang memuatkan alamat rentetan ini ke dalam daftar, contohnya mov ecx, 0x8049080, yang menunjukkan bahawa 0x8049080 menunjuk kepada suatu rentetan.
Dalam contoh kita, mesej “Akses dibenarkan!” dan “Akses ditolak.” akan ditemui dalam bahagian .data, dan alamatnya dihantar kepada sys_write.
Membina Semula Logik Asal
Dengan menggabungkan semua pemerhatian ini, kita boleh membina semula logik asal atur cara:
- Atur cara bermula pada
_start. - Atur cara memuatkan dua nilai integer tertentu ke dalam
eaxdanebx. - Atur cara membandingkan kedua-dua nilai ini.
- Jika nilainya sama, atur cara melompat ke bahagian yang mencetak “Akses dibenarkan!” pada konsol.
- Jika nilainya tidak sama, atur cara meneruskan pelaksanaan ke bahagian yang mencetak “Akses ditolak.” pada konsol.
- Selepas mencetak mesej, atur cara keluar dengan baik.
Inilah inti pati kejuruteraan songsang: memahami tujuan dan kelakuan atur cara daripada bentuk terkompilnya.
Semakan Pantas
Perhatikan coretan x86 yang dinyahhimpun berikut. Andaikan 0x402000 mengandungi rentetan "Yes\n" dan 0x402008 mengandungi "No\n".
0x401000: mov eax, 0x5
0x401005: mov ebx, 0x5
0x40100a: cmp eax, ebx
0x40100c: jne 0x401018
0x40100e: mov edi, 0x402000 ; "Yes\n"
0x401013: call 0x401040 <puts@plt>
0x401018: mov edi, 0x402008 ; "No\n"
0x40101d: call 0x401040 <puts@plt>
Imbas Kembali Pelajaran
Dalam pelajaran ini, anda telah mempelajari teknik asas kejuruteraan balikan:
- Memahami maksud RE dan kepentingannya.
- Mengenal pasti alat utama seperti penyahhimpun (
objdump) dan penyahpepijat (GDB). - Mencari titik mula atur cara (
_start). - Menjejaki aliran atur cara menggunakan lompatan bersyarat (
cmp,je). - Mengenal pasti panggilan sistem (
int 0x80) dan parameternya. - Mengekstrak rentetan dan data yang bermakna daripada fail binari.
Dengan menerapkan teknik ini, anda boleh mula membina semula logik dan tingkah laku atur cara walaupun tanpa kod sumber asalnya!
Pelajari Assembly dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Soalan Lazim
Adakah pelajaran “Teknik Asas Kejuruteraan Songsang” percuma?
Ya — teks penuh “Teknik Asas Kejuruteraan Songsang” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86, tingkat taraf kepada CoddyKit PRO. Kursus Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Teknik Asas Kejuruteraan Songsang”?
Gunakan kemahiran penyahpepijatan dan nyahhimpun anda untuk menganalisis fail binari ringkas, mengenal pasti fungsi dan memahami logik atur cara tanpa kod sumber. Anda berlatih Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Teknik Asas Kejuruteraan Songsang” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 ini?
Ya. Setiap pelajaran Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Menggunakan GDB untuk Menyahpepijat Bahasa Himpunan
- Pengenalan Alat Nyahhimpun
- Teknik Asas Kejuruteraan Songsang
- Analisis Dinamik dengan Penjejakan dan Cangkukan