역분석 – 디어셈블러(디버거, Debugger)

디어셈블러는 프로그램/하드웨어에서 오류인 버그(Bug)를 세부적으로 추적하여, 분석하는 행위를 말하며, 이와 같은 행위를 일반적으로 디버깅(ㅊ)이라고도 한다. 그리고 이러한 버그를 추적할 수 있는 도구를 디버거(Debugger)라고 한다.

그런데 프로그램의 오류를 찾을 때, CPU에서의 처리 과정을 분석해야 하다 보니 자연스럽게 기계어와 가까운 어셈블리어를 이용하게 되어, 디버거라 하면 디어셈블러를 포함하여 생각하는 게 일반적이다(정식 명칭은 “디어셈블 디버거”이다).

이는 사용분야에 따라 유저 모드 디버깅와 커널 모드 디버깅으로 구분되며, 해당 분야별로 유용할 도구에 대해 알아보도록 하자.

Ollydbg

Ollydbg는 유저모드 디어셈블러로 IDA와 함께 많이 사용되는 도구이다. 필자 역시 대부분의 악성코드 및 프로그램 분석은 Ollydbg를 이용하여 진행한다.

Ollydbg는 직관적인 인터페이스를 제공하면서, 프로그램 디버깅에 필요한 기능을 대부분 구현해놓았을뿐더러, 자체 프로그램 분석 기능을 이용하여, 분석자를 돕는다.

아래 메인 화면은 2부에서도 하였지만 다시 한번 각 창 별로 표시하는 내용에 대해 확인하도록 하자.

[그림]Ollydbg 메인 화면

위와 같이 Ollydbg는 메인 화면에서 역분석에 필요한 전체적인 진행 흐름을 한눈에 파악하기가 용이하도록 구성하였다. 여기에 각 컨트롤 기능키 역시 단축키를 통해서 빠르게 분석할 수 있도록 돕고 있으니, 자주 사용되는 단축키에 대해서는 미리 알아두는 것이 좋다.

프로그램 전역에서 사용 가능한 단축키는 다음과 같다(자주 사용되는 것은 굵게 표시하였다).

Ctrl+F2 프로그램 리스타트
Alt+F2 프로그램 종료
F3 새로운 프로그램 열기
F5 윈도우 최대화/기존 크기로 복원
Alt+F5 항상 위 설정/해제
F7 Step into (프로시저 안으로 들어감)
Ctrl+F7 Animate into (프로시저 안으로 들어감)
F8 Step over (하나의 프로시저 호출을 실행)
Ctrl+F8 Animate over (하나의 프로시저 호출을 실행)
F9 Run
Shift+F9 예외 무시하고 실행
Ctrl+F9 복귀까지 실행
Alt+F9 유저코드를 실행시까지 실행
Ctrl+F11 Trace into
F12 Pause
Ctrl+F12 Trace over
Alt+B 브레이크 포인트창 열기
Alt+C CPU창 열기
Alt+E 모듈창 열기
Alt+L 로그창 열기
Alt+M 메모리창 열기
Alt+O 옵션창 열기
Ctrl+T 설정한 상황에 맞을 때까지 추적 후 일시 중지
Alt+X Ollydbg 종료

[표] Ollydbg 전역 단축키

위 단축키들은 Ollydbg 도구 전역에서 사용이 가능한 단축키로써, 역분석 시 유용하게 사용되는 단축키라 할 수 있다. 그럼 디어셈블리 창에서 사용 가능한 단축키에 대해서도 확인해 보자.

F2 브레이크 포인트 설정
Shift+F2 브레이크 포인트를 설정시 상황을 설정하여 해당 상황에 맞으면 일시 정지
F4 선택줄까지 실행
Alt+F7 이전 참조
Alt+F8 다음 참조
Ctrl+A 코드 분석
Ctrl+B 바이러니 검색
Ctrl+C 클립보드로 복사
Ctrl+E 바이너리 수정
Ctrl+F 명령 검색
Ctrl+G 명령줄 이동(주소방식)
Ctrl+K 호출 트리창 열기
Ctrl+L 마지막으로 진행한 검색 재수행
Ctrl+N 이름 리스트 검색
Ctrl+O 오브젝트 파일 검색
Ctrl+R 현재 선택한 명령문과 동일한 명령문 검색
Ctrl+S 명령문을 입력하여 해당 명령문과 동일한 명령문에 대해서 검색
Asterisk (*) 현재 실행중인 명령줄로 이동한다.
Enter JUMP나 CALL 명령에서 사용하면, 해당 명령줄로 이동한다
Plus (+) 다음 지역/다음 추적 대상으로 이동
Minus (-) 기존 명령줄로 복귀한다.
Space ( ) 어셈블리 코드 작성
Colon (:) 이름표를 붙인다.
Semicolon (;) 주석을 붙인다.

[표] 디어셈블리 창 단축키

위 단축키 중 강조한 것들은 자주 사용되는 것들로서 기억해 두면 유용할 것이다. 단 외우려 하지 말자. 여러 번 분석을 하다 보면 자연스럽게 단축키가 손에 익을 것이다.

Ollydbg의 사용법에 대해서는 실행 프로그램 분석에서 다시 다룰 예정이니 해당 장에서 자세히 확인해 보도록 하자.

IDA

Ollydbg와 더불어 유명한 역분석 도구이다. Ollydbg는 Win32API 분석에는 수월하지만 IDA는 대부분의 언어를 분석할 수 있는 유용한 도구이다. 이렇다 보니 여러 분석가들이 Ollydbg와 IDA를 혼용하며 분석할 정도로, 역분석 진행에 많은 도움을 준다.

상용 프로그램답게 다양한 플러그인과, 디버깅 흐름 구조를 쉽게 파악할 수 있는 그래픽 뷰 등 여러 부가 기능을 통해 역분석을 도와주는데, IDA에서 이용하는 단축키가 Ollydbg와 비슷하므로 크게 혼용하여 사용하는 데도 큰 어려움 없이 이용이 가능하다. 동적 디버깅시 자체적으로 진행하지 않고 Windbg나 Bochs를 이용하는 특징을 가지고 있다.

[그림] 강력한 디버깅 도구 IDA

W32DASM

W32DASM도 많은 전문가들이 애용 하는 도구 중 하나이다.

이 도구의 특징은 디버깅 과정을 자동으로 기록하여 준다. 따라서 분석 이후 현재 분석을 진행하면서 보았던 어셈블리 내용들을 확인할 수 있다.

이는 차후 분석을 완료한 이후 코드 패칭을 해야 할 지점을 찾아, 코드 패칭(Patching, 수정) 전 코드와 코드 패칭 후 내용을 비교할 수 있고, 분석 중 이미 잘못된 지점으로 진행되었을 경우 기록된 내용을 통해 비교 분석이 가능하다(예전 분석 히스토리를 불러들여 비교하면 분석을 진행할 수 있다).

[그림 ] W32Dasm: 예전 디버깅 내용을 기록 후, 차이를 비교 분석할 수 있다

Windbg

Microsoft에서 무료로 제공하는 유저모드와 커널모드 디버깅이 가능한 강력한 도구이다. 소스 파일을 가지고 있는 경우 해당 소스 파일도 함께 제어할 수 있는 프로그램 디버깅에 유용한 기능을 제공한다.

이 도구에 대해서는 앞서 많이 설명하였으므로 이 정도로 마치겠다.

[그림] Windbg 메인 화면

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.