#include <stdio.h> 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; }
Introduction:
본 문제는 rand()함수를 통해 만들어진 랜덤값과 표준입력을 통해 받은 key값에 xor연산을 수행하여 나온 결과가 0xdeadbeef가 될 경우 flag를 출력
How to solve:
일단 rand()함수에는 seed값이 들어있지 않으므로, 계속 같은 값을 생성할 것이다. ltrace명령어를 이용하면 rand()함수를 통해 생성되는 값을 볼 수 있다. 그림 1은 ltrace명령어를 통해 rand값이 0x6b8b4567임을 확인한 그림이며, 그림 2는 그림 1에서 확인한 갑과 0xdeadbeef값을 xor하여 key값을 계산한 그림이다. 이렇게 얻어낸 key값을 프로그램에 입력하면 문제가 해결된다.
<그림 1> ltrace를 이용해 랜덤값을 확인
<그림 2> key값을 계산하기 위해 랜덤값(0x6b8b4567)과 0xdeadbeef를 연산
'Pwnable.kr' 카테고리의 다른 글
[1pt]mistake (0) | 2015.08.06 |
---|---|
[1pt]cmd1 (0) | 2015.08.06 |
[1pt]fd (0) | 2015.08.06 |
[5pt]bof (0) | 2015.08.06 |
[2pt]lotto (0) | 2015.08.06 |