TLSH はあいまい一致ライブラリです。最小長が 50 バイトのバイト ストリームを指定すると、TLSH は類似性の比較に使用できるハッシュ値を生成します。類似したオブジェクトには類似したハッシュ値があり、ハッシュ値を比較することで類似したオブジェクトを検出できます。バイト ストリームには十分な複雑さが必要であることに注意してください。たとえば、同一バイトのバイト ストリームはハッシュ値を生成しません。
2024 年 8 月 10 日
リリース バージョン 4.10.x - Python クラスタリング ツール。
4.12.0 をリリース バージョンにして、4.12.0 から py-tlsh Python ライブラリを構築しようとします。 4.12.0 には以下が含まれます: マージ プル リクエスト #137 - これにより、py-tlsh のメモリ リークが修正されました マージ プル リクエスト #134 - これにより、ifdef WINDOWS が移植可能になりました。 4.12.1 には以下が含まれます: プル リクエスト #146 のマージ - 警告を回避するために sprintf() への呼び出しを削除 プル リクエスト #141 のマージ - py_ext: PyObject_HEAD_INIT の代わりに PyVarObject_HEAD を使用 プル リクエスト #138 のマージ - ビルド: 「デフォルト」マージ プル リクエスト #136 でのみデフォルト オプションを定義 - バグ修正+移植性: 整数除算により移植性を向上
2020年
ダイジェストの先頭にバージョン識別子 (「T1」) を追加しました。 T1 ヘッダーを持つバージョンの TLSH を使用してください。コードには下位互換性があり、70 の 16 進文字列を TLSH ダイジェストとして読み取って解釈できます。また、データ セットには古いダイジェストと新しいダイジェストが混在する場合があります。古い形式の TLSH ダイジェストを出力する必要がある場合は、コマンド ライン オプション '-old' を使用します。
謙虚で才能のあるエンジニアだった Chun Cheng に感謝します。
デフォルト モードのプログラムでは、最小長が 50 バイトの入力バイト ストリームが必要です (および最小量のランダム性 - 以下の Python 拡張機能の注意を参照してください)。
古いバージョンとの一貫性を保つために、256 バイト制限を強制する -conservative オプションがあります。 TLSH バージョン 3.17.0 のメモを参照してください。
計算されたハッシュは 35 バイトのデータです (「T1」に 70 個の 16 進文字が続いて出力されます。合計の長さは 72 文字です)。 「T1」はハッシュのバージョン番号として追加されているため、アルゴリズムを適応させながら下位互換性を維持できます。古いスタイルの 70 16 進ハッシュを取得するには、-old コマンド ライン オプションを使用します。
バイト 3、4、5 はファイル全体に関する情報 (長さなど) を取得するために使用され、最後の 32 バイトはファイルの増分部分に関する情報を取得するために使用されます。 (ハッシュの長さは、CMakeLists.txt で後述するビルド パラメーターを変更することで増やすことができます。これにより、ハッシュに保存される情報が増加します。一部のアプリケーションでは、これによりファイル間の類似性の予測精度が向上する可能性があります。)
TLSH をビルドすると (以下を参照)、静的ライブラリがlib
ディレクトリに作成され、 tlsh
実行可能ファイル ( tlsh_unittest
へのシンボリック リンク) が作成されます。 「tlsh」は、 bin
ディレクトリ内の静的ライブラリにリンクします。このライブラリには、指定されたファイルからハッシュ値を生成し、2 つのハッシュ値間の類似性を計算する機能があります。
tlsh
TLSH ハッシュ値を生成し、TLSH ハッシュ値を比較して類似性を判断するためのユーティリティです。詳細な使用方法については、パラメーターを指定せずに実行してください。
js_ext
ディレクトリで利用可能な JavaScript ポート。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
注: Linux での TLSH のビルドは、 cmake
に依存してMakefile
作成し、プロジェクトmake
ため、 cmake
がインストールされていない場合、ビルドは失敗します。 CentOs または Amazon Linux に cmake/gcc コンパイラーをインストールするには: $ sudo yum install cmake $ sudo yum install gcc-c++
2020 年 3 月に追加。README.mingw の手順を参照してください。
Windows ディレクトリにあるバージョン固有の tlsh ソリューション ファイル (tlsh.VC2005.sln、tlsh.VC2008.sln など) を使用します。
tlsh ライブラリ インターフェイスについては tlsh.h を、サンプル コードについてはtest
ディレクトリの下の tlsh_unittest.cpp および simple_unittest.cpp を参照してください。
最近、PyPi 上に Python パッケージを作成しました: https://pypi.org/project/py-tlsh/
py-tlsh は python-tlsh パッケージを置き換えます。詳細は94号をご覧ください
このパッケージをインストールするには
$ pip install py-tlsh
独自の Python パッケージを構築する必要がある場合は、Python のバージョンに関するメモが記載された README.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 ())
注: open ステートメントはファイルをバイナリ モードで開きました。
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 )
繰り返しパターンを持つファイルと、そのパターンのインスタンスが 1 つだけあるファイルを比較する場合、ファイルの長さも含めると、その差は大きくなります。ただし、 diffxlen
関数を使用すると、ファイルの長さは考慮されなくなります。
「保守的」オプションを使用する場合、データには少なくとも 256 文字が含まれている必要があります。例えば、
import os
tlsh . conservativehash ( os . urandom ( 256 ))
ハッシュを生成する必要がありますが、
tlsh . conservativehash ( os . urandom ( 100 ))
256 バイト未満であるため、TNULL が生成されます。
古い形式のハッシュ (「T1」プレフィックスなし) を生成する必要がある場合は、次を使用します。
tlsh . oldhash ( os . urandom ( 100 ))
古いオプションと保守的なオプションを組み合わせることができます。
tlsh . oldconservativehash ( os . urandom ( 500 ))
TLSH の類似性は差分スコアとして表されます。
4.12.1
2024 年 8 月 10 日 プル リクエスト #146 をマージ - 警告を回避するために sprintf() への呼び出しを削除 マージ プル リクエスト #141 - py_ext: PyObject_HEAD_INIT の代わりに PyVarObject_HEAD を使用する マージ プル リクエスト #138 - ビルド: 「デフォルト」でのみデフォルト オプションを定義します マージ プル リクエスト #136 - バグ修正 + 移植性: 整数除算による移植性の向上
Change_History.md を参照してください。