프로그램 디버깅 하고 분석할 때 아주 유용한 도구입니다.
OllyDBG는 Win32 API에 최고. MFC 관련은 IDA PRO Disassemble 추천.
OllyDbg가 디버거로써는 뛰어나지만, reverse analyzing 면에서는 IDA Pro 가 독보적이죠~
OllyDbg는 Win32 API 인 경우 충실히 label (ex: CreateFile, ExitProcess, etc) 을 달아주지만,
RunTime/MFC library 인 경우 거의 label (ex: printf, strcpy, CString::CString() etc) 정보를 주지 못합니다.
소개하는 플러그인은 IDA Pro에서 자동으로 추가되는 label 과 comment 까지 그대로 OllyDbg 에서 쓸 수 있도록 도와줍니다.
사용법은
1. 플러그인 설치
2. IDA Pro 실행 -> 원하는 파일 오픈 (=> IDA가 욜씨미 분석을 하겠죵)
3. 맵파일 생성 : File\Produce file\Create Map file 메뉴 선택 => 나타나는 dialog 의 모든 체크박스에 체크 해주시고...
4. OllyDbg 실행 -> 동일 파일 오픈
5. 맵파일 로드 : Plugins\MapConv\Replace label 메뉴 선택 => 파일오픈 dialog에서 해당 *.map 파일 선택
OllyDbg 단축키
출처: http://home.t-online.de/home/Ollydbg/quickst.htm
Ctrl+F2 | 프로그램 재실행 |
Alt+F2 | 프로그램 닫기 |
F3 | 새 프로그램 열기 |
F5 | 활성화 되어 있는 윈도우 최대화, 혹은 원복 |
Alt+F5 | olly 디버거 윈도우를 항상 위로 |
F7 | Step into (함수 진입) |
Ctrl+F7 | Animate into (entering functions) |
F8 | Step over (executing function calls at once) |
Ctrl+F8 | Animate over (executing function calls at once) |
F9 | 실행 |
Shift+F9 | Pass exception to standard handler and run |
Ctrl+F9 | Execute till return |
Alt+F9 | Execute till user code |
Ctrl+F11 | Trace into |
F12 | Pause |
Ctrl+F12 | Trace over |
Alt+B | Open Breakpoints window |
Alt+C | Open CPU window |
Alt+E | Open Modules window |
Alt+L | Open Log window |
Alt+M | Open Memory window |
Alt+O | Open Options dialog |
Ctrl+T | Set condition to pause Run trace |
Alt+X | Close OllyDbg |
F2 | Toggle breakpoint |
Shift+F2 | Set conditional breakpoint |
F4 | Run to selection |
Alt+F7 | Go to previous reference |
Alt+F8 | Go to next reference |
Ctrl+A | Analyse code |
Ctrl+B | Start binary search |
Ctrl+C | Copy selection to clipboard |
Ctrl+E | Edit selection in binary format |
Ctrl+F | Search for a command |
Ctrl+G | Follow expression |
Ctrl+J | Show list of jumps to selected line |
Ctrl+K | View call tree |
Ctrl+L | Repeat last search |
Ctrl+N | Open list of labels (names) |
Ctrl+O | Scan object files |
Ctrl+R | Find references to selected command |
Ctrl+S | Search for a sequence of commands |
Asterisk (*) | Origin |
Enter | Follow jump or call |
Plus (+) | Go to next location/next run trace item |
Minus (-) | Go to previous location/previous run trace item |
Space ( ) | Assemble |
Colon (:) | Add label |
Semicolon (;) | Add comment |
ctrl+위, 아래 화살표키 | 디스어셈블 위치 지정 |
소프트아이스와 함께 가장 많이들 사용하시는 올리디버거입니다. 소프트아이스와 같은 커널 디버거는 아니지만 사용하기 쉽고 기능도 많들으며 보기 좋은 인터페이스를 가지고 있습니다.
※ 제가 수정한 ollydbg.ini.fix를 사용하시면 좀 더 음침한(?) 인터페이스가 됩니다. ^^;
※ 한가지 주의할 점은 다음과 같습니다.
디 버그 모드로 빌드할 경우, *.exe 파일과 함께 *.pdb 파일이 생성되는데 (물론, 릴리즈 모드로 빌드하여도 옵션을 설정하면 *.pdb 파일을 생성할 수 있습니다.) 이것은 심볼(Symbol) 파일로 OllyDbg에서는 이 파일을 참조하여 디버깅시 사용자에게 추가적인 정보를 제공합니다. 그런데 이 파일이 위치하는 디렉토리의 경로명 중에 공백이 있을 경우 OllyDbg에서는 찾질 못하네요. 따라서 디렉토리 명에 공백이 들어가지 않도록 주의하시기 바랍니다. 소스 파일의 경로 또한 마찬가지입니다.
※ 버그가 있군요.
위 내용도 그렇고 올리에서는 디버깅 심볼 관련 파일들의 패스를 잘 찾지 못하는 것 같습니다. 소스 파일의 경우 패스가 길어지니까 올리에서는 패스를 엉뚱하게 인식하네요. 아마 버그인듯 합니다. Ollydbg Users Forum에는 그런 버그 리포트가 없지만요... -_-ㅋ 암튼 해결책은 간단한 패스에서 처음부터 개발작업을 하던지 빌드할 때만 간단한 패스로 옮겨와서 빌드해야 할 것입니다.
이 프로그램을 가지고 원래 우리가 작성한 프로그램을 역 어셈블 할 수 있다.
처음 프로그램을 설치하고 option 의 appearance에서 두개의 폴더설정을 현재의 프로그램이 있는 폴더를 설정한다.
그리고 visual c++의 project를 설치할 때 release mode와 minimize size를 해서 프로젝트를 만들어준다.
cf ) Minimize size와 Release Mode 그리고 Maximize speed와 Release Mode의 차이점....
speed와 size의 Trade-off가 된다. 이것은 이 util을 가지고 프로그램의 내부를 들여다보면 알 수 있다.
[출처] 올리디버거(Ollydbg)|작성자 이카루스