TLSH เป็นไลบรารีการจับคู่แบบคลุมเครือ การกำหนดสตรีมไบต์ที่มีความยาวขั้นต่ำ 50 ไบต์ TLSH จะสร้างค่าแฮชซึ่งสามารถใช้สำหรับการเปรียบเทียบความคล้ายคลึงกัน วัตถุที่คล้ายกันจะมีค่าแฮชที่คล้ายกันซึ่งช่วยให้สามารถตรวจจับวัตถุที่คล้ายกันโดยการเปรียบเทียบค่าแฮชของพวกมัน โปรดทราบว่าสตรีมไบต์ควรมีความซับซ้อนเพียงพอ ตัวอย่างเช่น ไบต์สตรีมที่มีไบต์เหมือนกันจะไม่สร้างค่าแฮช
10/08/2024
เปิดตัวเวอร์ชัน 4.10.x - เครื่องมือการทำคลัสเตอร์ Python
ฉันจะพยายามสร้าง 4.12.0 เวอร์ชันวางจำหน่ายและสร้างไลบรารี่ py-tlsh Python จาก 4.12.0 4.12.0 รวมถึง: Merge pull request #137 - สิ่งนี้แก้ไขหน่วยความจำรั่วใน py-tlsh Merge pull request #134 - สิ่งนี้ปรับปรุง ifdef WINDOWS ให้พกพาได้มากขึ้น 4.12.1 รวมถึง: รวมคำขอดึง #146 - ลบการเรียกไปที่ sprintf() เพื่อหลีกเลี่ยงคำเตือน รวมคำขอดึง #141 - py_ext: ใช้ PyVarObject_HEAD แทน PyObject_HEAD_INIT รวมคำขอดึง #138 - สร้าง : กำหนดตัวเลือกเริ่มต้นเฉพาะในคำขอรวมการดึง "ค่าเริ่มต้น" # 136 - แก้ไขข้อผิดพลาด + ความสามารถในการพกพา: ปรับปรุงความสามารถในการพกพาด้วยการแบ่งส่วนรวม
2020
เราได้เพิ่มตัวระบุเวอร์ชัน ("T1") ที่จุดเริ่มต้นของไดเจสต์ โปรดใช้เวอร์ชันของ TLSH ที่มีส่วนหัว T1 โค้ดนี้เข้ากันได้แบบย้อนหลัง แต่ยังสามารถอ่านและตีความสตริงอักขระฐานสิบหก 70 ตัวเป็นข้อมูลย่อยของ TLSH ได้ และชุดข้อมูลสามารถรวมข้อมูลสรุปแบบเก่าและใหม่ผสมกันได้ หากคุณต้องการให้เอาท์พุตการย่อย TLSH แบบเก่า ให้ใช้ตัวเลือกบรรทัดคำสั่ง '-old'
ต้องขอบคุณชุนเฉิง วิศวกรผู้ถ่อมตัวและมีความสามารถ
โปรแกรมในโหมดเริ่มต้นต้องการสตรีมไบต์อินพุตที่มีความยาวขั้นต่ำ 50 ไบต์ (และจำนวนการสุ่มขั้นต่ำ - ดูหมายเหตุในส่วนขยาย Python ด้านล่าง)
เพื่อให้สอดคล้องกับเวอร์ชันเก่า มีตัวเลือก -อนุรักษ์นิยม ซึ่งบังคับใช้ขีดจำกัด 256 ไบต์ ดูหมายเหตุสำหรับเวอร์ชัน 3.17.0 ของ TLSH
แฮชที่คำนวณได้คือข้อมูล 35 ไบต์ (เอาต์พุตเป็น 'T1' ตามด้วยอักขระเลขฐานสิบหก 70 ตัว ความยาวรวม 72 อักขระ) เพิ่ม 'T1' เป็นหมายเลขเวอร์ชันสำหรับแฮช เพื่อให้เราสามารถปรับอัลกอริทึมและยังคงรักษาความเข้ากันได้แบบย้อนหลังได้ หากต้องการรับแฮช 70 hex แบบเก่า ให้ใช้ตัวเลือกบรรทัดคำสั่ง -old
ไบต์ 3,4,5 ใช้เพื่อดักจับข้อมูลเกี่ยวกับไฟล์โดยรวม (ความยาว, ...) ในขณะที่ 32 ไบต์สุดท้ายใช้เพื่อดักจับข้อมูลเกี่ยวกับส่วนที่เพิ่มของไฟล์ (โปรดทราบว่าสามารถเพิ่มความยาวของแฮชได้โดยการเปลี่ยนพารามิเตอร์บิลด์ที่อธิบายไว้ด้านล่างใน CMakeLists.txt ซึ่งจะเพิ่มข้อมูลที่จัดเก็บไว้ในแฮช สำหรับบางแอปพลิเคชัน อาจเพิ่มความแม่นยำในการทำนายความคล้ายคลึงกันระหว่างไฟล์)
การสร้าง TLSH (ดูด้านล่าง) จะสร้างไลบรารีแบบคงที่ในไดเร็กทอรี lib
และไฟล์ปฏิบัติการ tlsh
(ลิงก์สัญลักษณ์ไปยัง tlsh_unittest
) ลิงก์ 'tlsh' ไปยังไลบรารีแบบคงที่ในไดเร็กทอรี bin
ไลบรารีมีฟังก์ชันการทำงานเพื่อสร้างค่าแฮชจากไฟล์ที่กำหนด และเพื่อคำนวณความคล้ายคลึงกันระหว่างค่าแฮชสองค่า
tlsh
เป็นยูทิลิตี้สำหรับสร้างค่าแฮชของ TLSH และเปรียบเทียบค่าแฮชของ TLSH เพื่อระบุความคล้ายคลึงกัน รันโดยไม่มีพารามิเตอร์สำหรับการใช้งานโดยละเอียด
js_ext
java
เราแสดงรายการพอร์ตเหล่านี้เพื่อการอ้างอิงเท่านั้น เราไม่ได้ตรวจสอบโค้ดในที่เก็บเหล่านี้ และเราไม่ได้ตรวจสอบว่าผลลัพธ์เหมือนกับ TLSH ที่นี่ นอกจากนี้เรายังขอให้พอร์ตใดๆ รวมไฟล์ LICENSE และ NOTICE.txt ตรงตามที่ปรากฏในที่เก็บนี้ทุกประการ
ดาวน์โหลด TLSH ดังนี้:
wget https://github.com/trendmicro/tlsh/archive/master.zip -O master.zip
unzip master.zip
cd tlsh-master
หรือ
git clone git://github.com/trendmicro/tlsh.git
cd tlsh
git checkout master
แก้ไข CMakeLists.txt เพื่อสร้าง TLSH ด้วยตัวเลือกต่างๆ
ดำเนินการ:
make.sh
หมายเหตุ: การสร้าง TLSH บน Linux ขึ้นอยู่กับ cmake
เพื่อสร้าง Makefile
จากนั้นจึง make
โปรเจ็กต์ ดังนั้นบิลด์จะล้มเหลวหากไม่ได้ติดตั้ง cmake
หากต้องการติดตั้งคอมไพเลอร์ cmake/gcc บน CentOs หรือ Amazon Linux: $ sudo yum ติดตั้ง cmake $ sudo yum ติดตั้ง gcc-c++
เพิ่มเมื่อเดือนมีนาคม 2020 ดูคำแนะนำใน README.mingw
ใช้ไฟล์โซลูชัน tlsh เฉพาะเวอร์ชัน (tlsh.VC2005.sln, tlsh.VC2008.sln, ...) ภายใต้ไดเร็กทอรี Windows
ดู tlsh.h สำหรับอินเทอร์เฟซไลบรารี tlsh และ tlsh_unittest.cpp และ simple_unittest.cpp ใต้ไดเรกทอรี test
สำหรับโค้ดตัวอย่าง
เราเพิ่งสร้างแพ็คเกจ Python บน PyPi: https://pypi.org/project/py-tlsh/
py-tlsh แทนที่แพ็คเกจ python-tlsh สำหรับรายละเอียดโปรดดูฉบับที่ 94
ในการติดตั้งแพ็คเกจนี้
$ pip install py-tlsh
หากคุณต้องการสร้างแพ็คเกจ Python ของคุณเอง ก็มี README.python พร้อมหมายเหตุเกี่ยวกับเวอร์ชันของ 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 )
ข้อมูลหมายเหตุต้องเป็นไบต์ ไม่ใช่สตริง เนื่องจาก TLSH ใช้สำหรับข้อมูลไบนารี และข้อมูลไบนารีสามารถมีไบต์ NULL (ศูนย์) ได้
ในโหมดเริ่มต้น ข้อมูลจะต้องมีอย่างน้อย 50 ไบต์เพื่อสร้างค่าแฮชและต้องมีการสุ่มจำนวนหนึ่ง หากต้องการรับค่าแฮชของไฟล์ ให้ลอง
tlsh . hash ( open ( file , 'rb' ). read ())
หมายเหตุ: คำสั่งเปิดได้เปิดไฟล์ในโหมดไบนารี
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 )
ฟังก์ชัน diffxlen
จะลบองค์ประกอบความยาวไฟล์ของส่วนหัว tlsh ออกจากการเปรียบเทียบ
tlsh . diffxlen ( h1 , h2 )
หากเปรียบเทียบไฟล์ที่มีรูปแบบซ้ำกับไฟล์ที่มีรูปแบบเดียว ความแตกต่างจะเพิ่มขึ้นหากรวมความยาวของไฟล์ด้วย แต่เมื่อใช้ฟังก์ชัน diffxlen
ความยาวไฟล์จะถูกลบออกจากการพิจารณา
หากคุณใช้ตัวเลือก "อนุรักษ์นิยม" ข้อมูลจะต้องมีอักขระอย่างน้อย 256 ตัว ตัวอย่างเช่น,
import os
tlsh . conservativehash ( os . urandom ( 256 ))
ควรสร้างแฮช แต่
tlsh . conservativehash ( os . urandom ( 100 ))
จะสร้าง TNULL เนื่องจากมีขนาดน้อยกว่า 256 ไบต์
หากคุณต้องการสร้างแฮชแบบเก่า (โดยไม่มีคำนำหน้า "T1") ให้ใช้
tlsh . oldhash ( os . urandom ( 100 ))
ตัวเลือกเก่าและอนุรักษ์นิยมสามารถรวมกันได้:
tlsh . oldconservativehash ( os . urandom ( 500 ))
ความคล้ายคลึงกันของ TLSH แสดงเป็นคะแนนความแตกต่าง:
4.12.1
10/08/2024 รวมคำขอดึง #146 - ลบการเรียกไปที่ sprintf() เพื่อหลีกเลี่ยงคำเตือน รวมคำขอดึง # 141 - py_ext: ใช้ PyVarObject_HEAD แทน PyObject_HEAD_INIT รวมคำขอดึง # 138 - โครงสร้าง: กำหนดตัวเลือกเริ่มต้นเฉพาะใน "ค่าเริ่มต้น" รวมคำขอดึง # 136 - แก้ไขข้อผิดพลาด + การพกพา: ปรับปรุงความสามารถในการพกพาโดยการแบ่งส่วนรวม
ดู Change_History.md