올리디버거를 사용하기전에, 왜 사용하는지!
디버깅이 무엇인가요?
우리가 기본적으로 작성한 소스코드(cpp)를 컴파일하면 exe파일로 나타나게 됩니다.
그렇게 되면, 당연히 제작자는 exe파일이 어떻게 동작하는지 압니다.
소스코드를 직접 작성했으니까요.
앞에서 helloworld를 작성한 것은 아주 간단하게 메시지 창을 띄워주는 프로그램이었습니다.
만약에 소스코드 없이, exe파일만 가지고 있다면 이게 어떤 파일인지 알 수 없겠죠?
우리의 코드는 창을 띄워주어서 실행한다면 알 수 있지만,
보여지는 것 없이 뒤에서 작업이 되는 파일이라면 알 수가 없겠죠.
그래서 디버깅 툴을 사용하는 것입니다.
어셈블리 언어로 번역해서 보여주는 것이죠!
그래서 우리가 사용할 디버거는 올리디버거입니다. 제일 많이 쓰고, 무료니까요..
ollydbg가 어떻게 보여지는지 알아보겠습니다.
1. Code window
- disassembly code를 표시해주는 곳.
- comment, label등을 보여주고 코드를 분석하여 loop, jump 위치 등의 정보를 표시
2. Register window
- 실제 cpu 레지스터 값이 어떻게 바뀌는지 보여줌
3. Dump window
- exe파일을 바로 헥사 에디터같은 것으로 열듯이 바이너리 상태로 보여주는 곳.
4. Stack window
- ESP register가 가리키는 프로세스 스택 메모리를 실시간으로 표시하고 수정가능함
리버싱을 하면서 중요한 몇가지 키워드들을 먼저 알고 가겠습니다.
EP(Entry Point)
우리가 올리디버거를 맨처음 실행시키면 하이라이트 되면서 올라가는 부분,
시작하는 address값이 40126F으로 나옵니다.
Address | Hex dump | Disassembly | Comment |
메모리상에 올라갈 때, 시작점의 주소가 대부분 400000에서 시작합니다.
기본주소에서 조금 떨어진 부분에서 시작하기 때문에 400000+ 126F라고 생각하시면 될것같네요.
Address: 프로세스의 가상 메모리(virtual address)내의 주소
Hex dump: 실제 CPU명령어
Disassemble code: OP code를 어셈블리로 변환한 코드
Comment: 디버거에서 추가한 주석
실제 윈도우 실행파일의 시작점을 EP라고 할 수 있겠습니다.
PEviewer에서 보게 되면 Image Base가 400000, Address of Entry Point가 126F인것을 다시한번 확인 할 수 있습니다.
ollydbg 기본 명령어
Restart [ctrl+ f2]
- 시작지점부터 다시 디버깅할 때
- 디버거는 안타깝게도 뒤로가기명령어가 없습니다.. 지나갔다면 다시 시작해야합니다.
Step into [F7]
- 하나의 명령어 실행, CALL명령어를 만나면 함수 코드 내부로 들어감
- 세세하게 보고싶다면!
Step over[F8]
- 하나의 명령어 실행, CALL명령어를 만나면 따라 들어가지 않고 그냥 함수 자체를 실행
- 대략적인 것만 보고싶다면!
Execute till Return[ctrl+ F9]
- 함수 코드 내에서 RETN명령어까지 실행(함수 탈출 목적)
- step into[F7]로 보다가 나오고 싶다면!
'study > 악성코드분석&리버싱' 카테고리의 다른 글
악성코드 분석- 기초 정적 분석, PE 파일 (0) | 2020.04.09 |
---|---|
Reversing Theory- abex' crackme #1 (2) | 2020.04.02 |
Reversing Theory- little endian (4) | 2020.04.02 |
Reversing Basic- helloworld.exe (2) | 2020.03.27 |
Reversing Basic- ollydbg install+ setting (1) | 2020.03.26 |