類似性について、2つの16進ファイル署名を相互に比較するための最良のアプローチは何でしょうか。
具体的には、.exeファイルの16進表現を取得し、一連のウイルス署名と比較することです。このアプローチでは、ファイル(exe)の16進表現をN文字の個々のグループ(つまり、10の16進文字)に分割し、ウイルス署名でも同じことを行う予定です。私はある種のヒューリスティックを実行することを目指しているので、このexeファイルが既知のウイルスシグネチャに対してX%の類似性を持っているかどうかを統計的にチェックします。
私がこれを行うことを考えた最も単純でおそらく非常に間違った方法は、exe [n、n-1]をウイルス[n、n-1]と比較することです。ここで、配列の各要素はサブ配列であり、したがってexe1 [0、 9]ウイルス1[0,9]に対して。各サブセットは統計的に評価されます。
ご存知のように、膨大な数の比較が行われるため、非常に時間がかかります。そこで、たとえば、異なるデータ構造を一緒に実装するなど、そのような比較を行うためのより良いアプローチを考えられるかどうかを尋ねたいと思いました。
これは、ポリモルフィックマルウェアを検出するアルゴリズムを開発しようとしている私の理学士のために行っているプロジェクトです。これはシステム全体の一部にすぎず、もう一方は静的ウイルスシグネチャを進化させる遺伝的アルゴリズムに基づいています。アドバイス、コメント、またはリソースなどの一般的な情報は大歓迎です。
定義:ポリモルフィックマルウェア(ウイルス、ワームなど)は、明らかに異なる構造(バリアント)を持ちながら、「元の」バージョンと同じ機能とペイロードを維持します。彼らは、コードを難読化し、16進署名を変更することでそれを実現しています。ポリモーフィズムに使用される手法のいくつかは次のとおりです。フォーマットの変更(空白の削除を挿入)、変数の名前変更、ステートメントの再配置、ジャンクコードの追加、ステートメントの置換(x=1はx=y / 5に変更されます。y=5)、制御ステートメントの交換。インフルエンザウイルスが変異し、ワクチン接種が効果的でないのと同じように、ポリモルフィックマルウェアは検出を回避するために変異します。
更新:アドバイスの後、あなたたちは読書が何をすべきかに関して私に与えました。私はそれをしました、しかしそれは私をもっと混乱させました。私の問題に適用できるいくつかの距離アルゴリズムを見つけました。
- 最長共通部分列
- レーベンシュタインアルゴリズム
- ニードルマン-ブンシュアルゴリズム
- Smith–Watermanアルゴリズム
- ボイヤームーアアルゴリズム
- エイホ-コラシックアルゴリズム
しかし、今はどちらを使用すればよいかわかりません。それらはすべて、同じことをさまざまな方法で行っているようです。それぞれをよりよく理解できるように、これからも研究を続けていきます。which might be more suitable
しかし、それまでの間、私が研究の中で優先し、より深く研究できるように、あなたの意見を聞かせてください。
更新2: LCSubsequence、LCSubstring、およびLevenshteinDistanceの融合を使用することになりました。提案ありがとうございます。
完成した紙のコピーがGitHubにあります