Ollydbg 메인 함수 찾기 - Yerim-Lee/Reversing GitHub Wiki
목차
- 프로그램 실행 모습
- OllyDbg 구조
- 자주 사용하는 단축키
- 메인 함수 찾기
- 기본적인 어셈블리어
분석환경
VMWare - Windows XP Professional
Tool - Ollydbg
파일 - helloworld.exe
프로그램 실행 모습
f9 을 눌러서 프로그램을 실행시켰을 경우 이렇게 Hello World! 라는 창이 뜬다. 여기서 메인 함수를 찾아볼 것이다. 메인 함수를 찾기 위해서는 Ollydbg 프로그램의 기본 구조와 자주 사용하는 단축키를 먼저 알아야한다.
OllyDbg 구조
OllyDbg의 구조는 크게 4가지로 나눌 수 있다.
- Disassembly : 프로그램을 오픈했을 때 프로그램 소스를 어셈블리어로 바꿔서 볼 수 있는 부분
- Registers : CPU의 Registers값을 그 때 그 때 볼 수 있다.
- Hex Dump : 프로그램의 Hex값과 ASCII코드/UNICODE를 볼 수 있다.
- Stack : 프로세스 스택 메모리를 볼 수 있다.
자주 사용하는 단축키
f7 : 한 줄 실행
f8 : 한 줄 실행(call 명령함수들을 skip)
f9 : run 프로그램이 종료될 때까지 실행
Ctrl + f2 : 다시 시작
f2 : BP(Break Point)
alt + b : BP목록 확인
메인 함수 찾기
helloworld.exe 파일을 open 하면 나오는 첫화면이다. 004011A0 번지수가 시작점인데 여기서 f7 단축키를 통해 함수 안으로 들어간다.
이렇게 함수 내부로 진입해서 앞서 언급했던 f7, f8 단축키를 사용하여 메인 함수를 찾아야한다. 어셈블리어 부분을 보면 MOV, SUB, PUSH 기타 등등 여러가지가 있는데 CALL 함수 같은 경우 내부로 진입하지 않고 넘어가기 위해서 f8 단축키를 사용한다. *
*f7과 f8은 함수 내부로 들어가냐 안들어가냐의 차이이다. 그렇게 하나하나 실행시키면서 찾다보면 메인함수를 찾을 수 있다. 그리고 메인 함수를 찾은 이후에는 또다시 찾을 필요없이 f2 단축키를 통해 위 사진처럼 빨간색으로 BP를 걸 수 있다. 그리고 alt + b 단축키를 통해 걸어놨던 BP를 손쉽게 찾을 수 있다. 그리고 f9은 원래 프로그램이 종료될 때까지 실행되는 단축키이지만 만약 BP를 걸어놨다면 BP에서 멈추게 된다.
그리고 추가적으로 이렇게 Go to 명령어를 통해서도 찾고 싶은 번지수로 바로 이동을 할 수 있다. 단축키는 Ctrl + g 이다. 그리고 어셈블리어 우측에 보면 Style, Title, UNICODE 기타 등등 저 부분이 주석이고, 주석은 ; 세미콜론을 사용하거나 더블클릭하여 달수가 있다. 작성한 주석은 마우스 우측 클릭 후 Search for -> User-defined comment 를 통해 확인할 수 있다.
기본적인 어셈블리어
MOV : 복사
ADD : 덧셈
SUB : 뺄셈
AND, OR, XOR : 논리연산
PUSH : 스택에 값을 넣는 명령어
POP : 스택에 값을 빼는 명령어
CALL : 함수 호출
RETN : 함수 리턴
JMP : 지정한 위치 이동