티스토리 뷰

System/Pwnable.kr

[Pwnable.kr] random

MitNy 2017. 10. 12. 18:19

passcode 문제를 풀다가 잘 안돼서 다른 문제로 넘어왔다ㅎㅎ

알고보니 passcode 문제는 무려 10point 짜리 문제였다! 힝입니다ㅠㅠ 순서대로 푸는 건줄 알았는데,

아직 시스템 초보이므로 point가 낮은 것부터 차근차근 풀기로 했다.



random.c 의 코드는 다음과 같다.

#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;

}



rand() 함수로 random value를 random 변수에 저장한다.

key는 0으로 초기화 되어있고, key를 입력받는다.


key와 random 을 XOR 했을 때, 0xdeadbeef와 일치하면 flag를 출력해준다.


어떻게 어떤 값이 나올지 모르는 random value와 사용자 입력 key를 XOR 해서 deadbeef를 만들까?




0xdeadbeef ^ x 는 일정한 값이고,  계산된 값을 다시 x로 XOR하면 0xdeadbeef가 나오게 된다.


예를 들어,

0xdeadbeef ^ 1234 = 0xdeadacd8 이고

0xdeadacd8 ^ 1234 = deadbeef 이다.


찾아보니, 같은 seed 에선 생성되는 random value도 같다고 한다.

그렇다면 항상 같은 random value와 0xdeadbeef를 XOR 시킨 값을 다시 random value와 XOR 시키면 되기 때문에,

코드를 짜서 key값을 출력하도록 하고, 출력된 키 값을 random을 실행시킨 후 입력하면 될 것 같다.



이런식으로 rand() 함수로 random value를 생성하고, 0xdeadbeef와 XOR 한 값을 key에 저장한다.



key = 3039230856





'System > Pwnable.kr' 카테고리의 다른 글

[Pwnable.kr] bof  (0) 2017.08.30
[Pwnable.kr] collision  (0) 2017.08.23
[Pwnable.kr] fd  (0) 2017.08.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함