25강~29강 요약
25강. ASPack 분석
ASPack 특징
1) 실행 파일 압축/패킹 프로그램
2) UPX 구조와 유사
3) OEP(Original Entry Point) 찾는 방식도 UPX와 유사
4) UPX처럼 섹션을 하나로 무리하게 합치지 않음
OEP(Original Entry Point)
- 패킹이 풀린 뒤 원본 프로그램이 시작되는 주소- 리버싱의 최종 목적지- OEP를 찾으면 사실상 분석의 대부분이 끝난 경우가 많음
[분석 흐름]
1. ESP 기준 브레이크 포인트(BP)
1) 패커 시작 시 PUSHAD 명령으로 레지스터 전체를 스택에 백업함
2) 이때 변경된 ESP(스택 최상단 주소)에 하드웨어 브레이크포인트를 설정함
3) 압축이 풀린 후 레지스터를 원상 복구하는 POPAD 시점에 정확히 실행이 멈춤
2. 점프 흐름 관찰
- CALL
- JMP
- RET 명령 등을 추적
3. Zero Flag 기반 분기
- JNZ 사용
- Zero Flag = 0 → 점프(루프로 돌아감)
- Zero Flag = 1 → 점프 안함(다음 코드 진행하므로 루프 탈출)
4. RET 명령 핵심
RET는 스택에서 주소를 꺼내(POP) 그 주소로 점프(JMP)하는 명령임
POP : 스택에서 주소값을 꺼냄
JMP : 그 주소로 점프
RET을 이용한 OEP 탐지 원리
구조
1) PUSH로 특정 주소 저장
2) RET 실행 3) RET가 스택에서 주소를 POP
4) 해당 주소로 JMP(PUSH 된 값이 실제 점프 대상, 그 주소가 OEP일 가능성 매우 높음)
OEP 진입 방법
방법 1. RET 이전 PUSH 값 확인, 주소 직접 이동
방법 2. PUSH 이후 RET 더블 클릭, 자동으로 OEP 이동
(*주의. PUSH 이전에는 스택에 주소가 없어 잘못된 곳으로 이동 가능하다는걸 인지하고 있어야함.)
OEP 이후 분석
정상 코드가 복원되면 문자열 검색, 주요 API 호출 흐름을 파악하여 본래 로직을 분석함
UPACK 특징
- 파일 크기 최소화와 분석 방해를 목적으로 하는 노후된 패커임
- PE헤더를 매우 복잡하게 꼬아놓음 ( DOS Stub 영역을 없애거나 섹션 테이블을 겹치게 만들어 분석 도구의 파싱과 메모리 덤프를 마비시킴)
27강. 인라인 패치(Inline Code Patch)
인라인 패치 정의 : 실행 파일의 기존 실행 흐름 중간에 원하는 코드를 삽입하여 동작을 변조하는 기법
목적
- 압축/암호화된 실행 파일 수정
- 실행 흐름 조작
- 원하는 코드 삽입
Code Cave 개념
정의 : 프로그램 내부 빈 공간(Null), 여기에 원하는 코드 삽입
흐름 : 기본) 디코딩 > OEP
인라인 패치) 디코딩 > Code Cave > OEP(원본 코드 영역의 훼손을 줄이기 위함)
특징 : 스크립트 처럼 동작, 중간에 원하는 로직 삽입 가능, 원래 코드 수정 최소화
28강. Windows 메세지 훅 이론
Hooking 정의
OS와 프로그램 사이를 오가는 정보를 가로채고 조작하고 감시하는 기술
구조 User <-> OS <-> Application
(중간 정보 흐름을 후킹)
Windows Message Hooking (GUI 기반 이벤트 시스템)
이벤트 처리 흐름
[1단계] 사용자 입력 발생
[2단계] OS가 메시지 생성
[3단계] 해당 프로그램으로 메시지 전달
[4단계] 프로그램이 메시지 처리
위 과정 중간에서 메시지를 가로채고 내용을 확인하여 수정 가능한 기술이 Hooking!!
Hook Chain 정의
동일 메시지에 여러 Hook 존재할 수 있음으로 이들을 체인 형태로 연결시켜서
Hook1 > Hook2 > Hook3을 순차적으로 호출
Queue(큐) 개념
OS 와 프로그램을 메시지 큐 이벤트 저장, 순차적으로 처리
Windows API Hook 함수
핵심 함수 : SetWindowsHookEx
역할 : 메시지 후킹 등록 (특정 메시지를 가로챌 콜백 함수를 시스템에 등록하는 핵심 API임)
특징 : 시스템 이벤트 감시, 키보드 후킹 가능, 마우스 후킹 가능
Callback Function
정의 : 특정 이벤트 발생 시 운영 체제에 의해 자동 호출되는 함수
역할 : 메시지 발생 시 자동 실행, Hook 처리 담당
Global Hook
dwThreadId = 0 의미 : 모든 프로세스 대상, 시스템 전체 후킹동작 방식 : DLL을 여러 프로세스에 강제 주입, 모든 프로그램 이벤트 감시 가능
DLL Injection
목적 : 실행 중인 타깃 프로세스 메모리에 외부 DLL파일을 강제로 로드시키는 기법활용 : 기능 추가, 메시지 후킹, 입력 차단, 동작 변경
주요 Windows API
- LoadLibraryA
역할 : 특정 DLL 파일을 프로세스 메모리에 로드하고 고유 식별자인 핸들(Handle)을 반환함
반환값 : DLL Handle- Handle
의미 : 리소스 접근용 값, 운영체제가 관리하는 객체 접근자 (OS가 관리하는 커널 객체나 모듈에 간접적으로 접근할 수 있게 해주는 고유 주소 식별자임)
ex) 파일, 프로세스, DLL, 메모리
- GetProcAddress
역할 : DLL 내부에 존재하는 특정 함수의 실제 가상 메모리 주소 획득
29강. Windows 메세지 훅 실습
목표 : 키보드 입력 후킹
흐름
1) 후킹 콜백이 담긴 DLL 제작
2) DLL 로드 : LoadLibraryA 사용
3) DLL 내부에서 SetWindowsHookEx 호출
4) 메시지 처리 : 키보드 입력 감시
'2. Reversing (리버싱) > 2) 개념 정리' 카테고리의 다른 글
| [26.05.15] 개구리버싱 7주차 활동 (0) | 2026.05.15 |
|---|---|
| [26.05.08] 개구리버싱 6주차 활동 (0) | 2026.05.08 |
| [26.05.01] 개구리버싱 4주차 활동 (0) | 2026.05.01 |
| [26.04.10] 개구리버싱 3주차 활동 (0) | 2026.04.10 |
| [26.04.03] 개구리버싱 2주차 활동 (0) | 2026.04.03 |