본문 바로가기

리버싱

(17)
실행 압축 데이터 압축 비손실 압축과 손실 압축이 있다 비손실 압축 파일(데이터) 크기를 줄여서 보관 및 이동에 용이하도록 하려는 목적으로 사용된다. 파일을 사용하 때는 해당 압축을 해제해서 사용(이 과정에서 데이터의 무결성이 보장되어야 함) 대표적인 비손실 압축 알고리즘은 Run-Length, Lempel-Ziv, Huffman 등이 있다 손실 압축 파일(데이터)에 의도적인 손상을 주어 압축률을 높이는 목적으로 사용된다. 주로 멀티미디어 파일들(jpg, mp3, mp4)은 대부분 손실 압축기법을 사용한다 실행 압축 - 실행 파일을 대상으로 파일 내부에 압축해제 코드를 포함하고 있어서 실행되는 순간에 메모리에서 압축을 해제시킨 후 실행시키는 기술이다 - 실행 압축된 파일 역시 PE 파일이며 내부에 원본 PE 파일과..
PE File Format(EAT) EAT - 라이브러리 파일에서 제공하는 함수를 다른 프로그램에서 가져다 사용할 수 있도록 해주는 매커니즘 즉, EAT를 통해서만 해당 라이브러리에서 익스포트하는 함수의 시작 주소를 정확히 구할 수 있다 - PE파일 내의 IMAGE_EXPORT_DIRECTORY 구조체에 익스포트 정보를 저장하고 있는데 이 구조체는 PE파일에 하나만 존재한다 - IMAGE_EXPORT_DIRECTORY 구조체는 PE 헤더에서 찾을 수 있는데, IMAGE_OPTIONAL_HEADER32.DataDirectory[0].Virtual Address 값이 실제 IMAGE_EXPORT_DIRECTORY 구조체 배열의 시작 주소이다 IMAGE_EXPORT_DIRECTORY IMAGE_EXPORT_DIRECTORY 구조체이다 typed..
PE File Format(IAT) IAT(Import Address Table) 프로그램이 어떤 라이브러리에서 어떤 함수를 사용하고 있는지를 기술한 테이블 DLL(Dynamic Linked Library) - 프로그램에 라이브러리를 포함시키지 말고 별도의 파일(DLL)로 구성해 필요할 때마다 불러 씀 - 한 번 로딩된 DLL의 코드, 리소스는 Memory Mapping 기술로 여러 Process에서 공유해 사용 - 라이브러리가 업데이트 되었을 때 해당 DLL 파일만 교체하면 되니 편하다 RVA to RAW PE 파일이 메모리에 로딩되었을 때 각 섹션에서 메모리의 주소(RVA)와 파일 옵셋을 매핑해야한다 방법 1. RVA가 속해 있는 섹션을 찾는다 2. 간단한 비례식을 사용해 파일 옵셋(RAW)를 계산한다 RAW = RVA - Virtua..
Basic level 3
Basic level 2
PE File Format(Dos Header ~ Optional Header) PE File Format 이란? PE(Portable Executable) 파일은 Windows 운영체제에서 사용되는 실행파일 형식 PE 파일 종류 - 실행 계열 : EXE, SCR - 드라이버 계열 : SYS, VXD - 라이브러리 계열 : DLL, OCX, CPL, DRV - 오브젝트 파일 계열 : OBJ * 참고 OBJ 파일 자체로는 어떠한 형태의 실행도 불가능하므로 리버싱 에서는 크게 관심X PE 파일 기본 구조 PE Header : DOS Header ~ Section Header PE Body : PE Header 이후의 Section들 파일에서는 offset으로, 메모리에서는 VA(Virtual Address, 절대주소)로 위치를 표현 파일의 내용은 보통 코드(.txt), 데이터(.data..
Process Explorer, 함수 호출 규약 Process Explorer - 프로세스 익스플로러는 시스템의 현재 상태를 가장 간단하면서 명확하게 체크할 수 있는 도구 - 장점 Parent/Child 프로세스 트리 구조 프로세스 실행/종료 시 각각의 색깔(초록/빨강)로 표시 프로세스 Suspend/Resume 기능(실행 중지/재개) 프로세스 종료(kill) 기능(Kill Process Tree 기능 지원) DLL/Handle 검색(프로세스에 로딩된 DLL 또는 프로세스에서 점유하는 Handle 검색) 함수 호출 규약 함수 호출 후에 ESP(스택 포인터)를 어떻게 정리하는지에 대한 약속 용어설명 Caller(호출자) - 함수를 호출한 쪽 Callee(피호출자) - 호출을 당하는 함수 cdecl - 주로 C언어에서 사용되는 방식이며, Caller에서 ..
3, 4장 요약(바이트 오더링, IA-32 Register) 바이트 오더링 데이터를 저장하는 방식을 말하는 것으로 빅 엔디언과 리틀 엔디언 방식이 있다 빅 엔디언 & 리틀 엔디언 1) 빅 엔디언 사람이 보는 방식과 동일하게 앞에서부터 순차적으로 저장 대형 UNIX 서버에 사용되는 RISC 계열의 CPU, 네트워크 프로토콜에서 많이 사용 애플리케이션 개발에 사용된 데이터를 네트워크로 송수신할 때 엔디언 타입을 변경해야 한다 2) 리틀 엔디언 데이터를 역순으로 저장 Intel x86 CPU에서 리틀 엔디언 방식을 사용 산술 연산과 데이터의 타입이 확장/축소될 때 효율적 CPU 레지스터 레지스터란 CPU 내부에 존재하는 다목적 저장 공간 Basic program execution registers General Purpose Registers (32비트 - 8개) Se..