You are on page 1of 10

BỘ CÔNG THƯƠNG

TRƯỜNG ĐẠI HỌC CÔNG THƯƠNG TP.HCM

KHOA CÔNG NGHỆ THÔNG TIN

-----o0o----

MÔN: PHÂN TÍCH VÀ XỬ LÝ MÃ ĐỘC

TP.HCM, tháng 04 năm 2024

BỘ CÔNG THƯƠNG

TRƯỜNG ĐẠI HỌC CÔNG THƯƠNG TP.HCM

KHOA CÔNG NGHỆ THÔNG TIN


MÔN: PHÂN TÍCH VÀ XỬ LÝ MÃ ĐỘC

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

Chương I : Giới thiệu về Ollydbg


• Lịch sử ra đời:
Được phát triển bởi Oleh Yuschuk. OllyDbg cung cấp khả năng phân tích phần
mềm độc hại khi nó đang chạy. OllyDbg là thường được các nhà phân tích phần
mềm độc hại và kỹ sư dịch ngược sử dụng vì nó miễn phí, dễ sử dụng và có nhiều
plug-in mở rộng khả năng của nó. OllyDbg đã tồn tại được hơn một thập kỷ và có
một lịch sử thú vị. Nó lần đầu tiên được sử dụng để bẻ khóa phần mềm, ngay cả
trước khi nó trở nên phổ biến để phân tích phần mềm độc hại. Đây là trình gỡ lỗi
chính được chuyên gia phân tích mã độc và các nhà phát triển khai thác lựa chọn,
cho đến khi cơ sở mã OllyDbg 1.1 được mua bởi Công ty Immunity security và đổi
tên thành Immunity Debugger (ImmDbg). Mục tiêu của Immunity là hướng công
cụ này tới các nhà phát triển khai thác và vá lỗi lỗi trong OllyDbg. ImmDbg cuối
cùng đã sửa đổi OllyDbg về mặt thẩm mỹ GUI và thêm trình thông dịch Python
đầy đủ chức năng với API, dẫn đến một số người dùng bắt đầu sử dụng ImmDbg
thay vì OllyDbg. Như vậy tức là OllyDbg 1.1 không hơn gì ImmDbg, các thao tác
cơ bản trên OllyDbg trong chương này cũng có thể áp dụng tương tự trên
ImmDbg, nhưng một số plug-in trên OllyDbg sẽ không thể sử dụng dễ dàng trên
ImmDbg. ImmDbg có ưu điểm riêng của nó, chẳng hạn hỗ trợ tốt các Python API.
• Chức năng:
• Loading Malware:
OllyDbg cho phép người dùng tải và gỡ lỗi các tệp malware để phân tích
và nghiên cứu. Người dùng có thể mở tệp tin nhị phân của malware
trong OllyDbg để xem mã máy và theo dõi quá trình thực thi.
• Opening an Executable (Mở một tệp tin thực thi):
OllyDbg cho phép người dùng mở một tệp tin thực thi
(executable) để nghiên cứu mã máy và tiến hành gỡ lỗi. Khi người
dùng mở một tệp tin thực thi trong OllyDbg, nó sẽ tải mã máy từ
tệp tin và hiển thị mã đó trong Disassembly View. Người dùng có
thể xem và theo dõi quá trình thực thi của chương trình, điều chỉnh
mã máy, đặt điểm ngắt và xem các vùng nhớ.
• Attaching to a Running Process (Gắn kết vào một quá trình
đang chạy):
OllyDbg cũng cho phép người dùng gắn kết (attach) vào một quá
trình đang chạy trên hệ thống. Điều này cho phép người dùng gỡ
lỗi một chương trình đang chạy mà không cần phải mở tệp tin thực
thi. Khi gắn kết vào một quá trình, OllyDbg sẽ tải mã máy và hiển
thị nó trong Disassembly View, tương tự như khi mở một tệp tin
thực thi. Người dùng có thể theo dõi và điều chỉnh quá trình thực
thi của chương trình, đặt điểm ngắt và xem các vùng nhớ.
• The OllyDbg Interface:

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.

Conditional Breakpoints (Điểm ngắt có điều kiện): Điểm ngắt có điều


kiện là một loại điểm ngắt mà việc dừng lại của chương trình chỉ xảy ra
khi một điều kiện nhất định được đáp ứng. Người dùng có thể đặt một
biểu thức hoặc điều kiện để kiểm tra tại một điểm ngắt có điều kiện. Khi
điều kiện được đáp ứng, chương trình sẽ tạm dừng thực thi và trình gỡ
lỗi sẽ tiếp tục kiểm tra và kiểm soát.

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)

• Hide Debugger: Plug-in Hide Debugger sử dụng 1 số phương


pháp để ẩn OllyDbg khỏi trình gỡ lỗi phát hiện. Nhiều chuyên gia
phân tích mã độc chạy plug-in này mọi lúc, đề phòng trường hợp
malware sử dụng tính năng anti-debugging(chống gỡ lỗi).
Nó đặc biệt bảo vệ chống lại các kiểm tra IsDebuggerPresent,
kiểm tra FindWindow, các thủ thuật ngoại lệ chưa dudwojx xử lý
và khai thác OutputDebugString đối với OllyDbg.
• Command line: Plug-in này cho phép bạn có quyền truy cập vào
command-line vào OllyDbg.

Các dòng lệnh:


• Bookmarks: Cho phép bạn thêm dấu trang của các vị trí bộ nhớ để
bạn có thể truy cập chúng dễ dàng trong tương lai mà không cần
phải nhớ địa chỉ.
• CmdBar trong OllyDbg là một thanh công cụ được sử dụng để
thực hiện các lệnh hoặc hành động nhanh chóng trong quá trình gỡ
lỗi và phân tích mã máy.
• Trong OllyDbg, Trace API là một tính năng cho phép người dùng
theo dõi các cuộc gọi hàm API trong quá trình thực thi của chương
trình.
• DiffSnake là một plugin mở rộng cho OllyDbg, được thiết kế để
hỗ trợ việc so sánh hai phần mã máy hoặc hai tập tin thực thi
(executable).
• Trong OllyDbg, "ollyExt" là một plugin mạnh mẽ được sử dụng
để mở rộng các tính năng và chức năng của OllyDbg. Plugin này
cung cấp một loạt các công cụ hữu ích để phân tích và thao tác với
mã máy.

• 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

TÀI LIỆU THAM KHẢO


[1] https://www.ollydbg.de/
[2] Practical Malware Analysis, Michael Sikorski and Andrew Honig, trang 179.
[3] https://machinelearningcoban.com/2017/04/09/smv/

[4] Daniele Ucci, Leonardo, Roberto Baldoni, "Survey of Machine Learning

Techiniques for Malware Analysis", Computer & Security (2018).

[5] William Stallings, "Network Security Essentials: Applications and

Standard Foutth Edition"

You might also like