8월, 2019의 게시물 표시

EAT(Export Address Table)

이미지
EAT(Export Address Table)에 대해서 알아보겠습니다. ​ EAT(Export Address Table)는 PE 파일의 함수를 외부에서 호출할 수 있도록 만든 테이블입니다. EAT의 주소는 DataDirectory[0] IMAGE_DIRECTORY_ENTRY_EXPORT VA에 저장되어 있습니다. ​ EAT 구조는 winnt.h에 _IMAGE_EXPORT_DIRECTORY에 정의되어 있습니다. 여기서 중요한 것은 'DWORD Name', 'DWORD Base', 'DWORD NumberOfFunctions', 'DWORD NumberOfNames', 'DWORD AddressOfFunctions', 'DWORD AddressOfNames', 'DWORD AddressOfNameOrdinals'입니다. ​ ​ Name 값은 dll 이름이 저장된 주소가 저장되어 있습니다.(File Offset 계산 필요 - dll 이름을 변경하여도 원래 이름을 확인 가능) Base 값은 함수 Ordinal의 시작 번호입니다. NumberOfFunctions 값은 모든 Export 함수의 개수입니다. NumberOfNames 값은 이름으로 Export 되는 함수의 개수입니다. Ordinal로 Export 되는 함수는 포함되지 않습니다.(NumberOfFunctions 값보다 작거나 같습니다) AddressOfFunctions 값은 모든 Export 함수의 실제 주소 배열의 시작 주소입니다. AddressOfNames 값은 Export 함수의 이름이 저장되어 있는 배열의 시작 주소입니다. AddressOfNameOrdinals 값은 이름으로 Export 되는 함수의 Ordinal 배열의 시작 주소입니다. ​ ​ 제가 만든 PE Viewer로 예를 들겠습니다. User32.dll을 분석해보았습니다. Name 값입니다. 0x9a7de USER3

Python reversed()

이미지
사용 버전: Python 3.6.8 사용 프로그램: Atom 1.40.0 x64 ​ 파이썬 reversed()에 대해서 알아보겠습니다. 괄호 안에는 리스트, 튜플, 레인지가 들어갑니다. ​ reversed()는 리스트나 튜플, 레인지의 순서를 거꾸로 변경해줍니다. 끝. 카테고리: Standard Library, Python

Python list.reverse()

이미지
사용 버전: Python 3.6.8 사용 프로그램: Atom 1.39.1 x64 ​ 파이썬 list.reverse()에 대해서 알아보겠습니다. 괄호 안에는 아무것도 들어가지 않습니다. ​ list.reverse()는 List 항목의 순서를 거꾸로 만들어줍니다. 여기서 중요한 점은 두 가지가 있습니다. 첫째, 원본 데이터 자체가 변환한다는 것입니다. 둘째, 따라서 반환값이 없습니다. 끝. 카테고리: Standard Library, Python

PE Header(NT Header)

이미지
PE Header(NT Header)에 대해서 알아보겠습니다. ​ PE Header(NT Header)는 winnt.h에 _IMAGE_NT_HEADERS로 정의되어 있습니다. Signature 값은 PE00입니다. FileHeader는 winnt.h에 _IMAGE_FILE_HEADER로 정의되어 있습니다. OptionalHeader는 winnt.h에 _IMAGE_OPTIONAL_HEADER로 정의되어 있습니다. ​ FileHeader를 보겠습니다. 여기서 중요한 것은 'WORD Machine'과 'WORD NumberOfSections', 'WORD SizeOfOptionalHeader', 'WORD Characteristics'입니다. ​ Machine 값은 CPU를 나타냅니다. NumberOfSections 값은 전체 Section의 개수를 나타냅니다. SizeOfOptionalHeader 값은 OptionalHedaer의 크기를 나타냅니다. Characteristics 값은 파일 속성을 나타냅니다. ​ ​ Machine은 winnt.h에 정의되어 있습니다. SizeOfOptionalHeader 값이 'E0'면 32 bit, 'F0'면 64 bit입니다. Characteristics 값은 winnt.h에 정의되어 있습니다. Bit OR 형식으로 예를 들어, 0x8002면 0x8000과 0x0002가 선택된 상태입니다. ​ ​ OptionalHeader를 보겠습니다. winnt.h에 _IMAGE_OPTIONAL_HEDAER로 정의되어 있습니다.(64 비트는 _IMAGE_OPTIONAL_HEADER64를 보셔야 합니다.) 여기서 중요한 것은 'WORD Magic', 'DWORD SizeOfCode', 'DWORD SizeOfInitializedData', 'DWORD

DOS Header

이미지
DOS Header에 대해서 알아보겠습니다. ​ DOS Header는 winnt.h에 _IMAGE_DOS_HEADER로 정의되어 있습니다. PE 파일 구조에서 처음 64 바이트를 차지합니다. ​ 여기서 중요한 부분은 WORD e_magic 부분과 LONG e_lfanew 부분입니다. e_magic의 값은 'MZ'이고, e_lfanew의 값은 PE header(NT header)의 시작 주소를 나타냅니다. ​ 끝. 카테고리: Reversing

Signature filed

PE header의 Signature field 값에 따른 파일 형식을 알아보겠습니다. ​ PE: Win32 executable file format. NE: 16-bit Windows New Executable file. LE: Windows 3.x virtual device driver(VxD). LX: OS/2 2.0. 끝. 카테고리: Reversing