Mafa Dev
OllyDbg (2) 본문
앞 포스팅에서는 OllyDbg의 설치 방법과 설정 방법에 대해서 알아보았는데요.
이 글에서는 OllyDbg의 사용 방법에 대해 알아보기로 합시다.
① 메모리 주소창
프로그램을 디버깅하는 동안에 표시되는 주소지로 Ctrl + G 단축키로 특정 위치로 이동할 수 있습니다.
② Opcode창
오퍼레이션 코드로 어떤 작동을 하는 코드들이 1byte로 정리되어 있다.
(1opcode == 1byte/2bytes == 1word/2words == 1dword) 이곳에 보이는 숫자들이 기계어 입니다.
③ Assembler Code 창
디스어셈블된 코드들입니다. 왼쪽의 기계어가 어셈블리어로 번역되어 표시 됩니다.
④ 레지스터 창
레지스터에 들어있는 값이 표시 됩니다. api 함수들이나 문자열, 함수 파라미터들을 올리디버거가 보기 좋게 정리해서 보여주기도 합니다.
⑤ 레지스터와 플래그 값 창
CPU가 필요할 경우 사용하는 레지스터와 플래그의 값이 어떻게 변화하는지 보여줍니다. 레지스트리는 특별한 메모리 공간으로써 data를 저장하고 이용가능합니다.
⑥ 메모리 Dump창
메모리에 들어있는 내용을 Hex(16 진수) 형식으로 보여주고 , 오른쪽의 해당 Hex 값을 ASCII 코드로 해석하여 보여줍니다.
메모리 덤프창에는 힙이나, 또는 Text 영역의 값들이 올 수 있습니다.
메모리 덤프창을 클릭하고 ctrl + G 를 누른 후 주소 값을 입력하면 , 해당 주소값에 해당하는 내용을 보여줍니다.
⑦ 스택 창
스택의 주소, 스택의 값, Comment 순으로 표시됩니다.
그럼 이제부터 메뉴에 무엇이 있는지 하나씩 살펴보도록 합시다.
[File] 메뉴에는 파일을 디버거로 불러오는 Open, 실행중인 프로세스를 디버거로 붙이는 Attach, 그리고 디버거를 종료하는 Exit가 있습니다.
Attach 메뉴는 현재 실행중인 프로세스 중 하나를 선택해서 올리디버거로 불러올 수 있는 기능입니다. 이렇게 실행중인 프로세스를 Attach 시키면 대상 프로세스는 실행을 중지한 상태로 변합니다.
[View] 메뉴는 말 그대로 보여주는 기능을 담고 있습니다. Memory를 선택하면 현재 Memory의 모습을 보여주고 , Call stack(Alt+K)을 선택하면 어디서 어떤 함수가 호출되었는지를 보여줍니다. 사용하기 어려운 기능이 아닌것은 확실합니다. 각 기능이 어떤 모습으로 포현되는지 한 번씩 실행해보길 바랍니다.
[Debug] 메뉴는 디버깅 작업을 할 때 가장 중요한 부분이라고 할 수 있습니다. 단어의 의미 그대로의 기능을 가지고 있으니 어렵지는 않을 것입니다. 하나씩 기능을 살펴보도록 합시다.
Run은 현재 디버거로 오픈한 프로그램을 실행시키는 기능입니다. BreakPoint(BP)를 만나거나 Exception이 발생해서 프로그램이 정지할 때까지 실행됩니다.
Restart는 현재 오픈한 대상 프로그램을 처음부터 실행하기 위해서 재실행시키는 기능을 합니다. Restart 후에는 Run을 해야 프로그램이 실행됩니다. (자주 쓰이는 기능이니 기억하도록 합니다)
Step into와 Step over를 통해서 코드를 한 줄씩 실행할 수 있는데 이 둘은 약간의 차이점이 있습니다. Step into는 Call 함수 명령어나 반복적으로 수행하는 Rep 같은 명령어를 만났을때 함수 내부로 추적해 들어가거나 Rep 조건을 만족할 때까지 계속 수행하지만 Step over는 함수 내부로 추적하지 않고 함수 실행 후 그 다음 코드로 넘어가능 기능을 합니다. Rep 명령어 같은 반복적인 명령어도 한 번에 처리하고 다음 코드로 실행이 옮겨집니다. API 함수나 추적해 들어갈 필요가 없는 함수 내부로 추적해 들어갔을 때는 Execute till return 기능을 통해서 그 함수의 ret 명령 지점까지 한 번에 실행하고 함수를 나올 수 있는 편리한 기능도 있습니다. 이외의 기능은 그리 많이 사용하지는 않습니다.
[Plugins] 메뉴에는 올리디버거에서 사용하는 여러 플러그인 기능들이 있습니다. 올리디버거의 개발자는 사용자들이 필요한 플러그인을 직접 제작해서 올리디버거에서 그 기능을 사용할 수 있도록 하고 있습니다.
[Options] 메뉴에서는 올리디버거의 설정 사항을 조정할 수 있습니다.
Appearance에서는 UDD 폴더나 Plugins 폴더를 설정할 수 있고, 글꼴이나 글씨 크기 같은 설정들을 변경할 수 있습니다.
Debugging options 에서는 다음의 그림과 같이 Exceptions와 관련된 사항을 설정할 수 있고 이외에 Debug 탭과 Trace 탭에서 디버깅하면서 발생되는 여러 상황들에 대한 설정을 할 수 있습니다.
[Window] 메뉴에서는 올리디버거 내부 윈도우들의 정렬 방식을 바꿀 수 있습니다. 모양이 아주 예쁘게 바뀌니 한번 해보시길 바랍니다. 그리고 여러 윈도우 중 활성화시키고 싶은 윈도우를 선택해서 활성화 시킬 수 있습니다.
지금까지 메뉴와 관련된 기능들을 살펴 보았는데요 이제 다른 기능들을 살펴 보기로 합니다.
다음은 어셈블리 코드가 있는 위치에서 마우스 우클릭시에 나오는 메뉴들입니다.
많은 기능들이 있지만 기본적으로 알아두어야 하는 기능 몇 가지만 우선 살펴보도록 합시다.
Comment 기능은 어셈블리 코드 옆에 사용자가 주석을 달아 놓을 수있는 기능입니다. 단축키는 ';' 입니다
주석을 통해서 코드 옆에 사용자가 보기 편하도록 여러 가지 설명을 달아 놓을 수 있습니다. 프로그램 분석시에 이렇게 주석을 달아 놓으면 전체적인 분석 작업이 쉬워집니다.
다음으로 Breakpoint(BP) 기능이 있습니다.
디버거로 대상 프로그램을 실행시켰을 때 Breakpoint를 만나면 실행을 멈추고 사용자에게 제어를 넘겨줍니다. 즉, 사용자가 원하는 대로 프로그램을 수정하고 실행시킬 수 있다는 것입니다. 조건 형식의 BreakPoint를 설정할 수 있고, Memory에 Acess가 발생할 경우, 또는 Write가 발생할 경우에 Breakpoint를 설정할 수 있습니다.
Software Breakpoint CPU는 인터럽트를 이용하여 운영체제에게 특정 이벤트를 알려주며 CC(int3) 라는 인터럽트가 발생되면 프로그램의 동작이 멈추게 되며 디버거에게 넘겨지게 되고 제어가 됩니다. |
Hardware Breakpoint 디버그 레지스터인 DR0 , DR1 , DR3 , DR6 , DR7을 이용하며 DR0~DR3은 Breakpoint를 걸어줄 대상의 주소 또는 범위를 설정할수 있으며 DR6은 인터럽트가 발생했을때의 결과를 알려주며 DR7은 Breakpoint의 속성을 설정할수 있습니다. 이것을 이용하면 특정 메모리 주소에 Write , Read , Excute가 발생했을 때 어떤 주소에서 실행이 되었는지 알수가 있습니다. |
함수 이름을 대상으로 찾을 수도 있고 프로그램 내부에서 사용되는 물자열을 검색할 수도 있습니다. 또 , 어셈블리 명령어를 입력해서 명령어가 위치한 지점을 찾을 때도 사용됩니다.
All intermodualar calls 기능을 사용하면 Import된 함수들의 목록을 볼 수 있습니다.
All referenced text strings 기능은 대상 프로그램에서 사용되는 문자열 값을 보여줍니다.
이번엔 스택이 표시되는 위치에서 마우스 우클릭시에 나오는 메뉴들입니다.
스택이 표시되는 윈도우가 ESP의 값에 따라서 변하는 것을 막으려면 Lock stack 기능을 이용해서 표시되는 부분이 변하지 않도록 할 수 있습니다. 스택의 특정 부분을 감시하고 싶을 때는 이기능을 사용하면 편리합니다. Go to EBP 기능은 현재 EBP 레지스터가 가리키고 있는 주소가 있는 지점으로 스택 윈도우를 바꿔줍니다. 스택에 들어있는 주소값에 어떤 데이터가 존재하는지 알아보고자 할 때는 Follow in Dump나 Follow in Stack 기능을 이용해서 해당 주소의 값을 확인할 수 있습니다. 또한 스택에 들어있는 데이터를 Show ASCII dump와 Show UNICODE dump 기능을 통해서 아스키값이나 유니코드값으로 볼 수 있습니다. 메뉴 자체가 영어로 설명이 잘 되어있기 떄문에 보기만 해도 기능을 알 수 있을 것입니다.
레지스터 상태창의 레지스터를 더블클릭하면 레지스터에 설정된 값을 변경할 수 있습니다. 플래그 레지스터일 경우는 0과 1의 레지스터값을 변경할 수 있습니다.
어셈블리 코드가 있는 부분을 더블클릭하면 직접 수정할수 있습니다.
▶ 자주 쓰이는 단축키
F2 : Break Point 설정 / 해제
F7 : Step into ( 한줄씩 실행하며 , 함수를 만나면 함수 안으로 들어간다
F8 : Step over ( 한줄씩 실행하며 , 함수안으로 들어가지 않는다 [ 실행만 한다 ] )
F9 : Run Program ( 실행 )
Ctrl + F2 : 프로그램 재시작
Ctrl + F8 : 자동 실행 (차례로)
Ctrl + F9 : Execute till return
Ctrl + g : 주소 찾기
Ctrl + a : 바꾼거 되돌리기
지금까지 올리디버거를 설치하고, 메뉴와 기능을 간략하게 살펴보았습니다. '올리디버거가 이런 기능들을 하는구나' 하는 정도만 알고 있으면 되겠습니다.
'보안 > 리버싱 관련 tool' 카테고리의 다른 글
Everything search engine [ 파일 검색 유틸 ] (0) | 2012.07.30 |
---|---|
OllyDbg (1) (0) | 2012.07.27 |
Process Explorer - 최고의 작업 관리자 (0) | 2012.07.27 |