1

特定のソフトウェアのエクスプロイトを開発しようとしていて、2 つの異なる動作で応答できるとします。1 つは変数の割り当てが正しくないためにプロセスがクラッシュするか、2 つは EIP の制御を取得して無効なアドレスに戻ります。これら 2 つの異なる動作の理由は ASLR によるものであり、部分的な情報漏洩しかないため、ブルート フォースを実行する必要があります。EIP が変更された場合にのみプログラムが壊れるようにします。ただし、プロセスは常にクラッシュして再生成されるため、EIP が変更された場合にのみ停止するようにプログラムに指示する方法はありません。関係なく、プロセスは常に GDB でクラッシュします。この困難をどのように克服できますか?(これを IT セキュリティに投稿することを考えましたが、これは GDB と関係があるため、ここで投稿する方がよいと判断しました)

4

1 に答える 1

0

メモリ破損が発生する前に、ブレークポイントを設定する必要があります。クラッシュの瞬間に gdb が破損し、コマンドshow stackを使用してコール スタックが破損していると判断するように指示できますが、EIP が既に破損している場合は、関数のスタック フレームが部分的に破損しており、show stack部分的に破損します。 (あなたが壊したスタックの量に応じて!)。ただし、このプロセスは、メモリ破損が発生する場所を絞り込むのに役立ちます。コール スタックの上位にブレーク ポイントを設定して、プログラムをステップ実行することもできます。

GDB にはリバース デバッグもあります。これは、クラッシュ後に後退するだけなので、おそらくより簡単なアプローチです。ただし、この機能はかなり新しいものです。通常、ハッカーは上記の手法を使用する必要がありました。

于 2012-06-27T01:19:46.433 に答える