Reverse Engineering

    CodeEngn Basic Clear

    끝~~Basic 문제를 모두 풀었습니다~!

    CodeEngn Basic 20

    파일 안에 있어야 할 데이터의 HEX값을 찾아야하는 문제입니다. 아래는 파일을 그냥 실행한 경우입니다. 아무것도 없는 파일이 실행됩니다. 파일을 올리디버거를 이용해 여시면 CreateFile 함수를 통해 파일에 접근하는 핸들을 리턴한 후 ReadFile을 통해 파일의 데이터를 불러는 것을 확인할 수 있습니다. ReadFile 부분을 자세히 보시면 HEX로 12 즉 DEC로 18byte를 읽어오도록 설정하고 있습니다. 파일 호출이 끝난 다음에도 제대로 읽어왔는지 확인하고 있습니다. 분석을 위해 파일 안에 임의의 값으로 18byte를 채워넣고 실행해보겠습니다. (크랙된 창에서 CodeEngn! 이 나타나는 걸로 봐서 파일을 통해 입력받는 듯합니다. 그래서 CodeEngn!이 포함된 문자열로 문제를 풀어보겠습..

    CodeEngn Basic 19

    이번에는 PEiD 가 아닌 exeinfope 라는 툴로 살펴보겠습니다. http://www.exeinfo.xn.pl/ 사이트인데 접속이 안되네요. 아래에 파일 올려놓았습니다. Autoit으로 프로그래밍했고 upx 패킹이 되어있네요. Autoit은 스크립트언어의 일종입니다. 배우기 쉽데요. ㅋ 참고로 autoit 은 자체적으로 upx 패킹을 지원합니다. 올리디버거로 직접 언패킹을 하려 했지만 지식과 경험의 부족으로 툴을 사용하였습니다. 어떤 분이 autoit으로 upx 툴을 만드셨더라구요. http://blog.naver.com/seongwk/70122005613 여기서 받으실 수 있습니다. 못 받으시는 분들은...역시 아래에 파일을 올렸습니다. 이제 문제 풀이에 들어가겠습니다. 먼저 언패킹을 해주세요. ..

    CodeEngn Basic 18

    문제입니다. 아래는 Serial을 임의로 입력하였을 경우 결과창입니다. 올리디버거로 문제파일을 실행시킵니다. 문제 풀이방법은 지금까지와 동일합니다. 코드창 -> 마우스 우클릭 -> Search for -> All referenced text strings 를 클릭합니다. 이제 G0od이나 Your serial is correct 부분으로 이동합니다. 이동한 후 위로 올라가면 분기점과 lstrcmpi 함수를 호출하는 부분이 있습니다. 저 함수를 쓰는 것으로 보아 함수의 인자로 시리얼과 입력한 키를 넘겨 비교를 하여 맞는지 틀린지 판단하는 것을 알 수 있습니다. 즉, 함수를 콜하는 부분에 BreakPoint를 지정하면 인자로 보내지는 시리얼값을 확인할 수 있습니다.

    CodeEngn Basic 17

    이번에는 거꾸로 Name을 구하는 문제입니다. 실행한 화면은 다음과 같습니다. Name을 한 개만 입력하니까 더 입력하라고 하는 군요. 올리디버거를 통해 자세하게 살펴보겠습니다. 우선 입력받는 문자 수를 확인해야하므로 Please Enter More Chars… 부분으로 이동하겠습니다. (코드창 -> 마우스 우클릭 -> Search for -> All referenced text strings) 해당 위치의 코드입니다. 바로 위에 비교문과 분기점을 볼 수 있습니다. JGE(Jump if Greater than or Equal) 명령어는 >= 즉, 크거나 같을 경우 분기입니다. 이 명령어의 사용으로 바로 위에 있는 3이 입력하는 최소 문자길이 인 듯 합니다. 이를 1로 바꿔 문제 풀이가 가능하도록 수정하겠..

    CodeEngn Basic 16

    이번에도 같은 방식의 문제입니다. 다음은 실행 모습입니다. 올리디버거를 통해 풀어보겠습니다. 여태 풀어왔던 방식대로 문자열을 찾아보니(코드창에서 마우스 우클릭 -> Search for -> All referenced test strings 클릭) Wrong password! 문자열이 바로 보입니다. 해당 위치로 이동한 후 위로 올라가면 축하 문자열이 보이고 그 위에 분기점을 찾을 수 있습니다. 그 바로 위에 비교문을 보시면 EAX와 스택의 어떠한 값을 비교하는 걸 보실 수 있습니다. 해당 부분에 BreakPoint(F2)를 지정한 후 실행하여 임의의 값을 입력한 후 결과를 분석하겠습니다. 실행 결과화면 입니다. 비교문에서 BreakPoint에 의해 멈춰있으며 제가 입력한 12345의 16진수 값인 303..

    CodeEngn Basic 15

    한 번 실행해서 임의의 Serial을 입력해보겠습니다. 어떤 프로그램인지 확인했으므로 이제 올리디버거를 이용해 풀어 보겠습니다. 언제나 그렇듯 문자열 검색을 해보겠습니다. 코드창 -> 마우스 우클릭 -> Search for -> All referenced text strings를 클릭합니다. 다행히 이번에는 바로 문자열이 검색되는 군요. 해당 위치로 이동하여 문제를 계속 풀어가겠습니다. 이동한 위치 바로 위에 분기점과 비교문을 볼 수 있습니다. 저 위치까지 실행한 후 비교문에 있는 주소를 덤프창에서 찾아가보겠습니다. EAX의 값은 0x3039 이고 비교하는 주소에 저장된 값은 0x6061 입니다. 어떤 값인지 계산기를 통해 알아보면 EAX는 입력한 값인 12345 이며, 45B844에 저장된 값은 246..

    CodeEngn Basic 14

    Name에 따라 Serial 이 바뀌는 문제입니다. 우선 간단한 정보를 얻기 위해 PEiD를 이용하겠습니다. UPX로 패킹된 것을 볼 수 있습니다. Ollydbg를 통해 언팩을 하겠습니다. UPX 언팩은 언제나 간단합니다. 우선 코드를 조금 내려 POPAD아래의 JMP를 찾습니다.(OEP) 해당 부분에 브레이크 포인트를 걸고 실행시켜 OEP로 넘어가기 전에서 멈춘 후 OEP로 이동합니다. Plugins -> OllyDump(플러그인입니다. 없으면 받으셔야 해요) -> Dump debugged process 를 차례대로 클릭합니다. 아래 Rebuild Import 에 체크를 해제하신 후 Dump를 클릭하면 됩니다. 완벽하게 복구가 되지 않았기 때문에 실행하면 오류가 발생합니다. LordPE 툴을 이용하여 ..

글을 읽어주셔서 감사합니다.

이 블로그는 Google 광고 수익으로 콘텐츠를 만들고 있습니다.