코드게이트 예선전 문제 풀이는 제가 푼데 까지의 방법하고, 본선에 올라가신분들의 풀이법과 함께 풀이를 할것이기 때문에 오늘 9시에 끝났으므로 최대 일주일전에는 풀이법 공개를 해야되므로 그때 문제 풀이를 하겠습니다.
그럼 Reverse L05 시작하겠습니다.
프로그램을 켜보면 맨 위의 그림이 나오고, 아무 키나 누른다음에 Register now! 버튼을 누르면 밑의 에러창이 뜹니다.
그럼 지금까지의 경험을 통해 Wrong Serial,try again문자열을 올리디버거를 이용해서 찾은다음에, 그 주변에 패스워드와 성공시 문자열을 찾으면 되겠죠??
어머 근데 이게 뭔일일까요?? 이상한 BindCtx라는 문자열빼고는 어떠한 문자열도 보이지 않습니다.
네 이번 문제는 바로 패킹에 대한 지식을 알려주기 위한 문제입니다.
패킹이라는 것은 Pack-ing으로 코드를 pack(짐싸기)하는 것인데요, 보통 짐을 쌀때는 최대한 많이 들어갈 수 있게 정렬해서 넣잖아요?? 이와 비슷하게 패킹이라는 것은 코드를 압축시키는것입니다.
패킹에 대한 자세한 설명은 이거 다음 포스팅에서 다루겠습니다.
패킹에 대한 지식을 모르고 맨처음에 프로그램을 디버그하면 이렇게 수많은 jmp구문들을 볼 수 있습니다.
그리고 이렇게 해매게 되는거죠.
-여긴 어디 나는 누구..(작업할때 노래를 틀고 하므로 노래가 나옵니다. 평범한 한글노래이므로 무시)
이런 일을 방지하기 위해서 리버스엔지니어는 PEID란 분석 툴을 이용해서 미리 패킹이 되있는 지 확인을 합니다.
PEiD.exe-제가 쓰던 툴입니다. Avast검사을 마쳤습니다.
PEID를 쓰는 방법은 오른쪽 상단에 있는 ...을 눌러서 분석하고 싶은 파일을 넣고 분석된것을 보기만 하면 됩니다.
아래 네모박스에 이 프로그램은 UPX라는 패커로 패킹되있다고 써있습니다.(패커 이름은 대표적인 몇개만 알면 됩니다.)
으아 그럼 또 upx라는 것은 또 뭘까요??
위의 그림은 upx의 실행화면 입니다.
upx는 공식홈페이지 http://upx.sourceforge.net 에서 다운받으시거나
제가 쓰는 upx를 다운받으시면 됩니다.(언제나 말 안해도 Avast검사를 마치고서 올립니다.)
upx는 dos프로그램으로서 그냥 upx.exe를 누르면 되는게 아니라 cmd를 이용해서 켜야 됩니다.
upx라는 프로그램은 프로그램을 알집,빵집 처럼 압축시키는겁니다.
upx는 굉장히 좋은 프로그램으로서 이 프로그램 하나로 upx압축을 하거나 upx압축을 풀 수 있습니다.
그럼 저는 이 프로그램으로 저희가 분석해야 될 FFCD~~~프로그램을 압축풀겠습니다.
사용 방법으로서는 맨 첫번째 박스처럼 upx [프로그램 이름] [커맨드 or 옵션] 을 쓰면 됩니다.
저는 압축을 풀기도 하고(-d), 압축 풀기 전과 비교를 해야되므로 백업파일 생성하기(-k)를 이용했습니다.
아까 전과 달리 이번에는 upx압축을 푼 FFCD7DC6-upx clear프로그램을 PEID에 넣어봤습니다.
이번에는 프로그램 설명에 Borland Delphi를 이용해서 제작되있다고 써있네요.(Delphi가 뭔지 몰라서 "와 패킹이 이중으로 되있는 프로그램이네요!!"라는 멍청이는 없겠지)
그럼 이제 upx압축을 푼 프로그램을 올리디버거로 돌려보겠습니다.
아까 전과 달리 그 많던 jmp구문들이 다 없어졌습니다.
그럼 이제 문자열찾기를 이용해서 패스워드를 찾는 일만 남았군요!!
이렇게 성공구문,실패구문과 함께 패스워드가 적혀있네요. 그럼 이제 패스워드를 넣어보겠습니다.
(패스워드가 초기 입력창에 나와있는 패스워드와 비슷해서 몇분동안 이게 실제 패스워드인지 몰랐었음...)
어머 근데 이게 뭔일일까요.
분명이 비밀번호를 맞췄는데도 브레이크포인트에 걸리지도 않고, 실패구문만 뜨네요.
그 이유는 맨 위의 상자에서 이름이 Registered User인지 확인을(Call 뭐시기)먼저 하고 틀리면 jmp를 합니다.
그리고 비밀번호 마저도 맞으면 그때 Congrats!뭐시기 하면서 프로그램이 크랙되는 것입니다.
참고로 문제에서 요구하는 프로그램 키는 비밀번호□입니다.(답은 유출하지 않는 나란 남자 착한 남자)
다음 포스팅에서는 L06보다는 UPX말고도 다른 패커들과 upx패킹이 된 프로그램의 언팩하지 않고서의 분석 방법, 패킹이란 무엇인가 등등을 쓰겠습니다.
'리버스엔지니어링 > 크랙미 풀이' 카테고리의 다른 글
CodeEngn Basic RCE L06 문제 풀이 (0) | 2013.03.16 |
---|---|
코드게이트 2013 바이너리 100분석 (0) | 2013.03.12 |
CodeEngn Basic RCE L04 문제 풀이 (2) | 2013.02.19 |
CodeEngn Basic RCE L03 문제 풀이 (0) | 2013.02.08 |
CodeEngn Basic RCE L02 문제 풀이 (0) | 2013.02.05 |