
Tenet adalah plugin IDA Pro untuk menjelajahi jejak eksekusi. Tujuan plugin ini adalah untuk memberikan kontrol manusia yang lebih alami untuk menavigasi jejak eksekusi terhadap biner yang diberikan. Dasar karya ini berasal dari keinginan untuk meneliti metode baru atau inovatif untuk memeriksa dan menyaring pola eksekusi yang kompleks dalam perangkat lunak.
Untuk konteks lebih lanjut tentang proyek ini, silakan baca blogpost tentang rilis awalnya.
Terima kasih khusus kepada Qira / Geohot et al. untuk inspirasi.
Tenet adalah plugin Python 3 lintas platform (Windows, MacOS, Linux). Dibutuhkan nol dependensi pihak ketiga, membuat kode baik portabel dan mudah diinstal.
Dari konsol Python Disassembler Anda, jalankan perintah berikut untuk menemukan direktori pluginnya:
import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins") Salin isi repositori /plugins/ folder ini ke direktori yang terdaftar.
Restart disassembler Anda.
Plugin ini hanya didukung untuk IDA 7.5 dan lebih baru.
Setelah diinstal dengan benar, akan ada entri menu baru yang tersedia di Disassembler. Ini dapat digunakan untuk memuat jejak eksekusi yang dikumpulkan secara eksternal ke dalam prinsip.

Karena ini adalah rilis awal, Tenet hanya menerima jejak teks sederhana yang dapat dibaca manusia. Silakan merujuk ke readme penelusuran di repositori ini untuk informasi tambahan tentang format jejak, keterbatasan, dan pelacak referensi.
Saat menggunakan Tenet, plugin akan 'melukis' jejak untuk menunjukkan aliran eksekusi ke depan (biru) dan ke belakang (merah) dari posisi Anda saat ini dalam jejak eksekusi aktif.

Untuk step ke depan atau mundur melalui waktu, Anda cukup menggulir sambil melayang di atas garis waktu di sisi kanan Disassembler. Untuk step over panggilan fungsi, tahan SHIFT saat menggulir.
Timeline jejak akan merapat di sisi kanan Disassembler. Widget ini digunakan untuk memvisualisasikan berbagai jenis peristiwa di sepanjang jejak garis waktu dan melakukan navigasi dasar seperti dijelaskan di atas.

Dengan mengklik dan menyeret seluruh timeline , dimungkinkan untuk memperbesar bagian tertentu dari jejak eksekusi. Tindakan ini dapat diulangi beberapa kali untuk mencapai granularitas yang diinginkan.
Klik dua kali pointer instruksi di jendela register akan menyorotnya dengan warna merah, mengungkapkan semua lokasi instruksi dieksekusi di seluruh jejak timeline.

Untuk melompat di antara eksekusi, gulir ke atas atau ke bawah sambil melayang -layang pointer instruksi yang disorot .
Selain itu, Anda dapat mengklik kanan dalam daftar pembongkaran dan memilih salah satu entri menu berbasis navigasi untuk dengan cepat mencari pelaksanaan instruksi yang menarik.

Hotkey F2 asli IDA juga dapat digunakan untuk mengatur breakpoint pada instruksi sewenang -wenang.
Dengan mengklik dua kali byte baik dalam tampilan tumpukan atau memori, Anda akan langsung melihat semua baca/ditulis ke alamat yang divisualisasikan di seluruh jejak timeline. Kuning menunjukkan memori yang dibaca , biru menunjukkan penulisan memori.

Breakpoint memori dapat dinavigasi menggunakan teknik yang sama yang dijelaskan untuk breakpoint eksekusi. Klik dua kali byte, dan gulir sambil melayang -layang byte yang dipilih untuk mencari jejak ke masing -masing aksesnya.
Klik kanan byte yang menarik akan memberi Anda opsi untuk mencari di antara memori membaca / menulis / mengakses jika ada tindakan navigasi spesifik yang ada dalam pikiran Anda.

Untuk menavigasi tampilan memori ke alamat sewenang -wenang, klik ke tampilan memori dan tekan G untuk memasukkan alamat atau simbol basis data untuk mencari tampilan.
Dimungkinkan untuk mengatur breakpoint memori di seluruh wilayah memori dengan menyorot blok memori, dan mengklik dua kali untuk mengatur breakpoint akses.

Seperti halnya breakpoint memori normal, melayang -layang di wilayah tersebut dan menggulir dapat digunakan untuk melintasi antara akses yang dilakukan ke wilayah memori yang dipilih.
Dalam rekayasa terbalik, cukup umum untuk menghadapi situasi di mana Anda bertanya pada diri sendiri "Instruksi mana yang mengatur register ini ke nilai saat ini?"
Menggunakan Tenet, Anda dapat mencari mundur ke instruksi itu dalam satu klik.

Mencari ke belakang sejauh ini merupakan arah yang paling umum untuk menavigasi seluruh perubahan register ... tetapi untuk ketangkasan Anda juga dapat menantikan penugasan register berikutnya menggunakan panah biru di sebelah kanan register.
'Shell' sederhana disediakan untuk menavigasi ke cap waktu tertentu di jejak. Menempelkan (atau mengetik ...) cap waktu ke dalam cangkang dengan atau tanpa koma sudah cukup.

Menggunakan titik seru, Anda juga dapat mencari 'persentase' tertentu ke dalam jejak. Masuk !100 akan mencari instruksi akhir dalam jejak, di mana !50 akan mencari sekitar 50% dari jalan melalui jejak. !last akan mencari instruksi yang dapat dilayari terakhir yang dapat dilihat di Disassembler.
Tenet mengirim dengan dua tema default - tema 'terang', dan 'gelap'. Bergantung pada warna yang saat ini digunakan oleh Disassembler Anda, Tenet akan berusaha untuk memilih tema yang tampaknya paling tepat.

File tema disimpan sebagai JSON sederhana pada disk dan sangat dapat dikonfigurasi. Jika Anda tidak senang dengan tema atau warna default, Anda dapat membuat tema sendiri dan cukup letakkan di direktori tema pengguna.
Tenet akan mengingat preferensi tema Anda untuk beban dan penggunaan di masa mendatang.
Waktu dan motivasi Izin dana, pekerjaan di masa depan mungkin termasuk:
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.