1. int main(){  
  2.     unsigned int random;  
  3.     random = rand();    // random value!  
  4.   
  5.     unsigned int key=0;  
  6.     scanf("%d", &key);  
  7.   
  8.     if( (key ^ random) == 0xdeadbeef ){  
  9.         printf("Good!\n");  
  10.         system("/bin/cat flag");  
  11.         return 0;  
  12.     }  
  13.   
  14.     printf("Wrong, maybe you should try 2^32 cases.\n");  
  15.     return 0;  
  16. }  


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

+ Recent posts