pwnable.kr質問6:ランダム

$ 000オープン環境の
ソースを表示

#include 

INT {main()の
    符号なし整数ランダム。
    ランダム =ランド()。    // ランダムな値!

    符号なし整数キー= 0 ; 
    scanf関数(" %d個"、&​​#038 ;キー); 

    もし((ランダム^キー)== 0xdeadbeefが){ 
        のprintf(" !グッド\ N " ); 
        システム(" / binに/猫フラグ" );
        リターン 0 ; 
    } 

    のprintf(" 間違った、多分あなたは2 ^ 32例を試してみてください。\ n個" );
     戻り 0 ; 
}

ソースコードからわかるように、ランダムシードを追加しない場合、ランドは、擬似乱数を生成し、あなたがランダムな数字のうち、実行するたびに、そのような「にsrand((符号なし)時間(NULL))を」初期化するためのランダムシードとして、同じですが、乱数は毎回異なって生成されます。

0x001のエクスプロイト

私たちは、乱数の値を知ることができ、その後、0xdeadbeefがXOR、あなたは私たちが入力した値は、異なるまたは可逆など、任意の二つの値が異なるか、第三の外であることを知ってもらうことができます。
gdbでのデバッグの下では、主な機能を出力します

 

 見やすい、RBP-8は、私たちの入力の値であり、RBP-4 * 0x40062fにブレークポイントを設定し、ランダムな値を生成しています。

 

 RBP-4値はランダムデータのアドレスでご覧ください。

その後、値と0xdeadbeefが位相が、結果は我々が入力するデータです。

 

 

 

 

おすすめ

転載: www.cnblogs.com/DennyT/p/11622768.html