Ollydbg hay còn gọi tắt là Olly là một công cụ debug rất phổ biến trong Reverse Engineering (RE), nhờ giao diện trực quan và dễ sử dụng nên Olly phù hợp với người dùng ở mọi trình độ khác nhau.

Mọi người có thể download lại địa chỉ: http://www.ollydbg.de/

1. Các chức năng chính

Cửa sổ OllyDBG được chia ra làm 5 cửa sổ con :

1: Disassembler window: Các đoạn mã của chương trình dưới dạng code assembly và các comment tại các dòng code đó.

2: Register window: Các thanh ghi và giá trị của chúng.

3: Tip window: Các thông tin bổ sung cho 1 dòng code. Các thông tin này khá hữu ích trong quá trình debug.

4: Dump window: Cho phép người sử dụng xem và chỉnh sửa các giá trị trong bộ nhớ của chương trình đang được debug.

5: Stack window: Thông tin về stack của chương trình.

Ngoài 5 cửa sổ trên thì Olly còn có một số cửa sổ khác. Để ý trên thanh menu có các chức năng:

-Click vào nút L ta thấy cửa số Log data của Olly. Chứa các thông tin về các module, các import library và các plugins được load cùng chương trình tại thời điểm chương trình được load vào Olly.
– Click vào nút E ta thấy cửa sổ Executable modules, danh sách các file thực thi được chương trình sử dụng.
– Click vào nút M ta thấy cửa sổ Memory Map, chứa thông tin về bộ nhớ được chương trình của ta sử dụng.
-Click vào nút T là cửa sổ Threads, liệt kê các thread của chương trình.
-Click vào nút W là Windows
-Nút H là cửa sổ Handles.
– Nút / là Patches, cửa sổ chứa các thông tin về những câu lệnh ta đã sửa ở trong chương trình.
– Nút K là cửa sổ Call Stack.
– Nút B là cửa sổ Breakpoints, hiển thị các breakpoint ta đặt trong chương trình.
– Nút R – References chứa thông tin về kết quả cho chức năng tìm kiếm trong Olly.

Những chức năng không thể thiếu đó là các chức năng phục vụ cho công việc debug:

– Đặt Breakpoint: F2
– Run: F9
– Step into: F7
– Step over: F8
– Restart: Ctrl + F2

Có nhiều loại breakpoint và OllyDbg hỗ trợ tất cả chúng. Mặc định, OllyDbg sử dụng các breakpoint mềm, nhưng nếu cần thì ta vẫn có thể đặt các breakpoint cứng. Ngoài ra, ta có thể đặt breakpoint có điều kiện hoặc breakpoint trên bộ nhớ

Breakpoint mềm

Các breakpoint mềm sẽ hữu ích khi debug một hàm giải mã string. Ta có thể phát hiện hành vi của mã độc thông qua các chuỗi string mà nó sử dụng, vì lí do này mà tác giã mã độc thường làm rối chúng thông qua các hàm mã hóa/giải mã string. Mã độc phải gọi hàm giải mã string trước khi mỗi chuỗi string được sử dụng.

Breakpoint có điều kiện

Breakpoint có điều kiện là các breakpoint mềm và chúng chỉ dừng thực thi khi một điều kiện cụ thể được thỏa mãn. OllyDbg cho phép đặt breakpoint có điều kiện bằng các biểu thức; mỗi lần chương trình thực thi đến breakpoint mềm, biểu thức sẽ được đánh giá và nếu kết quả biểu thức khác 0 (non-zero), chương trình sẽ dừng thực thi.

Breakpoint có điều kiện đặc biệt hữu ích khi muốn chương trình dừng thực thi chỉ khi một tham số cụ thể được truyền vào một hàm API được gọi thường xuyên.

Breakpoint cứng

OllyDbg cũng cho phép đặt các breakpoint cứng thông qua một số thanh ghi cụ thể.

Ưu điểm của các breakpoint cứng là chúng không can thiệp vào code, stack hay bất kì tài nguyên nào của chương trình cần debug. Chúng cũng không làm chậm quá trình thực thi chương trình. Tuy nhiên, ta chỉ có thể đặt tối đa 4 breakpoint cứng tại cùng một thời điểm.

Để đặt breakpoint cứng tại một lệnh, click phải vào lệnh đó và chọn Breakpoint > Hardware, on Execution.

Mặc định, OllyDbg sẽ sử dụng các breakpoint mềm. Ta có thể thay đổi mặc định này trong tùy chọn Debugging Options. Dùng breakpoint cứng cũng

giúp qua mặt một số kỹ thuật anti-debugging, khi các breakpoint mềm dễ dàng bị các kỹ thuật này phát hiện.

Breakpoint trên bộ nhớ

OllyDbg hỗ trợ đặt breakpoint cứng hoặc breakpoint mềm trên một vùng nhớ (chunk of memory) để dừng thực thi khi chương trình truy cập tới vùng nhớ đó. Các dạng truy cập phổ biến có thể là read, write, execute,…

Để đặt một breakpoint bộ nhớ, chọn một vùng nhớ trong cửa sổ memory dump hoặc một section trong memory map, click phải và chọn Breakpoint > Memory, on Access. Ta chỉ có thể đặt một breakpoint bộ nhớ tại một thời điểm và breakpoint nhớ trước đó sẽ bị xóa khi ta đặt một breakpoint nhớ mới.

2. Các plugins trong Ollydbg

OllyDump là plugin phổ biến nhất, cho phép dump một tiến trình thành PE file. OllyDump cũng thường được dùng trong quá trình unpacking. Khi sử dụng OllyDump để dump một tiến trình, ta có thể đặt entry point và offset cho các section một cách thủ công; nhưng thường thì ta nên để OllyDump tự động thực hiện thao tác trên.

Hide Debugger

Plugin này thực hiện một số phương pháp giúp OllyDbg qua mặt các cơ chế phát hiện debugger. Hide Debugger đặc biệt hiệu quả đối với các hàm kiểm tra IsDebuggerPresent, FindWindow, các bẫy sử dụng ngoại lệ không được xử lý, và khai thác lỗ hổng OutputDebugString của OllyDbg

Có rất nhiều plugins hỗ trợ cho ollydbg phục vụ trong quá trình RE được nhanh gọn lẹ . Có thể tham khảo thêm tại địa chỉ :

http://www.openrce.org/downloads/browse/OllyDbg_Plugins

Nguồn:VSM-TEAM