문제를 봅시당.
딱히 뭔가 특별한 정보는 없는 듯 합니다. 접속해 봅시다.
평범한 구조네요. 소스 코드를 읽어 봅시당.
결국, 사용자가 입력한 값과 random 값이 XOR 연산을 한 값이 0xdeadbeef 가 되도록 하면 되겠습니다. XOR 연산의 특징 덕분에 random 과 0xdeadbeef 가 XOR 연산하면 사용자가 입력해야 하는 값을 알 수 있겠네요. random 값을 구하는게 핵심이군요!
random 값을 구해야 하는데, 위의 소스 코드에서 알 수 있는 사실하나는 rand() 함수의 시드 값이 없다는 점입니다. 컴퓨터는 기본적으로 난수를 생성하지 못합니다. 그래서 컴퓨터의 시간이나 마우스 포인터 같은 정보들에 기반한 값으로 시드 값을 생성하여, 특정 알고리즘에 넣은 뒤 난수를 구하는데요.
이 문제에서는 그런 시드 값을 랜덤으로 생성해주는 코드가 보이지 않네요. 다시 말해, random 값은 일정하다는 소리입니다. 디버깅을 통해 random 값을 알아봅시다.
랜덤 값을 만들어주는 rand 함수를 call 하는 부분에 break point 를 걸고, 심호흡을 합니다.
제대로 브포가 걸렸군요! 살포시 ni 로 rand() 함수를 call 해 봅시다. rand() 함수가 call 된 직후의 eax 값은 rand() 함수의 리턴 값일 겁니다. 이 값이 즉 random 값이겠죠. rbp - 0x4 에 저장하기도 하는군요.
아무튼 eax 값을 확인해보면 random 값을 구할 수 있습니다. random 값은 0x6b8b4567 입니다.
이제 random ^ 0xdeadbeef 를 해보면 0xb526fb88(3,039,230,856)이라는 값을 얻을 수 있습니다.
구한 이 값을 입력해줍시다.
'Write-up' 카테고리의 다른 글
[Harekaze CTF 2018] Harekaze Farm writeup (0) | 2018.02.12 |
---|---|
[CODEGATE 2018] BaskinRobins31 write-up (0) | 2018.02.06 |
[pwnable.kr] blackjack write-up (0) | 2018.01.22 |
[pwnable.kr] cmd1 write-up (0) | 2018.01.17 |
[angr tutorial] ais3_crackme writeup (0) | 2018.01.14 |