Bagaimana membandingkan binari di Linux

Fatmawati Ahmad zaenuri / Shutterstock.com

Bagaimana Anda memeriksa apakah dua biner Linux identik? Untuk file yang dapat dieksekusi, perbedaan dapat menunjukkan perilaku yang tidak diinginkan atau berbahaya. Berikut adalah cara termudah untuk memeriksa apakah mereka berbeda.

Perbandingan binari

Daftar Isi

Linux kaya akan kemampuan membandingkan dan menganalisis file teks. ini diff Perintah membandingkan dua file untuk Anda dan menyoroti perbedaannya. Itu bahkan dapat berisi garis di kedua sisi perubahan untuk memberikan konteks di sekitar font yang diubah. dan colordiff Perintah menambahkan warna untuk memfasilitasi analisis visual perbedaan.

Pengembang dan penulis menggunakan diff Untuk menyoroti perbedaan antara berbagai versi file kode sumber program atau proyek skrip. Ini cepat dan mudah, dan Anda tidak memerlukan pengetahuan teknis apa pun untuk mengidentifikasi perbedaan antara string teks.

Di dunia binari, hal-hal tidak sesederhana itu. File biner tidak terdiri dari teks biasa. Ini terdiri dari beberapa byte yang berisi nilai numerik. Jika file adalah file terkompresi, seperti arsip tar atau file zip, nilai-nilai ini mewakili file terkompresi yang disimpan dalam file arsip dan tabel simbol yang diperlukan untuk mendekompresi dan mengekstrak file.

Jika biner adalah file yang dapat dieksekusi, nilai numerik byte dalam file ditafsirkan sebagai hal-hal seperti instruksi untuk kode mesin prosesor, metadata, tag, atau data yang disandikan. Modifikasi ke file biner atau pustaka dapat menyebabkan perilaku yang berbeda ketika biner dijalankan atau digunakan oleh aplikasi lain.

Sangat mudah untuk memalsukan tanggal dan waktu file dibuat atau dimodifikasi. Ini berarti bahwa mungkin ada dua salinan file dengan nama yang sama, ukuran file – jika perubahan byte menimpa konten byte saat ini – dan stempel waktu. Namun, ada kemungkinan salah satu file rusak.

Algoritma Hash Aman

Algoritma hash aman adalah algoritma berbasis matematika. Ini menciptakan nilai 64-bit dengan mem-parsing semua byte dalam file dan menerapkan transformasi matematis untuk menghasilkan nilai hash. Setiap hari, file yang sama selalu menghasilkan hash yang sama. Bahkan perbedaan byte tunggal menghasilkan hash yang sama sekali berbeda.

File hash sering ditampilkan pada halaman download. Anda perlu membuat hash file setelah Anda mengunduhnya. Jika berbeda dari hash yang ditampilkan di halaman web, maka Anda tahu bahwa file tersebut telah disusupi. Entah itu dirusak dan diganti dengan file asli – untuk mengelabui orang agar mengunduh file yang rusak – atau rusak dalam perjalanan.

Di komputer demo kami memiliki dua salinan dari file yang sama, perpustakaan bersama. File-file tersebut telah diganti namanya sehingga mereka dapat berada di direktori yang sama. Secara teori, file-file ini harus identik. Terakhir, itu harus versi yang sama dari perpustakaan bersama.

ls -l *.so

File memiliki ukuran yang sama dan stempel waktu dan stempel waktu yang sama. Untuk pengamat biasa, mereka akan terlihat sama. Mari kita gunakan sha256sum perintah dan buat hash untuk setiap file.

sha256sum binary_file1.so
sha256sum binary_file2.so

Hash benar-benar berbeda, yang dengan jelas menunjukkan bahwa ada perbedaan antara kedua file. Jika situs web menunjukkan hash dari file asli, Anda dapat menghapus file yang tidak kompatibel.

temukan perbedaannya

Jika Anda ingin melihat perubahan, ada cara untuk melakukannya juga. Anda tidak perlu dapat mendekompilasi file atau memahami kode perakitan atau mesin hanya untuk melihat perubahannya. Pahami apa perubahan ini Kamu tahu?, dan apa tujuannya, tentu saja, membutuhkan lebih banyak pengetahuan teknis. Tetapi hanya mengetahui ukuran perubahan dapat memberikan gambaran tentang apa yang terjadi pada file tersebut.

Jika kita menggunakan diff Untuk kedua duo ini kami mendapatkan respon yang agak mengecewakan.

diff binary_file1.so binary_file2.so

Kami sudah tahu filenya berbeda. Ayo coba cmp .

cmp binary_file1.so binary_file2.so

Ini memberitahu kita sesuatu yang lebih. Byte pertama yang membedakan antara kedua file adalah nomor byte 13451. Artinya, pada awal biner, byte 13451 berbeda di kedua biner. Jadi 13451 adalah offset dari perbedaan pertama dari awal file.

Ternyata beberapa byte dalam file tersebut mengandung nilai heksadesimal 0x10. Ini adalah nilai yang digunakan Linux sebagai karakter baris baru dalam file teks. ini cmp Instruksi menemukan 131 byte dengan nilai ini antara awal bit dan posisi perbedaan pertama. Jadi dia pikir itu di jalur 132. Itu tidak berarti apa-apa dalam konteks ini.

Jika kita menambahkan ini -l (secara rinci) kami menerima informasi yang berguna.

cmp -l binary_file1.so binary_file2.so

Semua byte miring terdaftar. Hitungan byte atau offset, nilai file pertama, dan nilai file kedua ditampilkan sebagai satu byte per baris output.

Nilai byte ditampilkan dalam format oktal alih-alih format heksadesimal yang biasa digunakan dengan file biner. Tapi kami juga belajar sesuatu yang lain. Semua byte yang berubah berada dalam urutan yang berkelanjutan. Offset bertambah satu per byte.

ini hexdump Alat ini membuat file biner di jendela terminal. Saat kita menggunakan ini -C (Dasar) Pada setiap baris, output mencantumkan offset, nilai 16-byte dari offset itu, dan, jika ada, representasi ASCII dari nilai byte.

hexdump -C binary_file1.so

Kita dapat menggunakan hasil dari hexdump sebagai masukan dari diffmembiarkan diff Ia bekerja seolah-olah sedang membaca dua file teks.

diff <(hexdump binary_file1.so) <(hexdump binary_file2.so)

diff Menemukan baris yang berbeda dan menampilkan nilai byte heksadesimal dari file pertama di atas nilai file kedua. Offset baris pertama adalah 0x3480 atau 13440 desimal. lebih awal, cmp Dia memberi tahu kita bahwa perubahan pertama terjadi pada byte 13451, yaitu 0x348B. Ini sebenarnya sesuai dengan apa yang kita lihat di sini.

produk diff Itu terletak di blok dua byte. Pasangan byte pertama adalah 0 dan 1 offset dari 0x3480, dan blok kedua berisi byte 2 dan 3 offset. Blok 6 berisi byte 0xA dan 0xB, atau 10 dan 11 dalam desimal. Kedua byte ini adalah 13450 dan 13451. Kami mencatat bahwa ini adalah byte pertama yang berbeda. Lima pasangan byte pertama sama di kedua file.

Namun, karena diff Perhitungan basis nol apa? cmp Memanggil 13451, menjadi 13540 byte diff. Dan untuk membuat segalanya lebih membingungkan, urutan byte dari setiap blok 2-byte dibalik diff. Byte sebenarnya terdaftar dalam urutan ini: 1, 0, 3, 2, 5, 4, 7, 6, dan seterusnya.

Ini juga intensif secara komputasi – dua hexdumps dan diff Sekali, terutama ketika file yang dibandingkan berukuran besar.

tapi jika hexdump -C Itu dapat mengirim biner versi ASCII ke jendela terminal, jadi mengapa tidak mengarahkan output ke file teks dan kemudian membandingkan kedua file teks itu dengan diff?

hexdump -C binary_file1.so > binary1.txt
hexdump -C binary_file2.so > binary2.txt
diff binary1.txt binary2.txt

Perbedaan antara kedua file ditampilkan dalam dua cuplikan singkat. Di sebelahnya ada representasi ASCII. Akan ada sepasang cuplikan untuk setiap perbedaan antara file. Dalam contoh ini hanya ada satu perbedaan.

Itu bagus, tapi bukankah lebih bagus jika ada sesuatu yang akan melakukan semua ini untukmu?

VBinDiff

VBinDiff dapat diinstal dari repositori biasa dari semua distribusi populer. Gunakan perintah ini untuk menginstalnya di Ubuntu:

sudo apt install vbindiff

Di Fedora, Anda menulis:

sudo dnf install vbindiff

Pengguna Manjaro harus menggunakan file pacman.

sudo pacman -Sy vbindiff

Untuk menggunakan program, berikan nama dua file biner pada baris perintah.

vbindiff binary_file1.so binary_file2.so

Aplikasi berbasis terminal terbuka, menampilkan dua file dalam tampilan gulir.

Anda dapat menggunakan roda gulir mouse, panah atas, panah bawah, home, end, page up, dan page down untuk menelusuri file. Kedua file bergulir.

Tekan tombol “Enter” untuk pergi ke perbedaan pertama. Perbedaannya disorot di kedua file.

Jika ada lebih banyak perbedaan, menekan “Enter” akan menampilkan perbedaan berikutnya. Tekan “q” atau “Esc” untuk keluar dari program.

Apa bedanya?

Jika Anda menggunakan komputer orang lain dan tidak memiliki izin untuk menginstal paket, Anda dapat menggunakan cmpDan diffDan hexdump. Jika Anda perlu menangkap output untuk diproses lebih lanjut, ini juga merupakan alat yang harus Anda gunakan.

Tetapi jika Anda diizinkan untuk menginstal paket, VBinDiff membuat alur kerja Anda lebih mudah dan lebih cepat. Faktanya, menggunakan VBinDiff dengan satu biner adalah cara mudah dan nyaman untuk mencari biner, yang merupakan bonus yang bagus.

terkait: Cara mengintip binari dari baris perintah Linux

Baca Juga!

iPhone 14 Pro Action Mode vs GoPro Hero 11: Inilah hasilnya

Cerita ini adalah bagian Fokus pada iPhone 2022Kumpulan berita, kiat, dan saran CNET tentang produk …