목록Windows (15)
둘둘리둘둘리둘둘리둘둘리둘둘리둘
nt!_TEB+0x000 NtTib : _NT_TIB+0x01c EnvironmentPointer : Ptr32 Void+0x020 ClientId : _CLIENT_ID+0x028 ActiveRpcHandle : Ptr32 Void+0x02c ThreadLocalStoragePointer : Ptr32 Void+0x030 ProcessEnvironmentBlock : Ptr32 _PEB+0x034 LastErrorValue : Uint4B+0x038 CountOfOwnedCriticalSections : Uint4B+0x03c CsrClientThread : Ptr32 Void+0x040 Win32ThreadInfo : Ptr32 Void+0x044 User32Reserved : [26] Uint4B+..
@디버깅 이벤트(Debugging Events) Event Code Event Code Value Union u Value 0x01 EXCEPTION_DEBUG_EVENT u.Exception 0x02 CREATE_THREAD_DEBUG_EVENT u.CreateThread 0x03 CREATE_PROCESS_DEBUG_EVENT u.CreateProcessInfo 0x04 EXIT_THREAD_DEBUG_EVENT u.ExitThread 0x05 EXIT_PROCESS_DEBUG_EVENT u.ExitProcess 0x06 LOAD_DLL_DEBUG_EVENT u.LoadDll 0x07 UNLOAD_DLL_DEBUG_EVENT u.UnloadDll 0x08 OUTPUT_DEBUG_STRING_EVENT..
@메모리 브레이크 포인트(Memory Breakpoints) 메모리 브레이크 포인트는 실제로 전혀 브레이크포인트가 아니다. 메모리 브레이크 포인트를 설정할때 디버거는 메모리의 영역(또는 page)의 권한을 변경한다. 메모리 페이지(Memory page)는 OS에서 처리하는 메모리의 가장 작은 단위이다. 메모리 페이지가 할당되면 할당된 메모리 페이지는 특정 접근권한이 세트된다. 메모리 페이지 권한(Memory page permissions) - Page execution실행가능권한, 만약 프로세스가 페이지에 읽거나 쓰려고하면 Access violation을 발생시킨다. - Page read프로세스가 페이지에서 읽어오기만 가능하게한다. 읽거나 실행시키려하면 Access violation. - Page wri..
@하드웨어 브레이크 포인트(Hardware Breakpoints) Debuggee 프로세스를 수정할 수 없을경우(Software breakpoints를 사용할수 없을경우) instruction의 수정 없이 사용할 수 있는 하드웨어 브레이크 포인트가 유용하다. 하드웨어 브레이크 포인트는 debug registers 라는 특수한 레지스터에 CPU레벨에서 셋트되며, 하드웨어 브레이크 포인트를 셋트하고 관리하는 debug registers는 DR0에서 DR7까지가 있다. DR0~DR3 : 브레이크 포인트 주소를 위해 예약됨DR4, DR5 : ReservedDR6 : Status register, 하드웨어 브레이크 포인트에의해 디버깅 이벤트 발생시 셋팅됨DR7 : 다른 브레이크 포인트의 상태를 저장 (하드웨어 브..
FS:[18] *TEB TEB +0x30 *PEB(FS:[30]) PEB +0x18 *ProcessHeap +0x90 *ProcessHeaps HEAP +0x58 *Heap Segments HEAP_SEGMENT +0x20 *Heap Block HEAP_BLOCK Pre Allocate MetaData +0x08 User Data //실제 데이터쓰이는곳(가변 크기) Post Allocate MetaData Pre Allocate Metadata2bytesCurrent Block Size (여따 8을 곱한게 실제 사이즈)2bytesPrevious Block Size (마찬가지 곱하기8)1byte SegmentIndex1byte Flags1byte Unused1byte SegmentIndex Heap Fla..
FS:[18] *TEB TEB +0x30 *PEB (FS:[30]) PEB +0x0C *LDR LDR +0x14 *InMemoryOrderModuleList +0x1c*InInitializationOrderModuleList InMemoryOrderModuleList NextEntryLink +0x10 ImageBaseAddress +0x28 *BaseDllName InInitializationOrderModuleList NextEntryLink +0x08ImageBaseAddress +0x20 *BaseDllNameIMAGE_DOS_HEADER +0x3C Offset to IMAGE_NT_HEADERS IMAGE_NT_HEADERS +0x78 Export Table RVA IMAGE_EXPORT_DIR..
@IMAGE_THUNK DATAtypedef struct _IMAGE_THUNK_DATA32 { union { DWORD ForwarderString; // PBYTE DWORD Function; // 함수주소 DWORD Ordinal; DWORD AddressOfData; // PIMAGE_IMPORT_BY_NAME } u1;} IMAGE_THUNK_DATA32;typedef IMAGE_THUNK_DATA32 * PIMAGE_THUNK_DATA32;typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA; @IMAGE_IMPORT_DESCRIPTORtypedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; ..
@IMAGE_SECTION_HEADER 시작주소 IMAGE_OPTIONAL_HEADER시작 offset + Size of Optional Header @DLL 로딩방식 Explicit Linking- Application에서 사용되는 순간 로딩, 사용끝나면 해제 Implicit Linking- Application시작시 로딩, 종료시 해제 @IMPORT Directory Table IMAGE_IMPORT_DESCRIPTOR (IMPORT Directory Table)- Import Name Table RVA : 함수 이름 주소(RVA)- Name RVA : Library 이름 문자열의 주소(RVA)- Import Address Table RVA : 실제 함수 주소(RVA), INT가 정확하다면 필요없음(..
(VA)Virtual Address- 절대주소- 00000000~FFFFFFFF (4GB) (RVA)Relative Virtual Address- 상대주소(offset ?) VA = RVA + Image Base RVA 사용 이유- Relocation 염두 @PE Header 구조IMAGE_DOS_HEADER (DOS EXE Header 확장판)- DOS파일 하위 호환을 위해- e_magic(Signature) : 4D 5A(MZ)- e_lfanew(Offset to New EXE Header) : NT Header의 옵셋 MS-DOS Stub Program- 옵션임(없어도됨)- DOS환경에서 실행시 "This program cannot be run in DOS mode"출력하고 종료하는 어셈블리어 가짐..
cdecl - C에서 default로 사용- Caller가 스택 정리(ex: ADD ESP,8)- 가변 갯수의 Parameter전달 가능 stdcall- Win32API에서 사용 -> 호환성을 위해- Callee가 스택 정리(ex: RETN 8)- 코드 크기 줄어듬 fastcall- stdcall과 동일하나 parameter 전달시 ECX,EDX 레지스터를 이용- parameter가 2개이상일경우 스택이용- 메모리(스택)이 아닌 레지스터(CPU)를 이용하여 빠른속도- ECX, EDX 레지스터 필요시 백업 -> 코드 크기 늘어남