전체 글

전체 글

    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 툴을 이용하여 ..

    CodeEngn Basic 13

    문제가 아무것도 없습니다…..simple 그 자체입니다… 다운받아서 실행시키면 아래와 같이 콘솔창에서 실행됩니다. 이번에도 key를 찾는 것이라 생각됩니다. 여느 때와 같이 올리디비거에서 실행해보겠습니다. 실행시키면 아래와 같은 에러 메시지를 띄웁니다. 무슨 파일이길래 이러는 지 확인하기 위해 PEiD를 이용하겠습니다. .NET 을 이용하는 C# 프로그램이었습니다. 지금까지 풀어온 문제 파일들과 뭐가 다른가 하면 지금까지의 프로그램은 전부 Window에서만 실행이 가능한 PE 파일들이었습니다. 이런 프로그램들은 리눅스에서 실행이 불가능합니다. 하지만, JAVA나 C# 같은 언어는 운영체제(OS: Window, Linux 등)에서 바로 실행되는 것이 아니라 각각 JVM, CLR 등을 통해 실행되기 때문에 ..

    CodeEngn Basic 12

    Key값을 구한 후, 성공메시지 부분을 HexEditor로 수정하는 문제입니다. 먼저 올리디버거를 이욯하여 Key값을 알아보겠습니다. 보통, 성공 메시지를 찾아서 분기점을 찾는 식으로 풀었는데 바로 보이네요…;; 그래도 찾는 방법을 알려드리겠습니다. 코드창 -> 마우스 우클릭 -> Search for -> All referenced text strings 를 클릭하시면 아래와 같이 문자열을 찾을 수 있습니다. 성공했을 경우의 문자열에서 흐름을 거꾸로 거슬러 올라가면 조건분기의 조건이 EAX의 값이 7A2896BF이면 성공임을 알수 있습니다. 계속 거슬러 올라가면 어떠한 처리를 하는 것을 알 수 있으며, GetDlgItemInt 라는 함수를 불러오는 것을 볼 수 있습니다. 이 함수는 대화상자 컨트롤의 텍스..

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

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