목록Security/02 Reversing (6)
tmxklab
1. EAT(Export Address Table) EAT(Export Address Table)는 라이브러리 파일에서 제공하는 함수를 다른 프로그램에서 가져다 사용할 수 있도록 해주는 핵심 메커니즘이다. 즉, EAT를 통해서만 해당 라이브러리에서 익스포트하는 함수의 시작 주소를 정확히 구할 수 있다. IAT와 마찬가지로 PE 파일 내의 IMAGE_EXPORT_DIRECTORY에 익스포트 정보를 저장하고 있다. IAT와는 달리 PE파일에 IMAGE_EXPORT_DIRECTORY 구조체는 하나만 존재한다. [ PE파일에서 IMAGE_EXPORT_DIRECTORY 구조체의 위치 ] IMAGE_OPTIONAL_HEADER32.DataDirectory[0].VirtualAddress 값이 실제 IMAGE_EXP..
IAT(Import Address Table)의 설명에 앞서 먼저 DLL에 간략히 알아보자. 0. DLL(Dynamic Link Library) 1) DLL DLL은 실행 파일에서 해당 라이브러리의 기능을 사용 시에만 참조하여 호출하는 방식의 라이브러리를 뜻한다. Static Link Library와 다르게 컴파일 시점에 실행 파일에 함수를 복사하지 않고 함수의 위치 정보만 가지고 해당 함수를 호출할 수 있게 도와준다. 즉, 프로그램에 라이브러리를 포함시키지 않고 별도의 파일(DLL)로 구성하여 필요한 함수만 불러쓴다. 이러한 방식의 장점으로는 여러 프로그램에서 동시에 사용할 수 있으며, 라이브러리가 업데이트되었을 때 해당 DLL 파일만 교체하면되므로 쉽고 편하다. 다만 실행 파일이 DLL에 있는 특정 ..
PE파일이 메모리에 로딩되었을 때 각 섹션에서 메모리의 주소(RVA)와 파일 옵셋을 잘 매핑해야 하는데 이러한 매핑을 'RVA to RAW'라고 부른다. 먼저 섹션 헤더의 구조체인 IMAGE_SECTION_HEADER에서 주요 멤버를 살펴보자 VirutalSize : 메모리에서 섹션이 차지하는 크기 VirutalAddress : 메모리에서 섹션의 시작 주소(RVA) SizeOfRawData : 파일에서 섹션이 차지하는 크기 PointerToRawData : 파일에서 섹션의 시작 위치 [ Process ] 1) RVA가 속해 있는 섹션을 찾는다. 2) 간단한 비례식을 사용해서 파일 옵셋(RAW)을 계산 [ 비례식 ] RAW - PointerToRawData = RVA - VirtualAddress RAW ..
DLL 정리악성코드는 일반적으로 윈도우 API(Application Programming Interface)함수를 사용해 파일 시스템, 프로세스, 메모리, 네트워크 작업 수행을 위해 OS와 상호작용한다.상호작용을 위해 필요한 기능 대부분을 동적 DLL(Dynamic Link Library)파일로 Export한다.실행 파일은 다른 기능을 제공하는 다양한 DLL에서 이들 API 함수를 임포트한 후 호출한다.따라서, 악성코드가 의존하고 있는 DLL과 임포트하고 있는 API함수를 조사하면 악성코드의 기능을 분석할 수 있다. 1) Kernel32.dll부팅시 로드되어 모든 프로그램에 사용되고 커널이 애플리케이션에게 제공할 수 있는 서비스 함수 형태로 존재프로세스, 메모리, 하드웨어, 파일 시스템 작업과 관련된 함..
1. ARM(Advanced RISC Machine) 임베디드 기기에 주로 사용되는 RISC 프로세서 모바일 기기 또는 IoT 디바이스에도 사용됨 저전력을 사용하도록 설계됨 1) Register r0 ~ r15까지 총 16개의 범용 레지스터를 가지고 있으며 다음 3가지의 레지스터는 특수 용도로 사용된다. r13(SP, Stack Pointer) : 스택의 주소를 저장하는 레지스터, ESP와 비슷한 역할, 현재 Stack을 어디까지 쌓아 두었는지 가리킴 r14(LR, Link Register) : 함수 호출시 되돌아갈 함수의 주소가 저장되는 레지스터, 함수 호출 전 LR에 리턴 주소 저장하고 branch(jump) r15(PC, Program Conuter) : 현재 어디를 수행하고 있는지 가리키는 레지스..
1. 어셈블리어란? 기계어와 일대일 대응되는 컴퓨터 프로그래밍 저급언어 기계어는 CPU가 직접 해독하고 실행할 수 있는 비트 단위로 쓰여 사람이 이해하기에는 어렵기에 어셈블리어를 통해 기계어를 사람이 쉽게 이해할 수 있도록 표현을 바꿔놓은 것 이다. ex) 기계어 어셈블리어 55 PUSH EBP 8B EC MOV EBP, ESP 2. 어셈블리어 문법 1) Windows(Intel 문법) - 오퍼렌드 위치 : mov dest, src - 메모리 오퍼랜드 : mov eax, [ebx] 2) Linux(AT&T 문법) - 오퍼랜드 위치 : mov src, dest - 메모리 오퍼랜드 : mov (%ebx), %eax 3. 어셈블리어 명령어 종류 1) 데이터 타입 * 부호 없는 정수 BYTE 1byte WORD..