変成ジェネレーターのさまざまな設計に関する参考文献を見つけようとしていますが、誰かが私を正しい方向に向けることができます。ACM でいくつかの論文を調べましたが、探しているものが見つかりませんでした。
2 に答える
メタモルフィック エンジンについて言及している場合、残念ながら私は適切な参考文献を知りません。これは、ウイルス作成者が通常どのように使用するかにより、この話題がまだタブー視されていることに起因すると思います。テクニックはそれ自体が興味深いので、これは不当だと思います。私は常に、自己修正および自己修復システムに魅了されてきました。また、AI 分野との関連もわずかにあると言えます。
メタモルフィック エンジンとは、すべてのバイトと命令自体を変更する実行可能ファイルであり、新しいファイルの内容は前の世代と比較して一意ですが、全体的なアルゴリズムは同じです。アンチウイルス ソフトウェア ベンダーは、この手法がウイルスによって最初に使用されたとき、ウイルスの識別に大きな問題を抱えていました。世代が異なると、単にシグネチャでウイルスを識別するだけでは効果がなかったからです。ポリモーフィック ウイルスとメタモルフィック ウイルスの導入は、ウイルス対策ソフトウェアがシグネチャによる識別からヒューリスティックに切り替わった時代を特徴づけました。つまり、正確なコードやバイト ストリームを見るのではなく、コードの動作を推測しようとします。
そのようなものを実装するとき、使用される実行形式と CPU アーキテクチャに依存するいくつかの問題に遭遇します:
一部の RISC アーキテクチャは完全な 32 ビットの即値を保持できないため、コード セグメントは必然的に即値のデータ プールを保持します。ダブルルックアップで取得されます。コードをデータから明確に分離する方法が必要なため、これは深刻な問題です。つまり、一部のデータ値は合法的にコードとして表すことができ、その逆も可能です。プログラムが C ランタイムなどの動的ライブラリとリンクしている場合、再配置で使用される情報も再計算する必要がありますが、これは簡単ではありません。
そして最大の問題は、そのようなプログラムは新しい世代ごとに指数関数的にサイズが大きくなる傾向があるということです. 初期の「単純化」アルゴリズム (以下で説明) が適切に機能しない場合、ガベージ コードがどんどん追加されます。そして、「悪い仕事」の種類は、コードを元の完璧に単純化することができなかったことを意味します。前の世代からの余分な「肥大化」が蓄積されます。
一般的な手法は次のように機能します。アプリケーションはそれ自体を読み取り、実行可能な形式 (ELF、COFF、a.out、PE) を解析する必要があります。次に、N 個の命令のグループごとに、アルゴリズムを単純化しようとします。たとえば、値 X の加算とそれに続く値 X による減算は事実上ノープであり、無視できます。a*b+a*c
に簡略化してa*(b+c)
、1 つの命令を節約できます。したがって、この単純化器は、以前にメタモルフィズムを通過したため、アルゴリズム全体の裸のスケルトンを見つけます。
その後、逆の手順でコードを難読化します。N 個の命令を取り、同じことを行う別のものに置き換えます。他の段階では、データの即時型をいくつかの部分に分割し、文字列を難読化し、コードをいくつかの新しい関数に分割し、コードを移動します。これはすべて、コードとデータの参照を追跡しながら行われます。最後に、コードがアセンブルされ、実行可能ファイルとして元の形式にリンクされます。
気が遠くなるほど複雑です。真の筋金入りのアセンブリ コーダー専用です。あなたは警告されました。
virii ライターによって書かれたエンジンを探してください:
1) z0mbie
2) mental driller (metaph0r)
3) vecna
また、Google で「プロジェクト ブコウスキー」を検索してください。