私は現在、C++ でポリモーフィズム エンジンを記述して、私が持っているきちんとしたアンチ ハッキング ステイアライブ チェックのアイデアをいじろうとしています。しかし、ポリモーフィズム エンジンを記述することはかなり困難であることがわかっています。どのようにそれを行うべきかを確立することさえできていません。アイデアは、実行可能コードをユーザー (つまり、私が保護しているアプリケーション) にストリーミングし、メモリ イメージでいくつかのチェックサムを実行してサーバーに返すコードをときどき送信することです。問題は、誰かが単純にハイジャックしたり、プログラムによって生存チェックをクラックしたりしたくないということです。代わりに、それぞれが単純なコードのスタブから動作し、ポリモーフィズム エンジンを介して実行されるサーバー上で生成されます。各Stay-Aliveチェックは、データのチェックサムと、Stay-Aliveチェック内に忍び込んだランダムなアルゴリズムに依存する値を返します。
私が取り組まなければならないもの:
*実行可能なイメージの PDB ファイル。*アセンブラーと逆アセンブラー エンジンのコードなどを再配置できるようにするそれらの間のインターフェイスを実装しました。
これが私がやろうと思っていたステップと、それらをどのように行うかです。Windows PE 実行可能ファイルで x86 命令セットを使用しています
私が取る予定のステップ(私の問題はステップ2にあります):
手順を展開
- mov のような単純な命令を見つけたり、push して、より多くの命令で同じ目的を達成するいくつかの命令に置き換えます。このステップでは、大量のジャンク コードも追加します。
- データベース内の一連の変換テーブルを使用するだけでこれを行う予定です。これはそれほど難しいことではありません。
シャッフリング
- これは私が最も苦労している部分です。コードを関数に分離する必要があります。次に、一連の命令依存関係ツリーを確立する必要があります。次に、依存関係に基づいてそれらを再配置する必要があります。pdb ファイルを解析することで関数を見つけることができますが、命令の依存関係ツリーを作成することは、私が完全に迷っているトリッキーな部分です。
圧縮命令
- 命令を圧縮し、プロセス内の一連の一般的でない不明瞭な命令を実装します。そして、最初のステップと同様に、コード署名のデータベースを使用してこれを行います。
もう一度明確にするために、ステップ 2 を実行するのに助けが必要ですが、どのように始めればよいかわかりません。いくつかの図を作成してみましたが、従うのが非常にわかりにくくなっています。
OH: 明らかに、保護されたコードはあまり最適ではありませんが、これは学校で試してみたかった単なるセキュリティ プロジェクトです。