Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86 · Pelajaran

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.

Pelajaran 3 daripada 411 langkah

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 0x80

Mengompil 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.o
ld -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 alamat 0804808a (blok .access_granted kita).
  • 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, contohnya 4 untuk sys_write dan 1 untuk sys_exit.
  • ebx, ecx, edx: Menyimpan argumen untuk panggilan sistem, contohnya pengecam fail, alamat penimbal dan panjang bagi sys_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 eax dan ebx.
  • 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!

Percuma untuk bermula

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

  1. Menggunakan GDB untuk Menyahpepijat Bahasa Himpunan
  2. Pengenalan Alat Nyahhimpun
  3. Teknik Asas Kejuruteraan Songsang
  4. Analisis Dinamik dengan Penjejakan dan Cangkukan
← Kembali ke Bahasa Himpunan & Pengaturcaraan Sistem Aras Rendah x86