visual studio로 엄청 간단한 코드를 작성해보았다.
이 소스코드의 exe파일을 리버싱해보려고 한다.
리버싱 해보기 전에 함수 프롤로그와 에필로그가 무엇인지 간단히 살펴보고 가자.
함수 프롤로그와 에필로그는 스택 프레임에 관여를 하는 작업이다.
스택 프레임
함수가 실행되기 위해 스택이라는 곳에 여러가지 데이터를 올리게 되는데 이때 사용되는 스택의 영역을 스택 프레임이라고 한다. 스택의 영역을 말하지 때문에 스택의 틀이라고 이해할 수 있다. (그래서 스택 프레임 ~ )
함수 프롤로그와 에필로그는 이름처럼 앞과 뒷 부분인 것을 어느정도 유추할 수 있는데,
함수가 호출되면 일련의 순차적인 과정이 일어난다.
그 과정 중 스택프레임을 구성해주는 작업까지를
함수 프롤로그라고 하고,
그 이후 함수가 수행을 마치고 사용했던 스택 공간을 정리하는 작업을
(처음 호출한 지점으로 돌아가기 위해 스택 복원하는 과정)
함수 에필로그라고 한다.
그러면 이제 리버싱 해보면서 직접 함수 프롤로그와 에필로그를 살펴보자.
리버싱 툴로는 Immunity Devugger을 사용하였다.
기본적인 기능
F8 : 한 줄씩 실행
F2 : BreakPoint 걸기
F9 : BP까지 실행
을 사용해서 함수 프롤로그와 에필로그를 찾아보았다.
함수 프롤로그
여기서 어셈블리 명령어를 볼 수 있는데
PUSH는 스택의 값을 저장하는 명령어이고 MOV는 값을 넣어주는 명령어이다.
+) EBP와 ESP는 레지스터의 이름이다.
PUSH EBP : 이전 스택 프레임의 EBP를 SFP(Stack Frame Pointer) 저장한다.
-> 스택 프레임 제거 후 원래 스택 프레임으로 복귀하기 위해 이전 스택 프레임의 EBP를 제거
MOV EBP, ESP : Stack Pointer를 ESP 레지스터에 저장
-> 사용할 함수에 대한 스택 프레임 생성
함수 에필로그
POP은 스택 끝에 저장된 값을 가져오는 어셈블리 명령어이다.
함수 에필로그 부분을 보면 MOV ESP, EBP 어디서 본 건데..
바로 함수 프롤로그 부분을 뒤집어서 실행한 것임을 볼 수 있다.
MOV ESP, EBP : EBP에 ESP 값 복사
-> 함수 종료
POP EBP : 이전 함수로 돌아가기
'Reversing' 카테고리의 다른 글
[Practice] LAB 6-4 (0) | 2021.11.19 |
---|---|
[Practice] LAB 6-3 (0) | 2021.11.19 |
[Reversing 개념] 안티 디버깅 (Anti Debugging) (0) | 2021.02.22 |
리버싱 엔지니어링? (0) | 2021.02.15 |
리버싱 용어 공부 (+ c언어 컴파일 과정) (0) | 2020.10.12 |
댓글