공부/Reversing

리버싱 핵심원리 Day1

완이버스 2023. 8. 2. 01:20

교재 - 리버싱 핵심원리


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 


정리

 

노션에 정리하면서 공부 하고 있었는데 뭔가 할 수록 같은 열정을 담기는 어렵고 불편한점도 있어서 공부 내용을 차근히 올릴려고 한다.
꾸준히 하는자가 승리하는 분야인 만큼 계속해서 늘려나갈 것 이다

 

'공부 > Reversing' 카테고리의 다른 글

PE Packer  (0) 2023.12.29
PE파일 구조  (0) 2023.12.28
PE구조  (1) 2023.12.22