본문 바로가기

Write Up

[Just For Fun3] Reversing_Damnida


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