참고 도서 : [리버싱 핵심원리 : 악성 코드 분석가의 리버싱 이야기]
저자 : 이승원
출판사 : 인사이트
디버거 (Debugger) 또는 디버깅 도구(Debugging Tool)은 다른 대상 프로그램을 테스트하고 디버그하는 데 쓰이는 컴퓨터 프로그램이다. 검사 받는 코드는 명령어 집합 시뮬레이터 (ISS; Instruction Set Simulator) 위에서 돌아감으로 인해 특정한 조건에서 멈출 수 있는 강점을 갖지만, 직접 프로세서에서 실행될 때 보다는 느려진다.
소프트웨어 버그나 유효하지 않은 값에 의해서 프로그램이 정상적으로 진행되지 않는 것을 트랩이라고 한다. 소스 레벨 디버거 또는 심볼릭 디버거의 경우, 프로그램이 트랩되거나 정해진 조건에 도달하면, 디버거는 원본 코드에서의 위치를 보여준다. 요즘애는 대부분의 통합 개발 환경에서 볼 수 있다. 만약 로우 레벨 디버거 또는 기계어 디버거라면 디스어셈블리에서의 위치를 보여준다.
종류
(1) OllyDbg
공식사이트 : http://www.ollydbg.de/
사용이 편리하고 가볍고 빠른 무료 디버거이다. 다양한 기능과 많은 Plugin을 통한 확장성으로 리버싱 초보부터 전문가까지 폭넓게 사용되는 가장 인기 있는 디버거이다.
장점
- 가볍고 빠르다.
- 다양한 기능과 많은 옵션을 제공한다.
- PlugIn 기능을 통한 확장성을 제공한다.
- 관련 정보가 많아서 배우기 쉽다.
- 무료로 제공된다.
단점
- 업데이트와 후속 제품의 개발 주기가 늦다.
(2) IDA Pro
공식사이트 : https://www.hex-rays.com/products/ida/index.shtml
현재 최고의 Disassembler&Debugger라고 말할 수 있다. 그만큼 가격이 비싸다.
장점
- 다양한 기능과 충실한 업데이트를 제공한다.
단점
- 가격이 비싸다.
- 사용법이 비싸고 비교적 복잡하다.
- 초기 로딩 시간이 걸린다.
(3) WinDbg
공식사이트 : https://msdn.microsoft.com/en-us/windows/hardware/hh852365
DOS 시절 16bit 디버거인 debug.exe의 Windows 버전이다. 주로 커널 모드 디버깅(Kernel Mode Debugging)에 사용된다. 커널 드라이버 개발과 유지보수에 필수적으로 사용된다. 역사가 오래된 만큼 기능도 다양하고 사용 방법에 대한 전문 서적이 여러권 나와 있다.
장점
- 커널 디버깅이 가능하다.
- Microsoft에서 직접 만든 디버거다.
- 시스템 파일에 대한 심볼(Symbol)을 직접 다운 받을 수 있다.
- 시스템 내부 구조체(Undocumented 포함) 및 API에 대한 정보를 얻을 수 있다.
- Windows OS의 덤프 파일을 읽어 들여 분석할 수 있다.
- 시스템 크래쉬(Crash)가 발생했을 때 원인을 분석해 낼 수 있다.
단점
- 사용자 환경과 편의성이 다른 디버거들에 비해 조금 떨어진다.
명령어
디버거 동작 명령 (Code Window에서 동작)
명령어 |
단축키 |
설명 |
Go to |
[Ctrl] + [G] |
원하는 주소로 이동 (코드/메모리를 확인할 때 사용, 실행되는 것은 아님) |
Execute till Cursor |
[F4] |
cursor 위치까지 실행 (디버깅하고 싶은 주소까지 바로 갈 수 있음) |
Comment |
; |
Comment 추가 |
User-defined Comment |
|
마우스 우측 메뉴 Search for User-defined comment |
Label |
: |
Label 추가 |
User-defined label |
|
마우스 우측 메뉴 Search for User-defined label |
Set/Reset Break Point |
[F2] |
BP 설정/해제 |
Run |
[F9] |
실행 (BP가 걸려 있으면 그곳에서 실행이 정지됨) |
Show the current EIP |
* |
현재 EIP 위치를 보여줌 |
Show the previous Cursor |
- |
작전 커서 위치를 다시 보여줌 |
Preview CALL/JMP address |
[Enter] |
커서가 CALL/JMP 등의 명령어에 위치해 있다면, 해당 주소를 따라가서 보여줌 (실행되는 것이 아님. 간단히 함수 내용을 확인할 때 유용) |
'Study > 리버싱' 카테고리의 다른 글
Endianness (0) | 2016.06.08 |
---|---|
Stub Code (0) | 2016.06.08 |
OllyDbg (1) (0) | 2016.06.05 |
Assembler (0) | 2016.06.05 |
리버싱 (0) | 2016.06.05 |
댓글