TLSH adalah perpustakaan pencocokan fuzzy. Diberikan aliran byte dengan panjang minimum 50 byte, TLSH menghasilkan nilai hash yang dapat digunakan untuk perbandingan kesamaan. Objek serupa akan memiliki nilai hash serupa yang memungkinkan pendeteksian objek serupa dengan membandingkan nilai hashnya. Perhatikan bahwa aliran byte harus memiliki kompleksitas yang cukup. Misalnya, aliran byte dengan byte yang identik tidak akan menghasilkan nilai hash.
08/10/2024
Rilis versi 4.10.x - alat pengelompokan Python.
Saya akan mencoba menjadikan 4.12.0 versi rilis dan membangun pustaka Python py-tlsh dari 4.12.0 4.12.0 mencakup: Gabungkan permintaan tarik #137 - ini memperbaiki kebocoran memori di py-tlsh Gabungkan permintaan tarik #134 - ini meningkatkan ifdef WINDOWS menjadi lebih portabel 4.12.1 mencakup: Gabungkan permintaan tarik #146 - Hapus panggilan ke sprintf() untuk menghindari peringatan Gabungkan permintaan tarik #141 - py_ext: gunakan PyVarObject_HEAD alih-alih PyObject_HEAD_INIT Gabungkan permintaan tarik #138 - Bangun: Tetapkan opsi default hanya pada "default" Gabungkan permintaan tarik #136 - Perbaikan Bug+Portabilitas: Tingkatkan portabilitas dengan pembagian integral
2020
Kami telah menambahkan pengidentifikasi versi ("T1") ke awal intisari. Silakan gunakan versi TLSH yang memiliki header T1. Kode ini kompatibel, masih dapat membaca dan menafsirkan 70 string karakter hex sebagai intisari TLSH. Dan kumpulan data dapat mencakup campuran intisari lama dan baru. Jika Anda memerlukan intisari TLSH gaya lama untuk dihasilkan, gunakan opsi baris perintah '-lama'
Terima kasih kepada Chun Cheng, seorang insinyur yang rendah hati dan berbakat.
Program dalam mode default memerlukan aliran byte input dengan panjang minimum 50 byte (dan jumlah keacakan minimum - lihat catatan dalam ekstensi Python di bawah).
Untuk konsistensi dengan versi lama, ada opsi -conservative yang menerapkan batas 256 byte. Lihat catatan untuk TLSH versi 3.17.0
Hash yang dihitung adalah 35 byte data (output sebagai 'T1' diikuti 70 karakter heksadesimal. Panjang total 72 karakter). 'T1' telah ditambahkan sebagai nomor versi untuk hash - sehingga kami dapat mengadaptasi algoritme dan tetap mempertahankan kompatibilitas ke belakang. Untuk mendapatkan hash hex 70 gaya lama, gunakan opsi baris perintah -old.
Byte 3,4,5 digunakan untuk menangkap informasi tentang file secara keseluruhan (panjang, ...), sedangkan 32 byte terakhir digunakan untuk menangkap informasi tentang bagian tambahan dari file. (Perhatikan bahwa panjang hash dapat ditingkatkan dengan mengubah parameter build yang dijelaskan di bawah dalam CMakeLists.txt, yang akan meningkatkan informasi yang disimpan dalam hash. Untuk beberapa aplikasi, hal ini mungkin meningkatkan akurasi dalam memprediksi kesamaan antar file.)
Membangun TLSH (lihat di bawah) akan membuat perpustakaan statis di direktori lib
, dan tlsh
dapat dieksekusi (tautan simbolis ke tlsh_unittest
). Tautan 'tlsh' ke perpustakaan statis, di direktori bin
. Pustaka memiliki fungsi untuk menghasilkan nilai hash dari file tertentu, dan untuk menghitung kesamaan antara dua nilai hash.
tlsh
adalah utilitas untuk menghasilkan nilai hash TLSH dan membandingkan nilai hash TLSH untuk menentukan kesamaan. Jalankan tanpa parameter untuk penggunaan detail.
js_ext
.java
. Kami mencantumkan port ini hanya untuk referensi. Kami belum memeriksa kode di repositori ini, dan kami belum memeriksa apakah hasilnya identik dengan TLSH di sini. Kami juga meminta agar setiap port menyertakan file LICENSE dan NOTICE.txt persis seperti yang muncul di repositori ini.
Unduh TLSH sebagai berikut:
wget https://github.com/trendmicro/tlsh/archive/master.zip -O master.zip
unzip master.zip
cd tlsh-master
atau
git clone git://github.com/trendmicro/tlsh.git
cd tlsh
git checkout master
Edit CMakeLists.txt untuk membuat TLSH dengan opsi berbeda.
Menjalankan:
make.sh
Catatan: Membangun TLSH di Linux bergantung pada cmake
untuk membuat Makefile
dan kemudian make
proyek, sehingga build akan gagal jika cmake
tidak diinstal. Untuk menginstal kompiler cmake/gcc di CentOs atau Amazon Linux: $ sudo yum install cmake $ sudo yum install gcc-c++
Ditambahkan pada Maret 2020. Lihat instruksinya di README.mingw
Gunakan file solusi tlsh khusus versi (tlsh.VC2005.sln, tlsh.VC2008.sln, ...) di bawah direktori Windows.
Lihat tlsh.h untuk antarmuka perpustakaan tlsh dan tlsh_unittest.cpp dan simple_unittest.cpp di bawah direktori test
untuk contoh kode.
Kami baru-baru ini membuat paket Python di PyPi: https://pypi.org/project/py-tlsh/
Py-tlsh menggantikan paket python-tlsh. Untuk detailnya lihat edisi 94
Untuk menginstal paket ini
$ pip install py-tlsh
Jika Anda perlu membuat paket Python Anda sendiri, ada README.python dengan catatan tentang versi python
(1) compile the C++ code
$./make.sh
(2) build the python version
$ cd py_ext/
$ python ./setup.py build
(3) install - possibly - sudo, run as root or administrator
$ python ./setup.py install
(4) test it
$ cd ../Testing
$ ./python_test.sh
import tlsh
tlsh . hash ( data )
Catatan data harus berupa byte - bukan string. Hal ini karena TLSH ditujukan untuk data biner dan data biner dapat berisi byte NULL (nol).
Dalam mode default, data harus berisi setidaknya 50 byte untuk menghasilkan nilai hash dan harus memiliki jumlah keacakan tertentu. Untuk mendapatkan nilai hash suatu file, coba
tlsh . hash ( open ( file , 'rb' ). read ())
Catatan: pernyataan open telah membuka file dalam mode biner.
import tlsh
h1 = tlsh . hash ( data )
h2 = tlsh . hash ( similar_data )
score = tlsh . diff ( h1 , h2 )
h3 = tlsh . Tlsh ()
with open ( 'file' , 'rb' ) as f :
for buf in iter ( lambda : f . read ( 512 ), b'' ):
h3 . update ( buf )
h3 . final ()
# this assertion is stating that the distance between a TLSH and itself must be zero
assert h3 . diff ( h3 ) == 0
score = h3 . diff ( h1 )
Fungsi diffxlen
menghapus komponen panjang file dari header tlsh dari perbandingan.
tlsh . diffxlen ( h1 , h2 )
Jika file dengan pola berulang dibandingkan dengan file yang hanya memiliki satu contoh pola, maka perbedaannya akan bertambah jika panjang file disertakan. Namun dengan menggunakan fungsi diffxlen
, panjang file akan dihilangkan dari pertimbangan.
Jika Anda menggunakan opsi "konservatif", maka data harus berisi minimal 256 karakter. Misalnya,
import os
tlsh . conservativehash ( os . urandom ( 256 ))
harus menghasilkan hash, tapi
tlsh . conservativehash ( os . urandom ( 100 ))
akan menghasilkan TNULL karena kurang dari 256 byte.
Jika Anda perlu membuat hash gaya lama (tanpa awalan "T1"), gunakan
tlsh . oldhash ( os . urandom ( 100 ))
Pilihan lama dan konservatif dapat digabungkan:
tlsh . oldconservativehash ( os . urandom ( 500 ))
Kesamaan TLSH dinyatakan sebagai skor perbedaan:
4.12.1
08/10/2024 Permintaan tarik gabungan #146 - Hapus panggilan ke sprintf() untuk menghindari peringatan Gabungkan permintaan tarik #141 - py_ext: gunakan PyVarObject_HEAD alih-alih PyObject_HEAD_INIT Permintaan tarik gabungan #138 - Build: Tetapkan opsi default hanya pada "default" Permintaan tarik gabungan #136 - Perbaikan Bug+Portabilitas: Tingkatkan portabilitas dengan pembagian integral
lihat Change_History.md