교재 - 리버싱 핵심원리
Day 1 정리
패치(patch) - 실행 중인 프로세스 메모리의 내용을 변경하는 작업
↕
크랙(crack) - 패치와 동일하지만 의도가 비합법/비도덕의 경우
EP(EntryPoint) - 실행 시작 주소
함수 빠르게 찾는 방법
1. 문자열 검색
- 우클릭 → Search for → All referenced text string
2.1 API 검색 방법
- 우클릭 → Search for → All intermodular calls
! Pakcer/Protector을 사용하여 압축/보호시에 API 목록 확인 불가
2.2 API 검색 방법
- View → Memory ( Alt + M ) - Memory Map 확인(뭘 의미하는지 아직 잘 모르겠음p.34)
- Name in all modules로 들어가서 API 검색후 찾아가는 방법
! 2.1의 단점을 보완하여 메모리에 올라간 라이브러리 확인
패치(Patch) 방법
Ctrl + E (dump 수정)
1. 문자열 hex dump 직접 수정 ( 기존 메모리 크기 유의)
2. 다른 메모리(NULL padding)영역을 찾아 작성 후 전달 메모리 위치 수정
리틀 엔디언 / 빅 엔디언
○ str 문자열은 Endian 형식에 상관없이 동일
빅 엔디언 - 네트워크 프로토콜에서 사용
리틀 엔디언 - Intel x86등에서 사용 ( 산술 연산과 데이터의 타입이 확장/축소될 때 효율적
IA-32 Register
Register - CPU 내부에서 사용하는 다목적 저장 공간
범용 레지스터 ( General Purpose Registers )
EAX - 일반적으로 함수 리턴 값에 사용
ECX - 반복문 명령어에서 반복 카운트로 사용
ESP - 스택 메모리 주소
EBP - 함수가 호출되었을 때 그 순간의 ESP를 저장, 함수 리턴 직전에 ESP에 다시 할당하여 스택 보존
ESI/EDI - 특정 명령어와 함께 메모리 복사에 사용
FLAG
ZF ( Zero Flag ) - 연산 결과 값이 0이 되면 ZF는 1로 설정
OF ( Overflow Flag ) - 부호 있는수의 오버플로가 발생했을 때 1로 세팅, MSB(Most Significant Bit)가 변경될 때
CF ( Carry Flag ) - 부호 없는 수의 오버플로가 발생했을 때 1로 세팅
EIP ( Instruction pointer ) - CPU가 처리할 명령어의 주소
STACK
- FILO ( First In Last Out )
스택에 PUSH시 ESP는 감소, POP시 ESP는 증가
OllyDbg 기본 단축기 모음
Restart Ctrl + F2
Step into F7
Step over F8
Run F9 (until BP)
BP F2 | BP List Alt + B
Go to Ctrl + G
Enter 함수 진입
Execute until Return - Ctrl + F9
Execute until Cursor - F4
Comment - ; | Label - :
용어
VA (Virtual Address) - 프로세스의 가상 메모리
PE (Portable Executable) - Windows 실행 파일(EXE, DLL, SYS 등)
~ p.111
정리
노션에 정리하면서 공부 하고 있었는데 뭔가 할 수록 같은 열정을 담기는 어렵고 불편한점도 있어서 공부 내용을 차근히 올릴려고 한다.
꾸준히 하는자가 승리하는 분야인 만큼 계속해서 늘려나갈 것 이다