본문 바로가기

PE7

[1-13] PE파일 분석 2022. 9. 13.
[1-9] PE 파일 분석(API&DLL) 분석 파일 : user32.dll, lock_1.exe, lock_2.exe, lock_3_import.ext, lock_3_export.dll 분석 도구 : VS2008, PEview, CFF Explorer, Dependency Walker 1. API Application Programming Interface 운영체제, 프로그램 언어가 응용 프로그램에서 사용할 수 있도록 기능을 제공하는 인터페이스(함수) MSDN 문서 참조 2. 컴파일 모든 헤더와 소스 파일 내용을 합쳐서 하나의 기계어 코드를 생성하는 기능을 수행한다. 소스 코드에 오류가 있는지를 검사한다. 3. DLL Dynamic Linked Library 여러 프로그램에서 동시에 사용할 수 있는 코드, 데이터, 함수를 포함한 라이브러리이다... 2022. 9. 13.
[1-8] PE 파일 분석(IAT&Pre Binding) 1. IAT(Import Address Table) 'GetStartupInfoA' 함수 호출 주소값 찾기 DLL 파일이 메모리 상에 로드되는 주소값을 갖고 있는 테이블이며, 암시적 링킹에서 사용한다. 'calc(ASLR X).exe'를 올리디버거로 오픈하여 코드창에서 '0x01012D89' 주소로 이동하여 'GetStartupInfoA' 함수 주소(0x0100114C)를 확인한다. 메모리창에서 '0x0100114C'로 이동하여 저장된 주소값을 확인한다. 10 1E 46 76 -> 0x76461E10 'KERNEL32.dll'의 'GetStartupInforA' 함수를 호출할때, 직접 호출하지 않고 PE 로더가 프로그램 실행시 '0x0100114C' 주소에 저장된 함수 주소 값(0x76461E10)을 갖.. 2022. 9. 13.
[1-7] PE 파일 분석(PE 재배치) 1. PE 재배치 실행 파일이 로드될때 ImageBase에 다른 실행 파일이 로드되어 있다면, 중첩되는 문제가 발생된다. 이런 문제를 해결하기 위해서 로더는 ASLR 기능에 의해서 다른 주소를 찾아서 해당 주소로 실행 파일을 로드한다. 이때, 로드되는 주소가 변경되면 절대 주소 값을 변경된 주소로 수정되어야 한다. 이렇게 변경된 주소 정보를 '.reloc' 섹션에 저장하여 다른 실행 프로그램과 중첩되지 않도록 동작한다. 즉, PE 재배치는 프로그램에 하드코딩된 메모리 주소를 현재 로딩된 주소에 맞게 수정해주는 기능을 의미한다. DLL 파일이 로드될때 이미 그 주소에 다른 DLL이 로드된 경우, PE 재배치를 통해서 다른 주소에 로드된다. 2. PE 재배치 위치 확인 PE 재배치 위치를 확인하려면, 다음과.. 2022. 9. 13.
[1-6] PE 파일 분석(PE 바디-섹션) 1. '.text' 섹션 코드 영역 컴파일러/어셈블리가 최종적으로 생성하는 명령 코드, 실행 명령어들이 포함되어 있다. ──────── 0x01001000 .text 섹션 -------------------- 0x01053CA1 패딩 : 0x035F ──────── 0x01053FFF 2. '.data' 섹션 전역 변수, 정적 변수의 할당을 위한 영역이며, 읽기/쓰기 가능한 데이터가 포함되어 있다. ──────── 0x01054000 .data 섹션 -------------------- 0x010580C0 패딩 : 0x0F40 ──────── 0x01058FFF 3. '.rsrc' 섹션 프로그램이 사용하는 리소스(아이콘, 이미지, 추가 바이너리) 정보들이 포함되어 있다. ──────── 0x0105900.. 2022. 9. 13.
[1-4] PE 파일 분석(RVA to VA) VA = Imagebase + RVA RVA = VA - Imagebase 1. ImageBase PE 파일이 메모리에 로드되는 시작 주소 DLL/EXE 파일 -> User 메모리 영역인 '0x00000000 ~ 0x7FFFFFFF'에 로드 SYS 파일 -> 커널 메모리 영역인 '0x80000000 ~ 0xFFFFFFFF'에 로드 DLL 파일/윈도우 제공 EXE 파일 : 0x01000000 그 외 EXE 파일 : 0x00400000 2. VA 주소를 구하기 위한 요소 VA 메모리 상에 프로세스 절대 주소 Virtual Size 메모리에서 차지하는 섹션의 크기(패딩/Null 포함) RVA 메모리에서 찾고자 하는 어떤 데이터의 주소 Size of Raw Data 파일에서 섹션의 크기(패딩/Null 포함) P.. 2022. 9. 13.
[1-3] PE 파일 분석(섹션 헤더) 1. IMAGE_SECTION_HEADER 섹션 헤더는 각 섹션의 속성 정보들을 갖고 있는 구조체이다. 섹션이란 프로그램의 실제 내용(어셈블리 코드, 전역 변수, 정적 변수)을 담고 있는 영역을 의미한다. .text 프로그램 코드를 담고 있는 섹션, IAT 정보를 갖고 있음 .data 전역 변수, 정적 변수의 할당을 위한 섹션, 읽기/쓰기 가능한 데이터를 갖고 있음 .rdata 읽기 전용 섹션, 문자열, 상수 정보를 갖고 있음 .bss 초기화되지 않은 변수를 갖고 있는 섹션 .rsrc 아이콘, 커서, 추가 바이너리 등의 리소스 관련 정보를 갖고 있는 섹션 .idata Import 할 DLL/API 정보를 갖고 있는 섹션 .edata Export 할 DLL/API 정보를 갖고 있는 섹션 .reloc 재배치.. 2022. 9. 13.