Kam1n0 v2.x adalah platform manajemen dan analisis perakitan yang dapat diskalakan. Hal ini memungkinkan pengguna untuk terlebih dahulu mengindeks kumpulan biner (besar) ke dalam repositori yang berbeda dan menyediakan layanan analitik yang berbeda seperti pencarian klon dan klasifikasi. Ini mendukung akses multi-tenancy dan pengelolaan repositori perakitan dengan menggunakan konsep Application . Sebuah instance aplikasi berisi repositori eksklusifnya sendiri dan menyediakan layanan analitik khusus. Mengingat keserbagunaan tugas rekayasa balik, server Kam1n0 v2.x saat ini menyediakan tiga jenis aplikasi pencarian klon yang berbeda: Asm-Clone , Sym1n0 , dan Asm2Vec , dan klasifikasi yang dapat dieksekusi berdasarkan Asm2Vec . Jenis aplikasi baru dapat ditambahkan lebih lanjut ke platform.
Seorang pengguna dapat membuat beberapa contoh aplikasi. Sebuah contoh aplikasi dapat dibagikan di antara sekelompok pengguna tertentu. Akses baca-tulis repositori aplikasi dan status on-off dapat dikontrol oleh pemilik aplikasi. Server Kam1n0 v2.x dapat melayani aplikasi secara bersamaan menggunakan beberapa kumpulan sumber daya bersama.
Kam1n0 dikembangkan oleh Steven HH Ding dan Miles Q. Li di bawah pengawasan Benjamin CM Fung dari Data Mining and Security Lab di McGill University di Kanada. Ini memenangkan hadiah kedua di Kontes Plug-In Hex-Rays 2015. Jika menurut Anda Kam1n0 berguna, silakan kutip makalah kami:
SHH Ding, BCM Fung, dan P. Charland. Kam1n0: Pencarian Klon Perakitan berbasis MapReduce untuk Rekayasa Terbalik. Dalam Prosiding Konferensi Internasional ACM SIGKDD ke-22 tentang Penemuan Pengetahuan dan Penambangan Data (SIGKDD) , halaman 461-470, San Francisco, CA: ACM Press, Agustus 2016.
SHH Ding, BCM Fung, dan P. Charland. Asm2Vec: meningkatkan ketahanan representasi statis untuk pencarian klon biner terhadap kebingungan kode dan optimasi kompiler. Dalam Prosiding Simposium IEEE ke-40 tentang Keamanan dan Privasi (S&P) , 18 halaman, San Francisco, CA: IEEE Computer Society, Mei 2019.
Aplikasi Asm-Clone mencoba memecahkan masalah pencarian subgraf yang efisien (yaitu masalah isomorfisme grafik) untuk fungsi perakitan (waktu kueri rata-rata <1,3 detik dan waktu indeks rata-rata <30 md dengan fungsi 2,3 juta). Dengan adanya fungsi target (yang di sebelah kiri seperti yang ditunjukkan di bawah), ia dapat mengidentifikasi subgraf yang dikloning di antara fungsi-fungsi lain dalam repositori (yang di sebelah kanan seperti yang ditunjukkan di bawah).
Pencarian klon semantik dengan pengujian fuzz yang berbeda dan penyelesaian kendala. Pendekatan hibrid dinamis-statis yang efisien dan terukur (waktu kueri rata-rata <1 detik dan waktu indeks rata-rata <100 md dengan fungsi 1,5 juta). Dengan adanya fungsi target (yang di sebelah kiri seperti yang ditunjukkan di bawah), ia dapat mengidentifikasi subgraf yang dikloning di antara fungsi-fungsi lain dalam repositori (yang di sebelah kanan seperti yang ditunjukkan di bawah). Mendukung visualisasi grafik sintaksis abstrak.
Asm2Vec memanfaatkan pembelajaran representasi. Ia memahami hubungan semantik leksikal dari kode perakitan. Misalnya, register xmm*
secara semantik terkait dengan operasi vektor seperti addps
. memcpy
mirip dengan strcpy
. Grafik di bawah menunjukkan fungsi perakitan berbeda yang dikompilasi dari kode sumber gmpz_tdiv_r_2exp
yang sama di libgmp. Dari kiri ke kanan, fungsi rakitan dikompilasi dengan opsi GCC O0, opsi GCC O3, Grafik Aliran Kontrol obfuscator O-LLVM, opsi Perataan, dan opsi Grafik Aliran Kontrol Bogus obfuscator LLVM. Asm2Vec secara statis dapat mengidentifikasi mereka sebagai klon.
Dalam aplikasi ini, pengguna mendefinisikan sekumpulan kelas perangkat lunak yang didasarkan pada keterkaitan fungsional dan menyediakan biner milik masing-masing kelas. Kemudian sistem secara otomatis mengelompokkan fungsi-fungsi ke dalam cluster-cluster yang fungsi-fungsinya dihubungkan secara langsung atau tidak langsung melalui relasi klon. Cluster yang bersifat diskriminatif dalam klasifikasinya disimpan dan dijadikan sebagai penanda kelasnya. Dengan adanya biner target, sistem menunjukkan derajatnya dalam setiap kelas perangkat lunak.
Gunakan Asm2Vec sebagai model komputasi kesamaan fungsinya
Gambar di bawah menunjukkan komponen UI utama dan fungsi Kam1n0 v2.x. Kami mengadopsi desain material. Secara umum, setiap pengguna memiliki daftar aplikasi, daftar pekerjaan yang sedang berjalan, dan daftar file hasil.
Rilis Kam1n0 saat ini terdiri dari dua penginstal: server inti dan plug-in IDA Pro.
Pemasang | Komponen yang disertakan | Keterangan |
---|---|---|
Kam1n0-Server.msi | Mesin inti | Mesin utama menyediakan layanan untuk pengindeksan dan pencarian. |
meja kerja | Antarmuka pengguna untuk mengelola repositori dan menjalankan layanan. | |
Antarmuka pengguna web | Antarmuka pengguna web untuk mencari/mengindeks file biner dan fungsi perakitan. | |
Visual C++ dapat didistribusikan ulang untuk VS 15 | Ketergantungan untuk z3. | |
Kam1n0-IDA-Plugin.msi | Pengaya | Konektor dan antarmuka pengguna. |
Roda PyPI untuk Cefpython | Mesin rendering untuk antarmuka pengguna. | |
PyPI dan roda dependen | Manajemen paket untuk Python. Termasuk untuk IDA 6.8 & 6.9. |
Mesin inti Kam1n0 murni ditulis di Java. Anda memerlukan dependensi berikut:
Unduh file Kam1n0-Server.msi
dari halaman rilis kami. Ikuti instruksi untuk menginstal server. Anda akan diminta untuk memilih jalur instalasi. IDA Pro bersifat opsional jika server tidak harus berurusan dengan pembongkaran apa pun. Dengan kata lain, sisi klien menggunakan plugin Kam1n0 untuk IDA Pro. Sangat disarankan untuk menginstal IDA Pro dengan server Kam1n0. Server Kam1n0 akan secara otomatis mendeteksi IDA Pro Anda dengan mencari aplikasi default yang Anda gunakan untuk membuka file .i64
.
Plug-in Kam1n0 IDA Pro ditulis dengan Python untuk logika dan HTML/JavaScript untuk rendering. Dependensi berikut diperlukan untuk instalasinya:
Selanjutnya, unduh penginstal Kam1n0-IDA-Plugin.msi
dari halaman rilis kami. Ikuti petunjuk untuk menginstal plug-in dan runtime. Harap dicatat bahwa plug-in harus diinstal di folder plugin IDA Pro yang terletak di $IDA_PRO_PATH$/plugins
. Misalnya, di Windows, jalurnya bisa berupa C:/Program Files (x86)/IDA 6.95/plugins
. Pemasang akan mendeteksi dan memvalidasi jalur.
Pastikan Anda memiliki versi Oracle Java 11. (Bukan default-jdk di apt.)
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found
), jika Anda menggunakan proxy, pastikan Anda menyetel dan mengekspor variabel lingkungan http_proxy
dan https_proxy
, lalu coba lagi dengan opsi -E
di sudo. Selain itu, jika Anda mendapatkan kesalahan 'add-apt repositori command not found, coba: sudo apt install -y software-properties-common
.sudo apt-get update
, dan sudo apt-get install oracle-java8-installer
java -version
; Anda mungkin perlu mengatur variabel lingkungan JAVA_HOME secara manual (di /etc/environment
), JAVA_HOME=/usr/lib/jvm/java-11-oracle
Unduh rilis terbaru untuk Linux (Kam1n0-IDA-Plugin.tar.gz dan Kam1n0-Server.tar.gz) dari Kam1n0-Community.
Ekstrak kedua tarball (yaitu tar –xvzf Kam1n0-IDA-Plugin.tar.gz dan tar –xvzf Kam1n0-Server.tar.gz)
File Kam1n0-Server.tar.gz akan membuat direktori server.
Di dalam direktori server
, Anda akan melihat file bernama kam1n0.properties
, yang merupakan tempat Anda akan mengatur berbagai konfigurasi untuk kam1n0; ini sangat penting.
Tetapkan kam1n0.data.path
ke tempat yang Anda inginkan untuk menulis data terkait kam1n0. Kami memilih untuk meletakkannya di tempat yang sama dengan tempat kami menyimpan server
kami. kam1n0.ida.home
mengacu pada lokasi instalasi IDA Anda. Beri komentar pada baris ini (dan kam1n0.ida.batch
, baris berikutnya) jika Anda tidak memiliki IDA dan tidak berencana menggunakan kam1n0 untuk pembongkaran. Untuk informasi lebih lanjut (akurat) tentang file kam1n0.properties
, lihat file kam1n0.properties.explained
.
Jalankan kam1n0-server-workbench: java -jar kam1n0-server-workbench.jar
. Ini akan menyebabkan jendela muncul, yang meminta Anda untuk memulai kam1n0. Alternatifnya, jalankan kam1n0-server: java -jar kam1n0-server.jar --start
. Ini memulai server dari konsol tanpa jendela.
Untuk menghubungkan dan menggunakannya, buka 127.0.0.1:8571
(port default yang didengarkan kam1n0 harusnya 8571, tetapi dapat diubah di kam1n0.properties) di browser Anda. Anda akan melihat UI web kam1n0 yang cantik. Dari sana, ikuti tutorial repo Komunitas Kam1n0 jika Anda tidak tahu cara menggunakan kam1n0.
Repositori kode perakitan dan file konfigurasi yang digunakan di versi sebelumnya (<2.0.0) tidak lagi didukung oleh versi terbaru. Silakan hubungi kami jika Anda perlu memigrasikan repositori lama Anda.
Kloning cabang stabil terbaru (jangan lupa --recursive
!):
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
IntelliJ: Impor root /kam1n0/kam1n0/ sebagai proyek pakar. Semua submodul akan dimuat sebagaimana mestinya. EclipseEE: Tambahkan repositori git yang dikloning ke tampilan git. Impor semua proyek maven dari repositori git. Anda mungkin perlu mengubah classpath untuk mengatasi kesalahan apa pun. Semua jalur sumber daya dimodifikasi secara dinamis saat dijalankan di dalam IDE (melalui submodul sumber daya kam1n0).
Untuk membangun proyek:
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package
Biner yang dihasilkan dapat ditemukan di /kam1n0/build-bins/
Untuk menjalankan kode pengujian, Anda harus mengunduh chromedriver.exe
terlebih dahulu dari http://chromedriver.chromium.org/ dan menambahkan jalur absolutnya ke dalam variabel lingkungan bernama webdriver.chrome.driver
. Browser Chrome juga harus diinstal di sistem. Kode pengujian akan meluncurkan instance browser untuk menguji antarmuka UI. Prosedur pengujian lengkap akan memakan waktu kurang lebih 3 jam.
cd /kam1n0/kam1n0
mvn -DskipTests clean package # you can skip this one if you already built the package
mvn -DskipTests package # you can skip this one if you already built the package
mvn -DforkMode=never test
Perintah-perintah ini hanya mengkompilasi Java dengan roda libvex dan z3 yang telah dikompilasi sebelumnya. Ini bekerja di luar kotak. Pembuatan libvex dan z3 bergantung pada platform. Kami menggunakan fork libvex dari Angr. Skrip build yang lebih serius serta installer untuk windows/linux dapat ditemukan di /kam1n0-builds/
Kami memiliki server Jenkin untuk pengembangan dan pengiriman berkelanjutan. Rilis stabil terbaru akan diposting di sini. Secara berkala kami akan menyinkronkan cabang eksperimental internal kami dengan repositori ini.
Perangkat lunak ini dikembangkan oleh Steven HH Ding, Miles Q. Li, dan Benjamin CM Fung di McGill Data Mining and Security Lab dan Queen's L1NNA Research Laboratory di Kanada. Ini didistribusikan di bawah Lisensi Apache Versi 2.0. Silakan merujuk ke LICENSE.txt untuk detailnya.
Hak Cipta 2014-2021 McGill University dan Para Peneliti. Semua hak dilindungi undang-undang.