리버싱 썸네일형 리스트형 Study04 - 기초 지식(패킹, 언패킹) 많은 현대 프로그램들은 악성 행위로부터 자신을 보호하기 위해 실행 파일을 패킹하여 배포하곤 한다. 프로그램을 패킹, 또는 언패킹한다는 것은 무슨 뜻일까? 단순히 실행파일의 크기를 줄이기 위해 압축하는 컴프레싱(Compressing)과는 달리 패킹은 프로그램 분석을 어렵게 만들기 위한 목적을 가지고 있다. 이를 프로텍팅(Protecting)이라 하는데 프로그램이 분석되어 악의적으로 동작한다면 보안 사고를 초래할 수 있기 때문에 이 분석 자체를 어렵게하는 행위를 뜻한다. 이는 프로그램의 원본 실행 코드를 암호화하여 저장하고 이를 복호화하는 코드를 프로그램에 포함하는 방식으로 구현할 수 있다. 패커로 인해 패킹된 프로그램의 실행 코드는 실행 시점에 복호화되어 동작을 수행한다. 그렇기 때문에 패킹되지 않은 프로.. 더보기 Study03 - 기초 지식(IAT) IAT, Import Address Table은 실행 파일이 어떤 라이브러리의 어떤 함수를 가져다 쓰는지 기록해놓은 테이블이다. PE Loader가 PE 파일을 메모리로 로딩할 때 IAT에 기재된 API 이름을 참조하여 실제 주소를 찾아 IAT에 API를 가리키는 주소를 적어놓으면 코드에서 라이브러리를 참조할 때 이 주소를 사용하는 방식이다. 프로그램에 라이브러리를 포함하지 않는 DLL 방식을 사용하게 되면서 라이브러리를 프로그램 시작 시 로딩하고 종료 시 메모리에서 해제하는 Implicit Linking 방식과 프로그램 내부에서 사용되는 순간에 로딩하고 사용이 끝나면 해제하는 Explicit Linking 방식 두 가지로 구분되었는데 이 IAT는 전자의 방식에 사용된다. Import Address Ta.. 더보기 Reversing With Lena Tutorial 17 Lena의 리버싱 튜토리얼 17번째다. 다른 크랙미에서도 많이 볼 수 있는 KeygenMe 형태의 문제로 입력한 이름에 기반하여 시리얼을 생성하며 해당 시리얼이 무엇인지 추측하는 문제다. 먼저 프로그램을 실행시켜보면 다음과 같다. 간단하게 폼 두개와 버튼 두개로 이루어져 있다. About 버튼을 눌러보면 간단한 프로그램 안내 메시지가 뜨고 Check 버튼을 누르면 다음과 같은 메시지 박스가 나타난다. 아무래도 필드가 비어있으면 오류 메시지가 나타나는 것 같다. 위아래 필드에 아무 값이나 채우고 다시 한번 클릭해보니 다음과 같은 메시지 박스가 나타났다. 디버거를 하드 드라이브에서 지우라고 하고 있지만 그냥 하는 말이고 이것은 입력한 이름과 시리얼이 일치하지 않았을 때 나타나는 오류 메시지 박스일 것이다. .. 더보기 Reversing With Lena Tutorial 15 - Call Stack, Code Caving 리버싱 튜토리얼 중에서도 유명한 레나(Lena)의 튜토리얼 15번째다. 첫번째부터 진행하지 않고 중간중간 하는 이유는 지금 읽고 있는 책을 따라서 실습해보는 중이기 때문이다. 추후 첫번째 튜토리얼부터 따라해볼 예정이다. Abex의 크랙미때와는 달리 특별한 설명 파일은 없고 애초에 HTML과 플래시 파일로 튜토리얼이 제공되기 때문에 직접 따라하면서 공부할 수 있다. 여기서는 해당 도서를 따라하면서 했기 때문에 튜토리얼 내용과 차이가 좀 있을 수 있다. 먼저 이번 리버스미(ReverseMe)에서는 Nag라는, 프로그램 실행 전후로 나타나는 특정 창을 띄우지 않도록 리버스 엔지니어링하는것을 목표로 하고 있다. 프로그램을 별다른 조작 없이 곧바로 실행시킨다면 아래와 같은 Nag 창이 몇초간 나타난다. 이후 메인.. 더보기 Study 02 - 기초 지식(Register, Call Stack, Prologue/Epilogue) Register 프로그램 내부의 명령어를 실행하는 것은 CPU의 제어장치와 레지스터로 이들이 프로그램을 실행하는 데 필요한 데이터는 레지스터에 있어야 한다. 그렇기 때문에 메모리의 데이터를 레지스터로 복사하는 과정이 필요하며 여러 프로그램이 하나의 CPU를 사용하려면 각 프로그램마다 사용하는 데이터가 다르기 때문에 레지스터의 내용을 바꿀 필요가 있다. 이 과정을 컨텍스트 스위칭(Context Switching)이라 하며 운영체제 수업에서 배웠듯이 빈도가 높을수록 성능 하락의 원인이 된다. 인텔 CPU의 레지스터 구조는 다음과 같다. 64-bit register Lower 32 bits Lower 16 bits Lower 8 bits rax eax ax al rbx ebx bx bl rcx ecx cx c.. 더보기 Study 01 - 기초 지식(PE) PE, Portable Executable Windows 운영체제에서 실행파일(exe)은 PE, Portable Executable 파일이라고 한다. 이런 PE 파일에는 PE 헤더에 이 프로그램을 실행하는 데 필요한 기본 정보와 파일의 데이터를 메모리 어디에 배치시킬 지 알려주는 파일 구성 정보가 담겨있다. PE 바디에는 프로그램이 사용할 코드, 데이터 등이 포함되어 있다. 이런 PE 형식 실행파일(exe, dll 등)을 실행시키면 운영체제의 로더(Loader)에서 이 PE 헤더의 정보를 분석, PE 바디의 코드와 데이터를 메모리의 코드 영역, 데이터 영역, 스택 영역, 힙 영역에 특성에 맞게 배치한다. 당연하지만 PE 파일은 PE 포맷에 맞게 만들어야 하며 이는 윈도우 기반 프로그램들이 지켜야 할 일종.. 더보기 이전 1 다음