TLSH هي مكتبة مطابقة غامضة. نظرًا لتدفق بايت بطول لا يقل عن 50 بايت، ينشئ TLSH قيمة تجزئة يمكن استخدامها لمقارنات التشابه. سيكون للكائنات المشابهة قيم تجزئة متشابهة مما يسمح باكتشاف الكائنات المتشابهة من خلال مقارنة قيم التجزئة الخاصة بها. لاحظ أن دفق البايت يجب أن يحتوي على قدر كافٍ من التعقيد. على سبيل المثال، لن يقوم دفق بايت من البايتات المتماثلة بإنشاء قيمة تجزئة.
08/10/2024
الإصدار 4.10.x - أداة تجميع بايثون.
سأحاول جعل الإصدار 4.12.0 إصدارًا وإنشاء مكتبة py-tlsh Python من 4.12.0 4.12.0 يتضمن: طلب سحب الدمج رقم 137 - أدى هذا إلى إصلاح تسرب الذاكرة في طلب سحب الدمج py-tlsh رقم 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 أدناه).
للتوافق مع الإصدارات الأقدم، يوجد خيار -conservative الذي يفرض حدًا يبلغ 256 بايت. راجع الملاحظات الخاصة بالإصدار 3.17.0 من TLSH
التجزئة المحسوبة هي 35 بايت من البيانات (الإخراج كـ "T1" يتبع 70 حرفًا سداسيًا عشريًا. إجمالي الطول 72 حرفًا). تمت إضافة "T1" كرقم إصدار للتجزئة - حتى نتمكن من تكييف الخوارزمية مع الحفاظ على التوافق مع الإصدارات السابقة. للحصول على النمط القديم المكون من 70 علامة سداسية، استخدم خيار سطر الأوامر -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 install cmake $ sudo yum install 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
08/10/2024 دمج طلب السحب رقم 146 - إزالة استدعاء sprintf() لتجنب التحذيرات دمج طلب السحب رقم 141 - py_ext: استخدم PyVarObject_HEAD بدلاً من PyObject_HEAD_INIT دمج طلب السحب رقم 138 - البناء: تحديد الخيارات الافتراضية فقط على "الافتراضي" طلب سحب الدمج رقم 136 - إصلاح الخلل + إمكانية النقل: تحسين إمكانية النقل عن طريق التقسيم المتكامل
راجع Change_History.md