System/pwnable.kr
pwnable.kr random
언우s
2018. 4. 4. 10:13
random
random변수에 랜덤값을 받고 key에 값을 입력받아 두 개의 값을 ^연산자로 처리한 값이 0xdeadbeef면 flag를 열 수 있다.
^연산자는 XOR연산자이다.
XOR연산자는 2진수로 봤을 때 두 값이 다르면 1, 같으면 0이 된다.
근데 여기서 rand()를 아무리 써봤자 값이 변하지 않는다.
시드값이 없기 때문이다.
값이 변하게 하려면 srand()를 써야한다.
key은 rbp-0x8에 random은 rbp-0x4에 있다.
일단 random값을 알아보자.
어셈블리 코드를 보면 random값이 들어가 있는 레지스터가 eax인 것을 알 수 있다.
그러므로 eax에 값이 들어간 후에 break를
걸어보면...
rax(eax)에 0x6b8b4567가 들어간 것을 알 수 있다.
0xdeadbeef=11011110101011011011111011101111
0x6b8b4567=01101011100010110100010101100111
01101011100010110100010101100111과 어떤 값을 XOR해서
11011110101011011011111011101111가 나올려면 어떤 값이
10110101001001101111101110001000이 되야 한다.
10110101001001101111101110001000=0xB526FB88=3039230856