목록리버싱 (25)
알쓸전컴(알아두면 쓸모있는 전자 컴퓨터)
EAT (Export Address Table) Windows 운영체제에서 라이브러리(Library) 란 다른 프로그램에서 불러 쓸 수 있도록 관련 함수들을 모아놓은 파일(DLL/SYS)입니다. Win32 API 가 대표적인 Library 이며, 그 중에서도 kernel32.dll 파일이 가장 대표적인 Library 파일이라고 할 수 있습니다. EAT(Export Address Table) 은 라이브러리 파일에서 제공하는 함수를 다른 프로그램에서 가져다 사용할 수 있도록 해주는 매커니즘 입니다. 앞서 설명드린 IAT 와 마찬가지로 PE 파일내에 특정 구조체(IMAGE_EXPORT_DIRECTORY)에 정보를 저장하고 있습니다. 라이브러리의 EAT 를 설명하는 IMAGE_EXPORT_DIRECTORY 구조..
IAT DLL (Dynamic Linked Library) IAT 를 설명하기 앞서 Windows OS 의 근간을 이루는 DLL(Dynamic Linked Library) 개념을 짚고 넘어가야 합니다. (뭐든지 이유를 알면 이해하기 쉬운 법이지요...) DLL 을 우리말로 '동적 연결 라이브러리' 라고 하는데요, 그 이유를 알아 보겠습니다. 16 bit DOS 시절에는 DLL 개념이 없었습니다. 그냥 'Library' 만 존재하였습니다. 예를 들면 C 언어에서 printf() 함수를 사용할 때 컴파일러는 C 라이브러리에서 해당 함수의 binary 코드를 그대로 가져와서 프로그램에 삽입(포함)시켜 버렸습니다. 즉, 실행 파일내에 printf() 함수의 바이너리 코드를 가지고 있는 것입니다. Windows ..
IAT 설명을 시작 전에 필요한 사전 지식 이 있습니다. http://idlecomputer.tistory.com/177 포스팅에 보면 RAW,RAV 대한 설명이 있습니다. 이번에는 실제로 변환 하는 예제를 두고 변환 해 보겠습니다. 먼저 저는 예제로 간단히 만든 excel 로 계산을 해보겠습니다. RAV 는 메모리에 쌓이는 offset 값이고 RAW 메모리에 로딩 되기 전에 파일에 offset 입니다. 파일에는 RAV 값이 주로 적혀 있기 때문에 메모리에 로딩된 값이 파일에 어디 있는지 찾기 위해서 이번과 같은 RAW , RAV 변환 지식 이 필요합니다. 일단 SECTION HEADER 의 정보가 필요 합니다. 그리고 우리는 같은 SECTION 의 코드 중 RVA값이 들어 있는 중 1개가 메모리에 로딩..
windows 10 에서 PE 헤더 Image Base 와 ollydebug windwos 10에서 올리 디버거를 사용하여 프로그램을 디버깅 할때 PE 헤더에 라고 하지만 올리 디버거 표현시 310000 을 Base Image 로 잡고 거기에 text 세션 RVA (1000)를 더한 311000 을 을 코드로 잡으므로 310000 올리 디버거에서 = 400000 으로 인식 하는데 현재 이유는 모르지만 모든게 매칭 됩니다. 추후 리버싱할때 exe 파일의 Base Image 를 310000 으로 하고 계산 하여야 됩니다. 추가 해당 내용와 관련된 내용 http://reverserslab.tistory.com/17
PE 헤더 분석 (2) MS-DOS Stub Program 쪽 헤더는 별 의미가 없으니 넘어가겠습니다. IMAGE_NT_HEADER 의 구조체 부터 보겠습니다. typedef struct _IMAGE_NT_HEADERS { DWORD Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER32 OptionalHeader;} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32; Sigmature 는 PE Header 의 시작을 알려 줍니다. 0x00000450 이죠 . 그 다음에 typedef struct _IMAGE_FILE_HEADER { WORD Machine; WORD NumberOfSections; DWORD TimeDa..
PE 헤더 분석 (1) PE (Portable Excutable) 포맷은 윈도우에서 사용되는 실행 가능한파일 형식을 말합니다. 하나의 실행파일을 다양한 운영체제에서 실행할 수 있다는 의미로 ‘이식 가능한 실행파일(PE)’라는 이름이 붙었습니다. 일반적으로 잘 알려진 exe, dll, obj,sys 등의 확장자를 가진 파일들이 여기에 해당되구요. 유닉스의 실행파일 형식인 COFF(CommonObject File Format)을 기반으로 만들어졌습니다. PE를 구성하는 요소들은 각각 구조체의 형태를 가지고 있습니다. 이런 요소들은 크게묶어 두 부분으로 볼 수 있습니다. 하나는 헤더, 하나는 섹션입니다. PE 구조에서 헤더에는 파일을 실행할 때 맨 처음 시작해야 할 코드의 시작부분에 대한 정보, 프로그램이 구..
Lena Reversing for newbies(기초)(2) Regcode 찾기 입니다. 하면 위와 같이 나옵니다. 그렇다면 해당 키코드를 찾기 위해서 일단 근방의 코드로 가는것이 중요 할듯 합니다. 오른쪽 버튼눌러 >> search for >> ALL referenced text String 을 해서 해당 문구의 코드로 가보겠습니다. 코드 위로 가보면 JE 로 분기 구분이 있습니다. 그리고 분기구문 위에 분기 구문을 위해 vbaStrCmp 함수가 있습니다. I'mlena151 이라는 문구와 비교 하는것이고 그결과로 JE 구문을 하는것이네요 그러면 결국 Regcode 는 I'mlena151 이네요 . 구조와 원리를 알면 간단히 풀수 있는 문제 였네요 .
Lena Reversing for newbies(기초) 이번 강좌는 Lena 라는 사람이 초보유저를 위해서 올려 놓은 크랙 파일입니다. 1단계 목표는 위의 메세지를 없애는 것입니다. 그럼 ollydbg 로 실행 해 보겠습니다. 일단 F9를 눌러 start 코드 까지 가보겠습니다. 일단 이파일은 F9로 전진 하다 보면 00401162 $- FF25 64514000 JMP [] ; MSVBVM50.ThunRTMain 을 보니 visual studio 로 작성된것임을 알수 있습니다. 그럼 여기서 우리는 메세지 박스를 없애기 때문에 코드 에서 msgbox 을 사용 했을것으로 유추 하고 ollydebug 에서 오른쪽 버튼을 눌러 Search for - All intermodular calls 명령을 사용 하겠습니..
cdecl,stdcall,fastcall 함수 호출 규약 해당 규약들은 c언어,C++ 기타 등등이 컴파일 이후에 cpu가 알수 있는 asm 언어로 변환을 합니다. 이러한 변환 과정에서 함수를 부르는 쪽에서 stack을 정리 할지 함수에서 stack을 정리 할지에 대한 규약 입니다. 이전에 리버싱강의 에서 함수 들에서 인자값 들을 stack 을 통해서 받았던것을 알수 있습니다. 그 이후 함수가 return 할때 자신을 호출 했던 함수 쪽으로 stack을 원복 해줘야 합니다. 예를 들면 main() 함수 안에서 add() 함수를 호출 했을때 Caller(호출자) -- mainCallee(피호출자) -- add 라고 정의 됩니다. cdecl 은 caller(호출자) 에서 stack을 정리하는것을 말하는 규약 ..
abex crack me2 리버싱 분석 일단 abex creak me2 리버싱 분석에 중요한 것은 크랙 파일은 만드는것이 아닙니다. 어쩌면 jmp 문으로 또는 memory에 있는 unicode 를 보고 정답을 맞출수도 있습니다. 하지만 기본을 배우는 것이기 때문에 어떻게 돌아가는지에 대해서 탐구해 보겠습니다. ▲ 제가 사용한 파일입니다. 일단 crackme2 는 visual basic 으로 만들어진 파일입니다. 일종의 인터프리터 언어로 만들어진 프로그램이죠. 언어 이후에 가상엔진이 있는 구조 입니다. 예를 들면 파이썬이나,java 등이 있습니다. 또한 event driven 방식으로 이벤트 코드에 사용자 코드가 들어가는 구조입니다. debug 시 처음 화면입니다. F9 로 전진해 보겠습니다. 전진하다 보..