2012-03-20 8 views
1

私は悪用を書くことを教えてきました。shellcode最近、guides/booksの多くは、スタックの開始位置を推測できると主張しています。スタックがどこから開始され、反復可能なエクスプロイトを可能にするのに十分な予測可能なアドレスですが、予測できないように見えるのはなぜですか?

  • スタックの開始アドレスが予測可能なのはなぜですか?スタック内のランダムなアドレスからスタックを開始してはいけませんか?
  • スタックのアドレス開始点が仮想アドレス空間の固定オフセットの場合は、マシンごとに異なるのはなぜですか?
  • 異なるプラットフォーム間のエラーマージンとスタックの開始アドレスはどのくらいですか?
関連

:私のテストのためにAddress Space Layout Randomization (ASLR)"the stack begins with the same address for every program"Address woes from Hacking: The Art of ExploitationWhy does the stack address grow towards decreasing memory addresses?

EDITがオフになっています。

答えて

1

私の考えでは、予測可能なスタックの開始アドレスを決定することは、スタックの先頭を変更できるほど重要ではありません。メソッドが呼び出されると、メソッドが戻るときにコードが実行を再開する場所を指すプログラムカウンタを含む、さまざまなレジスタがスタックに格納されます。さらに、メソッドのローカル変数を格納するためのスタック領域が予約されています。 (これらの変数はどこかに格納する必要があります)場合によっては、これらの変数を使用してスタックの先頭を上書きして、コードが実行を再開する場所を変更することができます。デバッガでメモリを逆アセンブルしたり検査したりすることによっては、プログラムカウンタに関連してスタック上で変数がどこにあるのかを判断するには一般的に十分です。次に、スタック内の戻り位置を上書きして、メソッドが返ってきたときにどこかに戻るようにする "単純な"問題です。

これはあなたの2番目の2点には答えません。私はあなたの最初の回答のみと思っていますが、それはスタートです。

関連する問題