- int main(){
- unsigned int random;
- random = rand(); // random value!
- unsigned int key=0;
- scanf("%d", &key);
- if( (key ^ random) == 0xdeadbeef ){
- printf("Good!\n");
- system("/bin/cat flag");
- return 0;
- }
- printf("Wrong, maybe you should try 2^32 cases.\n");
- return 0;
- }
key값과 random 을 XOR 연산을 하였을때 0xdeadbeef 가 나오면 된다.
random 시드가 없으므로 값이 고정되어 있을 것이다.
random값은 rand 함수가 실행된 다음에 저장될 것이다.
필자는 scanf ( )함수가 시작되기 전의 주소에 break point를 걸고 실행시켰다.
random 값은 rbp -0x4에 있으며 그 값은 0x6b8b4567이다.
a^b=c
c^b=a
XOR의 특징을 이용하여 키를 구한다.
key는 3039230856이다.
scanf( )가 정수를 취하므로 굳이 바꿀 필요 없겟다 그대로 대입하자.
앙 기모띠
'pwnable > pwnable.kr' 카테고리의 다른 글
pwnable.kr -lotto (0) | 2016.09.25 |
---|---|
pwnable.kr -leg (0) | 2016.09.25 |
pwnable.kr -passcode (0) | 2016.09.24 |
pwnable.kr -echo1 (0) | 2016.09.23 |
pwnable.kr -bof (0) | 2016.07.29 |