C#のスタックオーバーフロー(原因)を理解しやすくするため、また教育上の目的で、脆弱なプログラムを作成したいと考えています。基本的には、スタックオーバーフローが必要で、EIPを上書きするので、私はそれを制御して自分のコードを指すことができます。 私の問題は次のとおりです。どのオブジェクトがメモリの場所としてスタックを使用していますか? 例:プログラムは、行区切りが見つかるまで、再帰的なバイト・リーディングでテキスト・ファイルを解析します(ええと、誰もこれをしないと思いますが、これは学習のためだけです)。現在、テキストファイルにcharの16進数の文字列を追加しています。この文字列は、main()を呼び出した後にインスタンス化されるオブジェクトのフィールドです。 はWinDbgのを使用して、私は、スタックが(ほぼ)無限再帰から溢れ出た後に、これらの値を得た:C#のスタックオーバーフローの上書きEIP
(14a0.17e0): Break instruction exception - code 80000003 (first chance)
eax=00000000 ebx=00000000 ecx=0023f618 edx=778570b4 esi=fffffffe edi=00000000
eip=778b04f6 esp=0023f634 ebp=0023f660 iopl=0
これは興味からのものである場合ところで、私は、Win7x86 AMDマシンを使用しています。 私はstrcpyを使ってスタックオーバーフローを引き起こす多くのC++の例を見てきましたが、C#で同様のメソッドがありますか?
よろしく、 NOMAD
編集:私は、スタックオーバーフローを引き起こすために、このコードを使用します。
class FileTest
{
FileStream fs = new FileStream("test.txt", FileMode.Open, FileAccess.Read);
string line = String.Empty;
public FileTest()
{
Console.WriteLine(ReadTillBreak());
}
private string ReadTillBreak()
{
int b = 0;
b = fs.ReadByte();
line += (char)b;
if (b != 13)
ReadTillBreak();
return line;
}
}
スタックをオーバーフローさせ、ライン文字列(つまり、test.txtの内容)でeipに書き込むことはできますか?
管理対象システムの脆弱性を理解したい場合は、Erez Metulaの管理コードルートキットに関する優れた本を参照してください。http://www.amazon.com/Managed-Code-Rootkits-Hooking-Environments/dp/1597495743/ ref = sr_1_1?ie = UTF8&qid = 1332014581&sr = 8-1 – zmbq