web-dev-qa-db-ja.com

ランダムなバイナリコードを安全に実行する方法は?

さて、ランダムに生成されたバイナリコードを安全に実行する方法を探しています。また、コードを逆コンパイルできる必要があります。どんなアイデアやすべてのプログラミング言語も歓迎します。

ところで、それはほとんどバイナリコードです。バイトコードまたはソースコードは機能しません。これは研究プロジェクトなので、変数を追加することはできません。

2
amir

その見た目から、マルウェア研究者がマルウェア分析のために行うのと同様のことをしたいと考えています。

ランダムバイナリを安全に実行する限り、FrustratedWithFormsDesignerのコメントはそれをうまくカバーしています。

仮想マシンで実行するだけで、コンピューターにリスクがこぼれるのを防ぐことができます。 Virtual Box のような無料の仮想マシンがたくさんあります VMWare または Parallels のいくつかの無料の層

ただし、バイナリを制限またはサンドボックス化する方法について詳しく知りたい場合は、ここで詳細を読むこともできます: http://www.porcupine.org/forensics/forensic-discovery/chapter6.html

逆コンパイルについては、前回の記事でも言及されています。役立つ可能性のあるリバースエンジニアリングを検索することもできます。

好奇心からですが、研究プロジェクトについて聞いてもよろしいですか?フォレンジックまたはリバースエンジニアリングまたは???

3
Maru

では、ランダムにコードを生成して実行しますか?

私の見方では、あなたの言語の選択は次のとおりです。

  1. バイナリ(ストレートマシン命令)
  2. 高級言語

(2)がランダムに生成された場合、おそらくコンパイルされません。コードが本当にランダムではなく、コンパイルできると仮定すると、すべての不良データが渡されるため、例外が発生する可能性があります。

つまり、(1)だけが残ります。実行される可能性のある「有効に見える」マシン命令の束をつなぎ合わせることができる可能性ははるかに高くなります(まだ100%ではありません)。しかし、繰り返しになりますが、ランダムに生成されたマシン命令の99.99%は、それらの4つまたは5つを超えることさえありません。

これを自分で証明したい場合。 ダメージを防ぐをしようとするのを忘れると思います。何もありません。 C++プログラムをコンパイルし、main関数にブレークポイントを設定し、逆アセンブリウィンドウを開いて、ランダムデータでメモリを舗装し、プログラムがどこまで到達するかを確認するだけです。

必要な唯一の保護は、仮想メモリをサポートする最新のOSによってすでに提供されています。通常のユーザープロセス(つまり、カーネルモードで実行されていないプロセス)は、別のプロセスやOS自体に損傷を与えることはできません。最悪の場合、無効な命令の実行中に自分自身を強制終了します。私はあなたの実験のために、それはあなたが今までに必要とするすべての保護であるべきだと思います。

0
DXM