TIL(사전캠프)

리버싱. (2024-06-27)

note994 2024. 6. 27. 16:07

1. 디버거 좀 더 능숙하게 다루기

1.1 디버거 명령어

아래의 추가적인 디버깅 명령어를 사용해보자

(Code Window에서 동작함)

디버깅 동작 명령

1.2 베이스 캠프

디버거를 재실행할 때마다 처음(EP 코드)부터 새로 시작하기 때문에 상당히 불편하다. 그래서 중요 포인트(주소)를 지정해 놓은 후 그 포인트로 빠르게 갈 수 있는 방법을 기록한다. 큰 파일을 분석할 때는 시간이 며칠씩 소요되기 때문에 이러한 캠프를 군데군데 잘 설치해두면 아주 편리하게 디버깅 작업을 할 수 있다.

 

40104F 주소를 베이스캠프로 설정하겠다.

 

1. Goto 명령

베이스캠프 주소(40104F)를 기억하고 Go to[Ctrl+G] 명령으로 가는 것이다. 그림2.11의 다이얼로그에 40104F 주소를 입력 후 OK 버튼을 누른다.

그림2.11 Go to 다이얼로그

 

 

40104F 주소에 커서가 놓여져 있을것이다. Execute till cursor[F4] 명령으로 그곳까지 실행한다. 이제 여기서부터 디버깅을 진행할 수 있다.

 

2. BP 설치

베이스캠프로 가는 또 다른 방법은 BP(Break Point)를 설치[F2]하고, 실행[F9]하는 것이다. 가장 편하고 많이 사용되는 방법이다.

그림2.12 BP 설치

 

BP를 설치한 주소는 빨갛게 된다.

 

F9 명령은 현재 실행위치부터 BP가 걸린 곳까지 프로세스를 실행한다. BP가 없다면 끝까지 실행한다.

 

메인메뉴의 View - Breakpoints를 선택 [ALT+B] 하면 그림 2.13과 같이 Breakpoints 목록이 나타난다.

그림2.13 Breakpoints

 

 

목록에서 원하는 Breakpoint를 더블클릭하면, 해당 주소로 간다.

 

3. 주석

[;] 단축키로 주석(Comment)을 달고, 이 주석을 찾아가는 방법도 있다.

그림2.14 Comment

프로그래밍과 마찬가지로 디버깅에서도 주석은 매우 중요하다. 그림 2.14와 같이 중요 코드에 주석을 달아 두면 디버깅하기 매우 수월하다. 커서 위치를 잠시 다른곳으로 옮기고(40104F 이외의 위치에 클릭) 마우스 우클릭 - Search for - User-defined comment 항목을 선택하면 그림 2.15와 같이 상용자가 입력한 주석들이 표시된다.(사용자가 입력한 주석은 OllyDbg 내부에 기억되며 재실행할 때마다 불러들이기 때문에 디버깅할 때 편리하게 이용할 수 있다.)

그림2.15 User-defined comments

온통 빨간색 글씨인것이 커서의 위치이다. 주석 위치와 겹쳐지면 빨간글씨만 나타나기 때문에 커서를 잠시 다른곳에 두라고 한것이다. 해당 주소를 더블클릭하면, 그 주소로 갈 수 있다.

 

4. 레이블

레이블(Label)은 원하는 주소에 특정 이름을 붙여주는 아주 유용한 기능이다.

 

40104F 주소를 클릭한 후 단축기 [:]를 이용해 레이블을 입력해보자

그림2.16 레이블

이제 40104F 주소를 해당 레이블로 표시한다

그림2.17 코드에서 보여지는 레이블

그림2.17은 EP코드를 나타낸다. 처음에는 그냥 주소(40104F)로 표시되었지만 레이블을 붙이게 되면 코드가 매우 직관적으로 변경되어 디버깅할 때 매우 편리하다.

 

만약 그림처럼 레이블이 표시되지 않는다면 OllyDbg의 옵션 - Debugging option - Disasm에서 'Show symbolic addresses'를 체크해주면 된다.

그림2.18 Debugging option

레이블도 주석과 마찬가지로 검색이 가능하다. 마우스 우클릭 - Search for - User defined labels 항목을 선택하면 그림 2.19와 같이 사용자가 지정한 레이블이 표시된다. (Initial CPU selection이라고 표시된 부분은 현재 커서 위치를 나타낸다) 주석과 거의 비슷하다.

그림2.19 User-defined labels

원하는 레이블을 더블클릭하면 해당 주소로 갈 수 있다. 그 주소를 클릭하고 F4 명령을 하면 그 위치에서부터 디버깅이 가능하다