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