
Patching Assembly Code untuk mengubah perilaku program yang ada tidak jarang dalam analisis malware, rekayasa balik perangkat lunak, dan domain penelitian keamanan yang lebih luas. Proyek ini memperluas Disassembler Ida Pro yang populer untuk menciptakan alur kerja tambalan biner interaktif yang lebih kuat yang dirancang untuk iterasi cepat.
Proyek ini saat ini ditenagai oleh garpu kecil dari mesin Keystone yang ada di mana -mana, mendukung penambalan x86/x64 dan ARM/ARM64 dengan rencana untuk memungkinkan arsitektur Keystone yang tersisa dalam rilis mendatang.
Terima kasih khusus kepada Hex-Rays untuk mendukung pengembangan plugin ini.
Plugin ini membutuhkan IDA 7.6 dan Python 3. Ini mendukung Windows, Linux, dan MacOS.
Harap dicatat, versi IDA yang lebih lama (8.2 dan di bawah) tidak kompatibel dengan Python 3.11 ke atas.
Jalankan baris berikut di konsol IDA untuk secara otomatis menginstal plugin:
import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' ). read ()) import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' , cafile = '/etc/ssl/cert.pem' ). read ())Atau, plugin dapat diinstal secara manual dengan mengunduh paket plugin yang dapat didistribusikan untuk platform Anda masing -masing dari halaman rilis dan membuka ritsletingnya ke folder plugin Anda.
Sangat disarankan Anda menginstal plugin ini ke direktori plugin pengguna IDA:
import ida_diskio , os ; print ( os . path . join ( ida_diskio . get_user_idadir (), "plugins" ))Plugin Patching akan secara otomatis memuat untuk arsitektur yang didukung (x86/x64/arm/arm64) dan menyuntikkan tindakan penambalan yang relevan ke dalam menu konteks klik kanan dari tampilan IDA yang dibongkar:

Daftar lengkap tindakan penambalan kontekstual dijelaskan di bagian berikut.
Dialog Patching Utama dapat diluncurkan melalui Tindakan Perakitan di menu Konteks Klik Kanan. Ini mensimulasikan tampilan pembongkaran IDA dasar yang dapat digunakan untuk mengedit satu atau beberapa instruksi secara berurutan.

Jalur perakitan adalah bidang yang dapat diedit yang dapat digunakan untuk memodifikasi instruksi secara real-time. Menekan Enter akan melakukan (tambalan) instruksi yang dimasukkan ke dalam database.
Lokasi Anda saat ini (alias kursor Anda) akan selalu disorot dengan warna hijau. Instruksi yang akan clobbered sebagai hasil dari patch / edit Anda akan disorot dengan warna merah sebelum melakukan patch.

Akhirnya, tombol panah UP dan DOWN dapat digunakan saat masih fokus pada bidang teks perakitan yang dapat diedit untuk dengan cepat memindahkan kursor ke atas dan ke bawah tampilan pembongkaran tanpa menggunakan mouse.
Tindakan tambalan yang paling umum adalah untuk mengeluarkan satu atau lebih instruksi. Untuk alasan ini, tindakan NOP akan selalu terlihat di menu klik kanan untuk akses cepat.

Instruksi individual dapat di -nop'ed, serta berbagai instruksi yang dipilih.
Memaksa lompatan bersyarat untuk selalu menjalankan jalur 'baik' adalah aksi tambalan umum lainnya. Plugin hanya akan menunjukkan tindakan ini saat mengklik kanan instruksi lompatan bersyarat.

Jika Anda tidak pernah ingin lompatan bersyarat untuk diambil, Anda bisa mendapatkannya saja!
Patch dapat disimpan (diterapkan) ke Executable yang Dipilih melalui submenu Patching kapan saja. Tindakan yang cepat berlaku membuatnya lebih cepat untuk menyimpan tambalan berikutnya menggunakan pengaturan yang sama.

Plugin ini juga akan melakukan upaya aktif untuk mempertahankan cadangan ( .bak ) dari yang dapat dieksekusi asli yang digunakan untuk 'bersih' menerapkan set patch basis data saat ini selama setiap simpan.
Akhirnya, jika Anda tidak pernah senang dengan tambalan, Anda dapat dengan mudah mengklik kanan, blok instruksi untuk mengembalikannya ke nilai aslinya.

Meskipun 'mudah' untuk mengembalikan byte kembali ke nilai aslinya, mungkin 'sulit' untuk mengembalikan analisis ke keadaan sebelumnya. Mengembalikan tambalan kadang -kadang membutuhkan perbaikan manusia tambahan.
Waktu dan motivasi memungkinkan, pekerjaan di masa depan mungkin termasuk:
xor eax, eax; ret; ) Pretty: mov [rsp+48h+dwCreationDisposition], 3
Raw: mov [rsp+20h], 3
Saya menyambut kontribusi eksternal, masalah, dan permintaan fitur. Harap buat permintaan tarik apa pun ke cabang develop repositori ini jika Anda ingin mereka dipertimbangkan untuk rilis di masa depan.