Professional Documents
Culture Documents
-----o0o----
BỘ CÔNG THƯƠNG
MỤC LỤC
Chương I : Giới thiệu về Ollydbg................................................................................................................5
1. Lịch sử ra đời:..................................................................................................................................5
2. Chức năng:.......................................................................................................................................6
2.1 Loading Malware:......................................................................................................................6
2.1.1 Opening an Executable (Mở một tệp tin thực thi):.............................................................6
2.1.2 Attaching to a Running Process (Gắn kết vào một quá trình đang chạy):..........................6
2.2 The OllyDbg Interface:..............................................................................................................6
2.3 Memory Map:.............................................................................................................................7
2.3.1 Rebasing:...........................................................................................................................7
2.3.2 Base Address (Địa chỉ cơ sở):............................................................................................8
2.3.3 Absolute Addresses (Địa chỉ Tuyệt đối):............................................................................8
2.3.4 Relative Addresses (Địa chỉ Tương đối):...........................................................................8
2.3.5 Viewing Threads and Stacks:.............................................................................................8
2.4 Executing Code:.........................................................................................................................9
2.5 Breakpoints:...............................................................................................................................9
2.6 Loading DLLs:.........................................................................................................................10
2.7 Tracing:....................................................................................................................................11
2.7.1 Standard Back Trace:.......................................................................................................11
2.7.2 Call Stack :......................................................................................................................12
2.7.3 Run Trace(truy vết):.........................................................................................................12
2.7.4 Tracing Poison Ivy (Theo dõi Poison Ivy):......................................................................12
2.8 Exception Handling:.................................................................................................................12
2.9 Patching:...................................................................................................................................13
2.10 Analyzing Shellcode:...........................................................................................................13
2.11 Assistance Features:.............................................................................................................13
2.12 Plug-ins:...............................................................................................................................13
2.13 Scriptable Debugging:..........................................................................................................15
TÀI LIỆU THAM KHẢO.......................................................................................................................16
Giao diện của OllyDbg cung cấp các thành phần chính như Disassembly
View (xem mã máy), Memory Map (bản đồ bộ nhớ), Register View (xem
và chỉnh sửa thanh ghi), Call Stack (ngăn xếp cuộc gọi), Memory dump
window(dump bộ nhớ) và nhiều cửa sổ thông tin khác. Giao diện được
thiết kế để cung cấp các công cụ và thông tin quan trọng để phân tích và
gỡ lỗi chương trình.
Disassembly View(1): cửa sổ này hiển thị
chương trình đã được gỡ lỗi. Con trỏ lệnh hiện tại với một số lệnh trước và sau nó. Thông
thường, lệnh tiếp theo được thực thi sẽ đánh dấu trong cửa sổ này. Để sửa đổi lệnh hoặc
dữ liệu(hoặc thêm lệnh mới),hãy nhấn phím spacebar trong cửa sổ này.
Register View(2):Hiển thị trạng thái hiện tại của thanh ghi cho debugged program. Khi
mã được debugged, các thanh ghi sẽ đổi màu từ đen > đỏ sau khi lệnh được thực thi trước
đó đã sửa đổi thanh ghi. Giống như trong Disassembly View, bạn có thể sửa đổi dữ liệu
trong Register View khi chương trình được gỡ lỗi bằng chuột phải vào bất kỳ giá trị thanh
ghi nào và chọn Modify. Bạn có thể thấy hộp thoại Modify, như trong hình 9-3. Sau đó
bạn có thể sửa value
Stack window(3): Hiển thị trạng thái hiện tại của stack trong bộ nhớ cho luồng đang được
debug. Cửa sổ này sẽ luôn hiển thị phần trên cùng của stack cho chủ đề đã chọn. Bạn có
thể thao tác với stacks trong cửa sổ này bằng chuột phải vào vị trí của stacks và chọn
Modify.
Memory dump window(4): Cửa sổ này hiển thị kết xuất bộ nhớ trực tiếp cho quá trình
debug. Nhấn CTRL+G trong cửa sổ này và nhập vị trí bộ nhớ để kết xuất bất kỳ địa chỉ
bộ nhớ nào.Để chỉnh sửa bộ nhwos trong cửa sổ này, nhấp chuột phải vào nó và chọn
Binary > Edit. Điều này có thể được sử dụng để sửa đổi các biến toàn cục và dữ liệu
khác mà malware lưu trữ trong RAM.
• Memory Map:
OllyDbg cung cấp bản đồ bộ nhớ chi tiết của chương trình, cho phép
người dùng xem và điều chỉnh các vùng nhớ trong quá trình gỡ lỗi.
Người dùng có thể xem các vùng nhớ được phân bổ, các quyền truy cập,
và nội dung của bộ nhớ.
• Rebasing:
Rebasing là quá trình thay đổi địa chỉ cơ sở của một module để
tránh xung đột với các module khác. Trong OllyDbg, người dùng
có thể sử dụng tính năng rebasing để điều chỉnh địa chỉ cơ sở của
module và giải quyết các xung đột địa chỉ.
Memory Map giúp chúng ta hiểu cách tệp PE được rebase trong
quá trình thời gian chạy. Rebasing là điều xảy ra khi một modun
trong Windows không được loaded tại địa chỉ cơ sở được bổ
nhiệm của nó.
• Base Address (Địa chỉ cơ sở):
Mỗi module (tệp tin thực thi hoặc DLL) được tải vào bộ nhớ trong
quá trình chạy có một địa chỉ cơ sở (base address). Địa chỉ cơ sở là
địa chỉ bắt đầu của module trong không gian bộ nhớ.
• Absolute Addresses (Địa chỉ Tuyệt đối):
Địa chỉ Tuyệt đối là địa chỉ thực tế trong không gian bộ nhớ của
hệ thống. Nó biểu diễn một vị trí cụ thể trong bộ nhớ. Địa chỉ
tuyệt đối không phụ thuộc vào bất kỳ ngữ cảnh nào khác và luôn
giữ nguyên giá trị của nó.
• Relative Addresses (Địa chỉ Tương đối):
Địa chỉ Tương đối là một địa chỉ được biểu diễn dưới dạng khoảng
cách hoặc độ lệch so với một điểm tham chiếu. Địa chỉ tương đối
không biểu diễn một vị trí cụ thể trong không gian bộ nhớ, mà nó
chỉ định một vị trí tương đối so với một điểm tham chiếu. Địa chỉ
tương đối thường được sử dụng để tạo liên kết giữa các phần của
mã máy hoặc dữ liệu trong chương trình.
• Viewing Threads and Stacks:
OllyDbg cho phép người dùng xem và theo dõi các luồng
(threads) trong quá trình chạy của chương trình. Người dùng có
thể xem và theo dõi thông tin về các luồng, bao gồm thông tin về
thanh ghi, ngăn xếp cuộc gọi và các biến cục bộ của các hàm.
• Executing Code:
Olly
Dbg cho phép người dùng thực thi mã máy theo từng lệnh hoặc theo
từng khối mã. Điều này cho phép người dùng kiểm tra và thực hiện các
phần mã cụ thể trong quá trình gỡ lỗi.
• Run / Pause: khiến chương trình bắt đầu hoặc ngừng chạy.
Tuy nhiên Pause ít khi được sử dụng vì có thể khiến
chương trình tạm dừng ở một vị trí không hữu ích (chẳng
hạn như trên mã thư viện)
• Run to Selection: Thực thi cho đến ngay trước khi lệnh đã
chọn được thực thi. Nếu lệnh đã chọn không bao giờ được
thực thi thì chương trình sẽ chạy vô thời hạn.
• Execute till Return: sẽ tạm dừng thực thi ngay trước hàm
hiện tại được đặt thành return. Điều này hữu ích khi bạn
muốn chương trình tạm dừng ngay sau khi chức năng hiện
tại được thực thi xong. Tuy nhiên nếu chương trình không
bao giờ kết thúc thì chương trình sẽ chạy vô thời hạn.
• Execute till User Code: rất hữu tích cho việc phân tích
Malware khi bạn bị mất mã thư viện trong khi gỡ lỗi. Khi
bị tạm dừng trong mã thư viện, chọn Debug > Execute till
User Code để chương trình chạy cho đến khi quá trình thực
thi quay trở lại mã phần mềm độc hại đã biên dịch(thường
là văn bản) mà bạn đang debug.
• Step Into: Thực hiện một lệnh duy nhất rồi tạm dừng(Bất
kể đang thực thi loại lệnh nào).
• Step Over: Hãy
xem xét danh sách các hướng dẫn sau:
• Nếu bạn step over lệnh gọi, OllyDbg sẽ ngay lập tức
tạm dừng thực thi ở 010073a9 (lệnh xor ebx, ebx sau
khi gọi). Điều này rất hữu ích bởi vì bạn có thể không
muốn đi sâu vào chương trình con có tại 01007568.
• Mặc dù step over là đơn giản về mặt khái niệm,
nhưng về cơ bản, nó phức tạp hơn nhiều. OllyDbg đặt
điểm ngắt tại 010073a9, tiếp tục thực thi (như thể bạn
đã nhấn nút Run), và sau đó khi chương trình con
• cuối cùng thực hiện lệnh ret, nó sẽ tạm dừng ở
010073a9 do hidden breakpoint(điểm ngắt ẩn).
• Breakpoints:
OllyDbg hỗ trợ việc đặt các điểm ngắt (breakpoints) trong mã máy để
tạm dừng thực thi chương trình tại các vị trí quan trọng. Người dùng có
thể đặt điểm ngắt trên lệnh cụ thể, điểm ngắt trên điều kiện,
điểm ngắt trên ghi vào địa chỉ cụ thể, và nhiều loại khác.
Software Breakpoints (Điểm ngắt phần mềm): Điểm ngắt phần mềm là
một lệnh đặc biệt được chèn vào mã máy của chương trình để khiến
chương trình dừng lại tại một điểm nhất định. Khi chương trình gặp phải
điểm ngắt phần mềm, nó sẽ tạm dừng thực thi và chuyển quyền kiểm
soát về cho trình gỡ lỗi. Điểm ngắt phần mềm thường được sử dụng để
kiểm tra và thay đổi giá trị của các biến, theo dõi quá trình thực thi và gỡ
lỗi lỗi logic.
Hardware Breakpoints (Điểm ngắt phần cứng): Điểm ngắt phần cứng là
một loại điểm ngắt được hỗ trợ trực tiếp bởi phần cứng của máy tính.
Điểm ngắt phần cứng cho phép người dùng đặt điểm ngắt trên các địa
chỉ bộ nhớ cụ thể hoặc các sự kiện như đọc hoặc ghi dữ liệu. Điểm ngắt
phần cứng thường nhanh hơn và ít tốn tài nguyên hơn so với điểm ngắt
phần mềm, nhưng số lượng điểm ngắt phần cứng có thể hạn chế.
Memory Breakpoints (Điểm ngắt bộ nhớ): Điểm ngắt bộ nhớ là một loại
điểm ngắt được đặt trên một vùng nhớ cụ thể. Khi chương trình thực thi
đọc hoặc ghi vào vùng nhớ này, nó sẽ tạm dừng và chuyển quyền kiểm
soát về cho trình gỡ lỗi. Điểm ngắt bộ nhớ thường được sử dụng để theo
dõi và kiểm soát quá trình truy cập vào các vùng nhớ quan trọng và phát
hiện lỗi vượt quá ranh giới (buffer overflow) hoặc ghi đè dữ liệu không
hợp lệ.
• Loading DLLs:
OllyDbg cho phép người dùng tải các thư viện động (DLLs) để gỡ lỗi và
theo dõi các hàm được gọi từ các DLL này. Người dùng có thể xem
thông tin về các DLL được tải, các hàm được xuất và các tham số truyền
vào.
• Tracing:
OllyDbg cung cấp tính năng theo dõi (tracing) để ghi lại lịch sử thực thi
của chương trình. Người dùng có thể xem các lệnh đã được thực thi, các
thay đổi trong thanh ghi và các vùng nhớ, giúp phân tích và gỡ lỗi
chương trình.
• Standard Back Trace:
Bất cứ khi nào bạn di chuyển qua cửa sổ trình dịch ngược với
Step Into và Step Over options, OllyDbg sẽ ghi lại chuyển động
đó. Bạn có thể sử dụng phím trừ (-) trên bàn phím để quay
ngược thời gian và xem hướng dẫn bạn đã thực
hiện trước đó. Phím dấu cộng (+) sẽ đưa bạn về bước trước đó.
Nếu bạn đã sử dụng Step Into, bạn có thể theo dõi từng bước đã
thực hiện. Nếu bạn đã sử dụng Step Over, bạn chỉ có thể bước
vào những khu vực mà bạn đã bước qua trước đó; bạn không
thể quay lại và sau đó quyết định bước sang một khu vực khác.
• Call Stack :
Bạn có thể sử dụng OllyDbg để xem đường dẫn thực thi tới một
hàm nhất định thông qua call stack trace. Để xem Call stack,
chọn View > Call Stack trên thanh công cụ.
Bạn sẽ thấy cửa sổ hiện thị trình tự các Calls token đã thực
hiện để đến được vị trí hiện tại.
Để duyệt call stack, chọn vào phần Address hoặc Called từ cửa
sổ Call Stack. Các thanh ghi và stack(ngăn xếp) sẽ không hiển
thị những gì đang diễn ra khi ở vị trí hiện tại của bạn. Trừ khi
bạn thực hiện theo dõi lần chạy.
• Run Trace(truy vết):
Cho phép bạn thực thi mã và yêu cầu OllyDbg lưu mọi lệnh đã
thực hiện cũng như tất cả các thay đổi được thực hiện đối với
các thanh ghi và flags.
• Tracing Poison Ivy (Theo dõi Poison Ivy):
Poison Ivy là một phần mềm độc hại (malware) phổ biến được
sử dụng trong các cuộc tấn công mạng và xâm nhập hệ thống.
Khi nói về "Theo dõi Poison Ivy", có thể liên quan đến việc
theo dõi và phân tích hành vi và hoạt động của malware Poison
Ivy trong quá trình thực thi. Các công cụ và kỹ thuật theo dõi
được sử dụng để phân tích Poison Ivy và hiểu cách nó tấn công
và tương tác với hệ thống mục tiêu.
• Exception Handling:
OllyDbg hỗ trợ xử lý các ngoại lệ (exceptions) trong quá trình gỡ lỗi.
Người dùng có thể xem thông tin về ngoại lệ, vị trí xảy ra, và theo dõi
luồng xử lý ngoại lệ.
• SHIFT + F7: sẽ bước vào trường hợp ngoại lệ.
• SHIFT + F8: sẽ bước qua nó.
• SHIFT + F9: sẽ chạy xử lý ngoại lệ.
Các
tùy chọn xử lý ngoại lệ:
• Patching: OllyDbg cho phép người dùng chỉnh sửa mã máy trong quá
trình gỡ lỗi. Người dùng có thể thay đổi các lệnh, thêm mã mới, hoặc
xóa lệnh để thay đổi hành vi của chương trình.
• Analyzing Shellcode: OllyDbg hỗ trợ phân tích mã shellcode.
Shellcode là một đoạn mã máy nhỏ được viết để thực thi một chức năng
cụ thể trên hệ thống mục tiêu. OllyDbg có thể được sử dụng để phân tích
và gỡ lỗi shellcode. Người dùng có thể tải shellcode vào OllyDbg và
xem mã máy, điều chỉnh thực thi, xem các biến và thanh ghi, và theo dõi
luồng thực thi của shellcode.
• Assistance Features: OllyDbg cung cấp một số tính năng hỗ trợ để giúp
người dùng trong quá trình phân tích và gỡ lỗi. Điều này bao gồm việc
cung cấp thông tin định dạng file, xác định các hàm quan trọng, phân
tích đối số và tham số truyền vào hàm, và cung cấp gợi ý về các lỗi phổ
biến và mẹo hữu ích.
• Plug-ins: OllyDbg hỗ trợ các plug-in mở rộng để mở rộng chức năng
của nó. Các plug-in có thể cung cấp tính năng bổ sung như mở rộng định
dạng file, phân tích các cấu trúc dữ liệu, tạo báo cáo phân tích, và nhiều
tính năng khác.
• OllyDump: là plugin được sử dụng phổ biến vì nó cung cấp khả
năng kết xuất 1 quy trình đã được gỡ lỗi vào tệp PE. Nó cố gắng
đảo ngược quá trình mà trình tải đã thực hiện khi tải tệp thực thi;
tuy nhiên, nó sẽ sử dụng trạng thái hiện tại của các phần khác nhau
( mã, data,...) khi chúng tồn tại trong memory.(Plugin này thường
được sử dụng để giải nén)
• Scriptable Debugging: OllyDbg hỗ trợ việc gỡ lỗi bằng tệp lệnh có thể
kịch bản (scriptable debugging) bằng cách sử dụng các ngôn ngữ kịch
bản như Python hoặc Lua. Điều này cho phép người dùng tự động hóa
các nhiệm vụ gỡ lỗi, thực hiện các phân tích tự động và tạo các công cụ
tùy chỉnh.
Ví dụ: bằng python: đoạn mã đơn giản này có thể được sử dụng để ngăn
malware xóa tệp khỏi hệ thống. Được triển khai dưới dạng PyCommand