JFF3의 Reversing_Damnida 입니다.
먼저 Exeinfo에 넣어보면
64비트 이미지라고 나옵니다. 한 번 실행시켜 보겠습니다.
그 어떠한 것도 뜨지 않고 시커먼 창에 커서만 깜빡이네요.
딱히 찾아낼 수 있는 것이 없어 보입니다. 바로 IDA로 열어보겠습니다.
main함수 내에 1자형으로 쭈욱 이어져 있습니다. 보기 좋네요.
문자열을 찾아 보면
눈이 가는 문자열이 몇 개 보입니다. 저 main함수를 분석해 보면 안티디버깅도
굉장히 많이 박혀 있구요.
의미 없는 분기문들도 보이구요.
NOP 떡칠한 곳도 보입니다. 난독화가 되어있거나 바이너리에 이상한 짓을 해 놓은 것 같습니다.
좀 더 보면
이렇게 어떤 값을 출력하는 부분도 볼 수 있고
키를 얻었다고 알려주는 부분도 있습니다. 그 다음 저는 x64 Dbg를 이용해서 디버깅을 했습니다.
Entry Point 입니다. 여기서 조금만 진행하면
이렇게 main함수로 들어가는 부분을 볼 수 있습니다. 들어가고 나서는 IDA와 코드를 비교하면서 프로그램의 흐름이 아까 보았던 Get_Key :) 이 쪽으로 향하게 해 주면 됩니다.
안티디버깅들도 우회 하면서 잘 따라가 줍니다.
쭉쭉 진행을 하다 보면 갑자기
여기서 K5y Is : 라는 문자열이 보입니다. 언뜻 보면 키를 출력해 줄 것 같으나 페이크 입니다. 어떤 값을 출력해 주기는 하지만 키가 깨져 있구요. 우리는 아까 봤던 Get_Key :)부분으로 가야 합니다. 순조롭게 진행을 하다 보면
갑자기 :( crashed 크래시가 났답니다. 물론 페이크 입니다. 크래시가 났지만 우리는 꿋꿋이 플래그를 향해 나아가 줍니다.
중간에서 귀엽게 IsDebbugerPresent함수도 한 번 등장해 줍니다. 근데 이것도 페이크 입니다.ㅋㅋㅋㅋㅋㅋ 여기서 좀 더 주의해서 보면은 디버깅 중일때는 정상적으로 나아가고 제로 플래그나 분기문을 수정해 주면 exit()함수로 끝내 버립니다.
아무것도 건들지 말고 쭉쭉 나아가 주면
드디어 Get_Key :)가 나왔습니다. 여기서는 딱히 하는게 없고 더 나아가서 매우 긴 NOP 더미들을 지나가면
이런 부분들이 보입니다. 여기서 ResumeThread라는 함수를 호출하게 되면
이렇게 프로그램이 크래시가 나면서 플래그를 출력해 줍니다. 사실 이 크래시도 페이크 입니다. 저기서 프로그램 닫기 누르고 정상적으로 디버깅을 또 진행할 수 있더라구요.ㅋㅋㅋㅋ
이제 저 값들을 아스키로 변경해 주시면
이렇게 완성된 플래그가 나오게 됩니다.
Reversing.kr의 미니 Twist1을 푸는 기분이었습니다.ㅋㅋㅋㅋㅋ
문제의 의도만 파악하면 그렇게 어렵지 않게 풀 수 있었을 것 같은데 생각보다 배점이 높더라구요.. 400점...
이렇게 Damnida의 풀이를 마치겠습니다.
Flag : _jfF_M4dC10wn_:)
'Write Up' 카테고리의 다른 글
정보보호올림피아드2015 본선 Q3 (0) | 2015.10.17 |
---|---|
정보보호올림피아드2015 본선 Q2 (2) | 2015.10.17 |
Layer7 CTF Write-UP (2) | 2015.09.01 |
YISF 2015 Write-Up 예선 (0) | 2015.08.12 |
[Just For Fun3] Reversing_AVReversing (0) | 2015.07.26 |