리버싱 - PE,스택,API Hook 개념

m0ng·2025년 6월 17일

리버싱을 위한 시스템 구조

📦 PE(Portable Executable) 파일 구조

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


함수 호출과 스택(Stack) 구조

함수 호출 시에는 스택이 사용됩니다. 스택은 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 레지스터/메모리 간 데이터 이동

분석 기법

🔍 정적 분석 (Static Analysis)

실행 없이 기계어를 분석

도구: IDA Pro, Ghidra, Binary Ninja

주요 분석 요소: 함수 흐름, CFG, 문자열, API 호출 등

⚙ 동적 분석 (Dynamic Analysis)

실제 실행 상태에서 추적

도구: x64dbg, OllyDbg, Immunity Debugger

주요 기능: Breakpoint, Register 확인, 메모리 수정

API Hooking

API Hooking은 실행 중인 프로세스에서 특정 API 함수의 동작을 가로채어 원하는 방식으로 변경하는 기술입니다.

사용 목적

보안 우회, 입력 감시, 동작 조작

리버싱 시 악성코드 분석 또는 크랙 우회 확인

대표적인 Hook 방식

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;

0개의 댓글