기초적인 문제입니다(근데 푼사람은 적은...)
이 문제는 리눅스에서 pwndbg를 이용해서 풀어야 합니다.
실제 플래그도 리눅스를 써야 얻을 수 있고요
아 그리고 다운받은 후에
$ chmod +x [실행파일]
위 명령어로 실행권한을 주어야 제대로 실행 및 디버깅이 됩니다
pwndbg를 설치한 상태로 디버깅을 실행하면 위와 같이 디버깅이 실행되는것을 볼 수 있습니다.
일단 실행부터 시켜보겠습니다.
랜덤한 수가 생성이 되고 입력값을 받은뒤 결과값이 나오네요..
이제 main함수를 봐야겠습니다.
main의 일부분 입니다.
get_rand_num으로 난수를 생성하고 __isoc99_scanf@plt를 통해서 입력값을 받고 xor연산을 한 다음 main+341에서 strcmp@plt를 통해서 답과 비교하는 것 같습니다.
저는 일단 main+341에 중단점을 걸고 다시 실행을 시켜보도록 하겠습니다.
pwndbg> b *main+341
Breakpoint 1 at 0x555555555494
pwndbg> run
난수로 0xec1dc40f가 생성되었고 저는 1234를 입력했습니다 그 결과값으로 dd0cd1ce가 생성되었습니다.
s1,s2를 보면 result와 a0b4c1d7과 비교하는걸 보니 result가 a0b4c1d7이 나와야 하나 봅니다
그렇다면 Random number XOR Input = a0b4c1d7이 나와야 하는 것 같습니다.
그러면 Random number XOR a04c1d7 = input이 나오겠네요
근데 그전에 Random number XOR Input에 대해서 계산기를 돌려보면
dd0cd1ce가 아닌 ec1dc0dd가 나왔습니다. 뒤집혀있네요
그러면 똑같이 Random number XOR 7d1c4b0a= Input을 해주어야겠네요
그러면 답이 나옵니다.
진짜 플래그값을 얻으려면 nc를 사용해서 접속해야 합니다!
'Security > Reversing-DreamHack' 카테고리의 다른 글
[DreamHack] Long Sleep (0) | 2023.11.27 |
---|---|
[DreamHack] Inject ME!!! (0) | 2023.09.11 |
[Dreamhack] rev-basic-2 (0) | 2023.09.04 |