본문 바로가기
Study/리버싱

Debugger

by 꼬부기가우는소리 2016. 6. 5.
728x90


참고 도서 : [리버싱 핵심원리 : 악성 코드 분석가의 리버싱 이야기]

저자 : 이승원

출판사 : 인사이트


참고 사이트 : 


개발 도구를 통해 프로그래밍 언어 소스코드를 빌드하면, 실행파일이 생성된다. 이 과정은 결국 사람이 이해하기 쉬운 프로그래밍 언어의 소스코드를 기계가 이해하기 쉬운 기계어로 변환하는 것이다. 이러한 기계어는 사람이 알아보기 어렵기 때문에 좀 더 편하게 보기 위해서 디버거 유틸리티를 사용한다. 디버거에 탑재된 디스어셈블러(Disassembler) 모듈은 이 기계어를 어셈블리(Assembly)언어로 번역해서 보여준다.


Debugger

디버거 (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

댓글