전체 글 299

SetWindowsHookEx()을 이용한 Windows 메시지 후킹 - (2)

챕터 마지막의 질문글을 보고 SetWindowsHookEx()를 KeyHook.dll이 아니라 HookMain.exe에서 호출해보면 어떨까 싶어서 짜보았다. [계획] SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, g_hInstance, 0); 를 dll이 아닌 HookMain.exe에서 호출하여 훅 체인에 새로운 훅 프로시져를 등록하기 1) SetWindowsHookEx() 함수와 WH_KEYBOARD 상수는 "windows.h" 헤더에 정의되어있음. => OK 2) dll에 정의된 KeyboardProc 함수 포인터(HOOKPROC 타입)를 받아와야 함 => export 함수 GetHookProc() 정의 __declspec(dllexport) HOOKPROC GetHo..

SetWindowsHookEx()을 이용한 Windows 메시지 후킹

// KeyHook.dll #include "stdio.h" #include "windows.h" #define DEF_PROCESS_NAME "notepad.exe" HINSTANCE g_hInstance = NULL; // hook procedure가 속한 DLL 핸들 HHOOK g_hHook = NULL; // Hook 핸들 HWND g_hWnd = NULL; BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD dwReason, LPVOID lpvReserved) { switch(dwReason) { case DLL_PROCESS_ATTACH: g_hInstance = hinstDll; break; case DLL_PROCESS_DETACH: break; } retur..

인라인 패치 - unpackme#1

[코드 흐름 분석] 0x401000 (EP) // not encoded ↓ 0x4010E9 // not encoded ↓ 0x401098 // not encoded 디코딩 루프 존재 : 0x4010F5 - 0x401248 xor with 0x44 ↓ 0x4010BD // not encoded 디코딩 루프 존재: 0x401007 - 0x401085 xor with 0x7 디코딩 루프 존재: 0x4010F5 - 0x401248 xor with 0x11 ↓ 0x401039 // xor 7에 의해 decoded 된 상태 checksum 계산 (0x4010F5 - 0x401248 변조 여부 확인) ↓ 0x40108A // not encoded 디코딩 루프 존재: 0x40124A - 0x40127F xor with..

UPack 파일 분석 - HXD, Ollydbg

* PEView는 여전히 Upack 패킹된 파일 분석 못한다... IMAGE_DOS_HEADER [ 0x0 ~ 0x3F ] - "MZ" 시그니쳐 - e_lfanew = 0x10 - 0x2 ~ 0x3B까지는 다른 용도로 쓰인다 DOS Stub 생략 PE Signature [ 0x10 ~ 0x13 ] IMAGE_FILE_HEADER [ 0x14 ~ 0x27 ] - Machine 0x14C, 섹션 수 3개 - Optional Header Size 0x148 => 0xE0보다 크다, 남은 공간은 다른 용도로 쓴다 IMAGE_OPTIONAL_HEADER [ 0x28 ~ 0x16F ] - magic number 0x10B, RVA of EP = 0x1018 - Image Base=0x1000000, Section ..

PE 재배치

[Base Relocation Table] Base Relocation Table 주소 = IMAGE_OPTIONAL_HEADER32.DataDirectory[6] 통해 구함 .reloc 섹션에 존재한다 // Relocation Table (구조체 + WORD 타입 배열) // RVA=1000 단위로 블록 하나씩 추가됨 typedef struct _IMAGE_BASE_RELOCATION { DWORD VirtualAddress; // RVA DWORD SizeOfBlock; // Size of Relocation Table } IMAGE_BASE_RELOCATION; WORD TypeOffset[N]; // N = (SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION))/2 Ty..

PE File Format 정리

[PE Header 구조] - IMAGE_DOS_HEADER [크기 0x40] 0x0~0x1 : DOS Signature "MZ(4D5A)" 0x3C~0x3F : NT header의 offset - DOS Stub [DOS_HEADER 이후부터 NT header offset 전까지] 0x0~0xD : 16bit DOS용 어셈블리 0xE ~ : 문자열 - IMAGE_NT_HEADERS 1) PE Signature ("PE\x00\x00") [크기 0x4] 2) IMAGE_FILE_HEADER [크기 0x14] 0x0~0x1 : Machine (0x014c: Intel 386, 0x0200: Intel 64) 0x2~0x3 : Number of sections (>0) 0x10~0x11 : Size of O..

Ollydbg 단축키 정리

명령어 단축키 설명 restart Ctrl + F2 처음부터 다시 디버깅 시작 step into F7 OP 코드 하나 실행, CALL 명령 내부로 step over F8 OP 코드 하나 실행, CALL 명령 넘어감 execute until return Ctrl + F9 함수 코그 내에서 RETN 명령까지 실행 go to Ctrl + G 원하는 주소로 jump execute until cursor F4 커서 위치까지 실행 comment : 코멘트 추가 Search for - User-defined comment label ; 라벨 추가 Search for - User-defined label set/reset bp F2 bp 추가 / 제거 run F9 실행 show current EIP * 현재 EIP 위..