ScratchABit adalah disassembler inkremental interaktif dengan kemampuan analisis aliran data/kontrol. ScratchABit didedikasikan untuk upaya komunitas rekayasa balik OpenSource (rekayasa balik untuk menghasilkan driver/firmware OpenSource untuk perangkat keras yang tidak didukung dengan baik oleh vendor, untuk interoperabilitas perangkat keras dan perangkat lunak, untuk penelitian keamanan).
ScratchABit mendukung API IDAPython yang terkenal di komunitas untuk menulis modul pembongkaran/ekstensi.
ScratchABit masih dalam proses, fitur ditambahkan sesuai kebutuhan, kontribusi dipersilahkan.
ScratchABit dirilis berdasarkan ketentuan GNU General Public License v3 (GPLv3).
Tidak boleh ditulis dalam bahasa yang membingungkan. Ini termasuk bahasa yang tingkatnya terlalu rendah, yang memungkinkan untuk mengakses variabel yang tidak diinisialisasi, yang tidak membedakan antara variabel dan fungsi/prosedur, yang memulai indeks array dari angka arbitrer, dll., dll. ScratchABit ditulis dengan Python ( versi modern, Python3) untuk kesenangan dan kewarasan Anda.
Kerangka antarmuka pengguna harus memungkinkan interaksi pengguna pada tingkat yang diperlukan, bukan menambah ketergantungan, pembengkakan, masalah, dan ketidakcocokan antar versi kerangka kerja. ScratchABit saat ini menggunakan antarmuka pengguna teks layar penuh yang sederhana, menggunakan rangkaian escape terminal ANSI/VT100 (ya, bahkan pustaka kutukan dianggap terlalu membebani ketergantungan untuk dipaksakan kepada pengguna).
Harus memanfaatkan format teks yang mudah digunakan untuk menyimpan "database", untuk memfasilitasi penggunaan kembali dan penulisan alat yang mudah, serta penyimpanan dalam sistem kontrol versi.
Untuk menggunakan ScratchABit, Anda perlu menginstal Python3 (diuji dengan Python 3.3 hingga 3.7) dan terminal VT100 (minimum) atau XTerm (disarankan) atau emulator terminal (sistem Unix apa pun harus mematuhinya, seperti Linux/BSD/dll., lihat FAQ di bawah untuk lagi).
Kloning kode menggunakan:
git clone --recursive https://github.com/pfalcon/ScratchABit
Jika Anda mengkloning kode tanpa --recursive
, jalankan git submodule update --init
di direktori ScratchABit.
ScratchABit sekarang dikirimkan dengan plugin CPU berbasis Capstone Engine, yang memungkinkan akses ke sejumlah arsitektur CPU. Untuk menggunakannya, modul pengikatan Python terbaru untuk Capstone harus diinstal (sebagai preferensi terhadap paket yang dikirimkan oleh distribusi OS, yang sering kali sudah ketinggalan zaman). Cara termudah untuk menginstalnya adalah ke direktori paket pengguna Python:
pip3 install --no-cache-dir --user capstone
Alternatifnya adalah menginstalnya ke lingkungan virtual Python dalam direktori ScratchABit:
python3 -m venv .venv
source .venv/bin/activate
pip3 install --no-cache-dir capstone
Setiap kali Anda membuka sesi terminal baru untuk bekerja dengan ScratchABit, jalankan kembali perintah source .venv/bin/activate
untuk mengaktifkan lingkungan virtual.
Jika tidak ada cara di atas yang berhasil, Anda dapat mencoba menginstal paket batu penjuru di seluruh sistem (tidak disarankan):
sudo pip3 install --system capstone
Jika Anda ingin membongkar file dalam format executable yang menggambarkan dirinya sendiri (seperti ELF), teruskan saja sebagai argumen ke ScratchABit.py
. Repositori menyertakan sejumlah file example-*.elf
untuk berbagai arsitektur untuk memulai dengan cepat. Misalnya, untuk mencoba versi x86 32bit:
python3 ScratchABit.py example-x86_32.elf
Alternatifnya, jika Anda ingin membongkar file biner mentah, Anda perlu membuat file .def (definisi), untuk menentukan area memori apa yang ditentukan untuk kode tersebut, di alamat mana untuk memuat file biner, dll. (Catatan: a . File def mungkin berguna untuk file .elf dan file serupa juga.) Repositori menyertakan kode biner mentah x86_64 sederhana, dan file example-x86_64.def yang sesuai (lihat ke dalam untuk deskripsi opsi yang tersedia):
python3 ScratchABit.py example-x86_64.def
Tekan F9 untuk mengakses menu (mouse juga berfungsi di terminal yang kompatibel dengan XTerm). Tekan F1 untuk mendapatkan bantuan tentang pengikatan tombol (sebagian besar tindakan juga dapat diakses melalui menu). Alur kerja ScratchABit mirip dengan dissambler interaktif lainnya (beberapa pengalaman sebelumnya atau pembacaan latar belakang mungkin berguna).
Plugin prosesor IDAPython dapat dimuat dari mana saja di jalur modul Python. Alternatifnya, Anda dapat menghubungkan/menyalin file .py
plugin ke subdirektori plugins/cpu/
.
Setelah plugin tersedia, buat file definisi baru berdasarkan example-x86_64.def
yang menetapkan nama modul plugin (tanpa ekstensi .py
) di baris cpu xxx
.
Untuk contoh yang sangat sederhana yang menggunakan plugin eksternal, lihat file esp8266.def yang berfungsi dengan plugin xtensa.py dari repositori ida-xtensa2.
T: Prosesor/arsitektur apa yang didukung?
J: ScratchABit tidak mendukung arsitektur prosesor apa pun, ia sepenuhnya dapat ditargetkan ulang menggunakan plugin IDAPython API. Banyak plugin yang tersedia, menulis plugin baru itu mudah. Agar pengguna dapat menguji ScratchABit, plugin prosesor x86 sederhana disertakan dalam distribusi, menggunakan disassembler Pymsasid di bawah tenda.
Mulai versi 2.0, plugin Capstone juga disertakan, memungkinkan akses ke sejumlah arsitektur, termasuk x86, ARM, MIPS, PowerPC, SPARC, dll. (dukungan arsitektur diaktifkan secara bertahap berdasarkan pengujian pengguna).
Anda dapat membaca tentang plugin yang dikirimkan bersama dengan ScratchABit di direktori README untuk plugins/cpu/
.
T: Debugger?
J: ScratchABit didedikasikan untuk analisis statis dan dukungan mudah untuk arsitektur CPU baru (cukup kodekan plugin CPU baru dengan Python - Anda bisa mendapatkan hasil awal dalam beberapa jam). Analisis dinamis tidak dianggap sebagai fitur inti dan tidak ada rencana segera untuk mengimplementasikannya. Patch dipersilakan.
T: Dekompiler?
J: Ada proyek terkait, yang disebut ScratchABlock untuk analisis, transformasi, dan dekompilasi program yang mendalam. Diharapkan seiring dengan matangnya ScratchABlock, beberapa fungsinya akan tersedia dalam ScratchABit (mungkin melalui plugin).
T: Saya tidak menggunakan Linux, bagaimana cara menjalankan ScratchABit?
J: Instal Linux di emulator/VM di sistem Anda dan bergembiralah.
Q: Wajib screenshot?
J: Tentu: