Windows의 실행 파일(EXE, DLL)은 PE 구조를 따릅니다.
| 구성 요소 | 설명 |
|---|---|
| DOS Header | 옛 DOS 프로그램 실행용, "MZ" 시그니처 |
| PE Signature | "PE\0\0"으로 시작 |
| COFF Header | 파일 정보 (머신 타입, 섹션 수 등) |
| Optional Header | 진입점, 이미지 크기, 섹션 정렬 정보 등 |
| Section Table | 코드/데이터가 위치한 섹션 정보 |
| 섹션명 | 설명 |
|---|---|
| .text | 실행 코드 (기계어) |
| .data | 전역 변수/정적 변수 |
| .rdata | 문자열 상수, import/export 테이블 |
| .rsrc | 리소스 (아이콘, 대화상자 등) |
PE 분석 도구: CFF Explorer, PE-Bear, Exeinfo PE
함수 호출 시에는 스택이 사용됩니다. 스택은 LIFO(Last In First Out) 방식입니다.
push arg3 ; 마지막 인자
push arg2
push arg1 ; 첫 번째 인자
call function ; 리턴주소 push 후 함수 진입
함수 진입 시 구조
[ebp+8] : 첫 번째 인자
[ebp+4] : return address
[ebp] : 이전 함수의 EBP
[ebp-4] : 지역 변수
push 값을 스택에 저장
pop 값을 스택에서 꺼내옴
call 함수 호출 (ret 주소 push됨)
ret 함수 복귀 (EIP 복원)
mov 레지스터/메모리 간 데이터 이동
실행 없이 기계어를 분석
도구: IDA Pro, Ghidra, Binary Ninja
주요 분석 요소: 함수 흐름, CFG, 문자열, API 호출 등
실제 실행 상태에서 추적
도구: x64dbg, OllyDbg, Immunity Debugger
주요 기능: Breakpoint, Register 확인, 메모리 수정
API Hooking은 실행 중인 프로세스에서 특정 API 함수의 동작을 가로채어 원하는 방식으로 변경하는 기술입니다.
보안 우회, 입력 감시, 동작 조작
리버싱 시 악성코드 분석 또는 크랙 우회 확인
IAT Hook -> Import Address Table 조작 (모듈 로딩 시 적용)
Inline Hook -> 함수 진입부를 JMP로 덮어쓰기 (5바이트 JMP)
Detour Function Hook -> 함수 진입부 변경 + trampoline 구성
Windows API Hooking -> SetWindowsHookEx, SetWinEventHook 사용
DWORD *pFunc = (DWORD *)GetProcAddress(hModule, "MessageBoxA");
*pFunc = (DWORD)&MyHookedMessageBox;