Study

    CodeEngn Basic 09

    StolenByte를 구해야 하는 문제입니다. 여기서 StolenByte 란 Packer 가 Packing 시 원본 코드의 코드 중 다른 곳으로 이동 시킨 코드로써 OEP의 몇 줄의 코드입니다. 원본 코드의 일부분이 다른 곳으로 이동되었기 때문에 일반적인 방법으로 Unpacking을 하면 비정상적인 동작을 하며, 이 StolenByte 부분을 원래대로 돌려준 후 Unpacking을 해야 제대로된 원본 프로그램을 얻을 수 있습니다. PEid 툴을 이용해 UPX 패킹임을 확인할 수 있습니다. 아래는 그냥 언패킹을 했을 때 실행시킨 모습입니다. 비정상적으로 실행되는 것을 볼 수 있습니다. 그럼 이제 제대로 StolenByte를 구해서 복구해보겠습니다. 먼저 OEP로 점프하는 코드로 가보겠습니다. 자세히 보시면..

    CodeEngn Basic 08

    OEP 를 구하라고 하는 것을 보니 Unpacking 쪽으로 방향을 잡아야 할 듯합니다. 윈도우 계산기 입니다. UPX 패킹을 확인하였습니다.(Basic 05-1 참조) Ollydbg로 실행시킨 후 조금 아래로 내려가면 평소처럼 POPAD를 찾으실 수 있습니다. 그리고 좀더 내려가시면 JMP 08.01012475 를 찾으실 수 있으며, 이전 문제를 풀어보신 분들은 저것이 OEP 라는 것을 아실 것입니다.

    CodeEngn Basic 07

    C 드라이브의 이름이 CodeEngn 일 경우에 대해 풀어야 하므로 일단 C 드라이브의 이름을 CodeEngn으로 변경하고 시작하겠습니다. 방법은 폴더 이름 바꾸듯이 하시면 되요. 어떤 식으로 동작하는 지 대략적으로 파악합니다. 마우스 우클릭 -> Search for -> All referenced text strings 를 가면 역시 친절하게 문제풀이에 도움이 될 문자열이 보입니다.(계속 이렇게 푸니 이젠 습관이 됐네요 ㅎㅎ) 입력한 값이 시리얼인 경우 혹은 아닐 경우의 문자열을 더블 클릭하여 해당하는 위치로 이동하면 값을 비교하는 곳과 조건분기점을 찾을 수 있습니다. 다음은 위와 같이 브레이크 포인트(F2)를 걸어 놓고 Ollydbg에서 실행(F9)한 후 임의의 값을 입력했을 때 멈춘 모습입니다. 이..

    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 라는 함수를 볼 수 ..

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

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