Reverse Engineering
CodeEngn Basic 06
PEiD 툴로 확인해 보면 UPX로 확인된 것을 볼 수 있습니다.(UPX 언팩은 Basic 05-1 글을 참고) 잘못된 시리얼을 입력했을 시 Wrong serial!! 메시지가 나타나는 것을 확인할 수 있습니다. 이번에는 Ollydbg의 Back to user 모드를 이용하여 문제를 풀겠습니다. Back to user 모드란 프로그램이 멈춘 상태에서 지금 사용하고 있는 이벤트가 있는 코드로 이동하는 모드입니다. 이 모드를 사용할 때는 프로그램이 멈춰 있어야 합니다. 먼저, Ollydbg에서 프로그램을 실행(F9)시킨 후 임의의 문자열을 입력하여 메시지 창을 띄웁니다. 이 상태에서 Ollydbg를 활성 시킨 후 일시정지(F12) 시킨 후 AlT + F9를 눌러 오른쪽 아래를 Back To User로 바꾼 ..
CodeEngn Basic 05-2
Ollydbg로 열었을 때 나오는 내용입니다. PUSHAD 는 모든 범용 레지스터들(EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI)를 스택에 올리는 명령어입니다. 저기서 조금 내려가다 보면 아래와 같이 POPAD와 JMP라는 무조건 분기하는 곳이 있습니다. 프로그램이 제대로 동작하기 위해서는 자신도 또한 Packing을 풀어 원래 자신의 코드로 돌아가야 하므로 JMP 05.00441270 과 같이 원래 코드로 이동하는 부분이 있으며 이동한 곳이 바로 OEP 가 됩니다. 참고로, POPAD 명령어는 PUSHAD와는 반대로 스택에 존재하는 값들을 레지스터로 POP 하는 역할을 합니다. 다음은, OEP로 이동하여 원래 코드가 보이는 화면이며 OllyDump 플러그인을 이용해 Dump를 ..
CodeEngn Basic 05-1
이번 프로그램을 실행 시키면 다음과 같은 창을 띄우게 된다. 이번에는 PEiD 라는 툴을 이용하여 이 프로그램의 정보를 확인해보겠습니다. 아래쪽을 보시면 UPX 0.89 ~ 라고 쓰인 것을 볼 수 있는 데요. 이는 UPX라는 Packer를 이용하여 원래 프로그램이 Packing 되어 있다는 의미입니다. 그리고 우리가 제대로 분석을 하기 위해서는 Unpacking을 통해 원래 코드를 얻어야 함을 의미합니다. 여기서 Packing 이란? 기본적으로는 파일 압축이다. 파일의 크기를 보다 작게 줄이기 위해 사용하는 방법. 압축프로그램을 이용한 것과는 달리 바로 실행된다는 이점이 있다. 여기서 시간이 지나면서 자신의 코드를 타인의 리버싱으로 부터 보호하기 위한 Protector를 이용하여 Packing을 하기도 ..
CodeEngn Basic 04
아래 사진은 각각 그냥 실행했을 때와, Ollydbg에서 실행했을 때의 사진이다. 그냥 실행시 화면Ollydbg를 통해 실행시 화면 스트링으로 문제를 풀 수 있을 거라 생각하지만 한글은 Ollydbg에서 지원이 안되기 때문에 사용된 함수를 추측하는 것으로 문제를 풀겠습니다. 스트링 검색과 같은 방법으로 오른쪽마우스 -> Search for -> All intermodular calls 를 클릭하면 해당 프로그램에 호출된 함수들을 모두 볼 수 있다. 아래는 All intermodular calls 의 창이며 위쪽을 살펴보면 Debug와 관련된 함수를 쉽게 찾을 수 있다.
CodeEngn Basic 03
프로그램을 실행하여 아무 키나 입력했을 때의 모습이다. 해당 파일을 OllyDbg로 실행한 다음 마우스 오른쪽 -> Search for -> All referenced text strings 를 클릭하면 아래와 같은 화면을 볼 수 있다. 여기서 현재 프로그램의 문자열들을 모두 확인 할 수 있다. 아래쪽을 보면 키값이 틀렸을 때 나온 경고창의 메시지 내용을 찾을 수 있다. 메시지 내용은 키값이 일치할 때와 불일치한 경우 두 가지가 있을 것이고, 해당 메시지 위치부터 역추적해나가면 조건분기점을 찾을 수 있을 것이다. 원하는 문자열을 더블 클릭하면 해당 위치로 이동하게 된다. 문자열에서 올라가다보면 JE(Jump if Equal) 분기점을 볼 수 있으며, 조금더 올라가면 vbaStrCmp 라는 함수를 볼 수 ..
CodeEngn Basic 02
다음은 실행했을 때 뜨는 창이다. 손상되어서 그런지 오류가 나타난다. Ollydbg로 열어봐도 오류가 나므로 Hex Editor(HxD) 혹은 PE구조를 볼 수 있는 PEview를 이용해 열어보자. 아래는 PEview로 본 모습이다 PE 파일의 헤더가 모두 사라진 것을 볼 수 있다. PE 구조를 공부하여 일일이 복구하는 방법도 있지만. 현재의 나는 무리가 있는 방법이므로, 위의 HEX 값들 중에서 답을 추측해야겠다. 답을 찾기란 어렵지 않다 그냥 봐도 아 저거겠구나 싶은 문자열이 있으니 인증하면 된다.
CodeEngn Basic 01
CodeEngn Basic 문제 풀이 시작!! 1번 문제의 내용이다. 파일을 다운받은 후 실행시켜 보면 아래와 같은 화면이 나옵니다. CD-Rom이 아니라고 하는 군요. OllyDBg 풀이: Ollydbg로 본 어셈블리코드입니다. 아래 String 값들을 보니 00401026 에 있는 JE 조건분기점에서 아래쪽으로 점프를 해야 하드로 인식한 거군요. 여기서 JE 명령어란 Jump if Equal이란 뜻으로 Zero flag의 값이 0일 경우 점프하게 됩니다. 이 zero flag를 0으로 세팅하려면 바로 윗줄인 CMP EAX, ESI 에서 0이 나와야 하며 이는 두 값이 같다는 뜻입니다. 비교하는 두 값의 변화를 쫓아서 올라가다보면 GetDriveTypeA를 호출하였습니다. 반환값은 EAX에 들어갔을 것..