Tải bản đầy đủ

Các Kỹ Thuật Dịch Ngược Mã Nguồn (Reverse Engineering)

1

MỤC LỤC
LỜI CẢM ƠN.....................................................................................................................i
MỤC LỤC......................................................................................................................... ii
DANH SÁCH HÌNH VẼ...................................................................................................v
DANH SÁCH TỪ VIẾT TẮT........................................................................................viii
Chương 1:

GIỚI THIỆU...............................................................................................1

1.1

Giới thiệu..............................................................................................................1

1.2

Tính cấp thiết của đề tài........................................................................................1

1.3


Mục đích của đề tài...............................................................................................2

1.4

Cấu trúc đồ án.......................................................................................................2

Chương 2:

TỔNG QUAN DỊCH NGƯỢC MÃ NGUỒN............................................3

2.1

Khái niệm dịch ngược mã nguồn..........................................................................3

2.2

Dịch ngược mã nguồn trong phát triền phần mềm................................................3

2.3

Ứng dụng của dịch ngược mã nguồn....................................................................4

2.3.1

Security-related Reversing.............................................................................4

2.3.2

Malicious Software........................................................................................4

2.3.3

Reversing Cryptographic Algorithms.............................................................5

2.3.4

Quản lý bản quyền kỹ thuật số.......................................................................6

2.3.5


Auditing Program Binaries.............................................................................7

2.4

Dịch ngược trong phát triển phần mềm.................................................................7

2.4.1

Đạt được khả năng tương tác với phần mềm được sở hữu.............................8

2.4.2

Phát triển phần mềm cạnh tranh.....................................................................8


2
2.4.3
2.5

Đánh giá chất lượng phần mềm......................................................................9

Công cụ dịch ngược mã nguồn.............................................................................9

2.5.1

IDA PRO......................................................................................................11

2.5.2

OllyDBG......................................................................................................18

Chương 3:

THE WINDOWS KERNEL, X86.............................................................26

3.1

X86..................................................................................................................... 26

3.1.1

Bộ đăng ký và các loại dữ liệu.....................................................................26

3.1.2

Bộ chỉ dẫn....................................................................................................28

3.1.3

Cơ chế hệ thống...........................................................................................35

3.2

The Windows Kernel..........................................................................................39

3.2.1

Các nguyên tắc cơ bản của Windows...........................................................40

3.2.2

Không đồng bộ và Ad-Hoc...........................................................................46

Chương 4:

KẾT QUẢ THỰC NGHIỆM....................................................................56

4.1

Sử dụng IDA để khai thác mật khẩu ứng dụng...................................................57

4.1.1

Mô tả bài toán..............................................................................................57

4.1.2

Các bước thực hiện......................................................................................57

4.2

Sử dụng OllyDBG để khai thác mật khẩu ứng dụng...........................................64

4.2.1

Mô tả bài toán..............................................................................................64

4.2.2

Các bước thực hiện......................................................................................64

Chương 5:

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN.................................................82

5.1

Kết luận..............................................................................................................82

5.2

Hướng phát triển.................................................................................................82

Tài liệu tham khảo............................................................................................................83


3

DANH SÁCH HÌNH VẼ
Hình 2.1. Menu khởi động IDA.......................................................................................13
Hình 2.2. Các tùy chỉnh để load tệp vào IDA...................................................................15
Hình 2.3. Các tùy chỉnh của IDA.....................................................................................17
Hình 2.4. Giao diện chính của IDA..................................................................................18
Hình 2.5. Giao diện chính của OllyDBG..........................................................................19
Hình 2.6. Giao diện khi mở file........................................................................................20
Hình 2.7. Giao diện Register của OllyDBG.....................................................................21
Hình 2.8. Tính năng của một số cửa sổ............................................................................22
Hình 2.9. Cửa sổ Logdata của OllyDBG..........................................................................22
Hình 2.10. Tính năng ghi ra file của cửa sổ Log..............................................................23
Hình 2.11. Cửa số Executables của OllyDBG..................................................................23
Hình 2.12. Cửa sổ Memory map của OllyDBG...............................................................24
Hình 2.13. Cửa sổ Threads của OllyDBG........................................................................24
Hình 2.14. Cửa sổ Call stack của OllyDBG.....................................................................25
Hình 2.15. Cửa sổ của Breakpoint của OllyDBG.............................................................25
Hình 3.1. Bộ đăng ký của các thanh ghi...........................................................................26
Hình 3.2. Địa chỉ ảo 0×BF80EE6B..................................................................................36
Hình 3.3. Bố cục tổng thể về X86 và X64........................................................................41
Hình 3.4. Minh họa những cấu trúc dữ liệu trên x86........................................................44
Hình 3.5. Minh họa giữa hai cấu trúc trong một IRP.......................................................54


4
Hình 4.1. Chạy ứng dụng với trình Cmd..........................................................................57
Hình 4.2. Load file vào IDA............................................................................................58
Hình 4.3. Màn hình chính khi mới load file vào...............................................................59
Hình 4.4. Tab Strings Windows của ứng dụng.................................................................60
Hình 4.5. Hàm sub_401276 của ứng dụng.......................................................................61
Hình 4.6. Quá trình chuyển sang chuỗi của các ký tự......................................................62
Hình 4.7. Các ký tự đã được chuyển sang dạng ký tự......................................................63
Hình 4.8. Chạy lại chương trình khi biết mật khẩu...........................................................64
Hình 4.9. Khởi động ứng dụng nhập Name và Serial.......................................................65
Hình 4.10. Thông báo không thành công.........................................................................65
Hình 4.11. Load ứng dụng vào OllyDBG.........................................................................66
Hình 4.12. Danh sách các hàm API của chương trình......................................................66
Hình 4.13. Đi đến hàm MessageBoxA của chương trình.................................................67
Hình 4.14. Đặt BP tại hàm MessageBoxA của chương trình............................................68
Hình 4.15. Cửa sổ Stack của ứng dụng............................................................................68
Hình 4.16. Đi đến hàm thông báo của ứng dụng..............................................................69
Hình 4.17. Hàm thông báo của ứng dụng.........................................................................69
Hình 4.18. Thông báo không thành công của ứng dụng...................................................70
Hình 4.19. Cửa sổ Stack của ứng dụng............................................................................70
Hình 4.20. Đi đến hàm thông báo của chương trình.........................................................71
Hình 4.21. Hàm thông báo No luck của chương trình......................................................71
Hình 4.22. Hàm thông báo Good work và No luck của chương trình..............................72
Hình 4.23. Đi đến thanh ghi 0x00401245........................................................................72


5
Hình 4.24. Chạy chương trình nhập Name và Serial........................................................73
Hình 4.25. Cửa sổ Register của ứng dụng........................................................................74
Hình 4.26. Thông báo sau khi chạy lại chương trình........................................................74
Hình 4.27. Chạy lại chương trình nhập Name và Serial...................................................75
Hình 4.28. Thông báo sau khi nhập Name và Serial sai...................................................75
Hình 4.29. Đặt BP tại địa chỉ 0x00401243.......................................................................75
Hình 4.30. Đi đến hàm so sánh khi nhập sai Name và Serial...........................................76
Hình 4.31. Hàm kiểm tra Name và Serial.........................................................................76
Hình 4.32. Đặt BP tại lệnh nhảy 0x0040138B..................................................................77
Hình 4.33. Chạy chương trình nhập Name và Serial........................................................77
Hình 4.34. Vị trí sau BP sau khi chạy chương trình.........................................................78
Hình 4.35. Cửa sổ Register sau khi chạy chương trình....................................................78
Hình 4.36. Thay đổi cờ C trong cửa sổ Register...............................................................78
Hình 4.37. Quay lại đoạn kiểm tra mật khẩu....................................................................79
Hình 4.38. Thay đổi cờ Z trong cửa sổ Register...............................................................79
Hình 4.39. Thông báo sau khi thay đổi cờ trong cửa sổ Register.....................................79
Hình 4.40. Hàm kiểm tra Name trong chương trình.........................................................80
Hình 4.41. Sửa lệnh trong thanh ghi 0x0040138B...........................................................80
Hình 4.42. Sau khi sửa lệnh sang lệnh NOP.....................................................................80
Hình 4.43. Hàm kiểm tra Serial........................................................................................80
Hình 4.44. Sửa lệnh tại thanh ghi 0x00401243................................................................81
Hình 4.45. Nhập Name và Serial tùy ý.............................................................................81
Hình 4.46. Thông báo sau khi nhập Name và Serial........................................................81


6

DANH SÁCH TỪ VIẾT TẮT

Từ viết tắt

Nghĩa tiếng Anh

Nghĩa tiếng Việt

API

Application Program Interfaces

Giao diện chương trình ứng dụng

APCs

Asynchronous procedure calls

Các cuộc gọi không đồng bộ

COBOL

Common Business Oriented Language

Ngôn ngữ lập trình đầu tiên

DRM

Digital Rights Management

Quản lý bản quyền kỹ thuật số

DPCs

Deferred procedure calls

Các cuộc gọi trì hoãn

GPRs

General-purpose registers

Sổ đăng ký chung

IDTs

Interrupt descriptor tables

Bảng mô tả ngắt

IRQT

Interrupt request level

Mức yêu cầu gián đoạn

IRPs

I/O request packets

Các gói yêu cầu input, outpuy

MASM

Macro Assembler

Ngôn ngữ lập trình bậc thấy

MSRs

Model-specific registers

Sổ đăng ký cụ thể

Opcode

Operation Code

Chỉ thị lệnh trong hợp ngữ

PCR

Processor control region

Vùng kiểm soát bộ vi xử lý

Windows PE Windows Portable Executable

Định dạng file thực thi


1

Chương 1:

GIỚI THIỆU

1.1 Giới thiệu
Kể từ khi máy tính ra đời, nó đã làm thay đổi từng ngày, từng giờ cuộc sống của
chúng ta. Ngày nay, các hệ thống máy tính có mặt trên mọi ngành, mọi gia đình, mọi
quốc gia và giữ một vai trò vô cùng quan trọng.
Để đáp ứng nhu cầu ngày càng cao về khoa học máy tính và công nghệ thông tin,
ngày càng nhiều phần mềm, chương trình... cả có hại và có lợi cho người sử dụng vi tính.
Để tìm hiểu rõ và kiểm soát chúng, chúng ta cẩn phải tìm hiểu bản chất phần mềm,
chương trình cho máy tính của chúng ta để kịp nâng cấp, chỉnh sửa chúng hay kiểm soát
ảnh hưởng của chúng, hạn chế tác động có hại với hệ thống của ta. Với đa số các chương
trình phần mềm hiện nay chúng ta đều không có mã nguồn nên công việc trên thực sự rất
khó, từ đó kỹ thuật dịch ngược ra đời, trợ giúp rất mạnh mẽ trong việc giải quyết các vấn
đề trên.

1.2 Tính cấp thiết của đề tài
Phần mềm ngày nay đã trở nên phức tạp và kết nối với nhau mà các nhà phát triển
thường không biết tất cả các tính năng và hậu quả của những gì đã được tạo ra trong một
ứng dụng. Thông thường quá tốn kém và tốn rất nhiều thời gian cho việc kiểm soát một
chương tình và kiểm tra tất cả các tùy chọn của nó.
Hầu hết người sử dụng ứng dụng hiện nay không biết ứng dụng có được an toàn hay
không, mã độc được chứa trong phần mềm rất là nguy hiểm cho người sử dụng. Tình
trạng Crack phần mềm, vượt qua bản quyền hiện nay diễn ra rất phổ biến.
Kỹ thuật dịch ngược mã nguồn là một bộ các kỹ thuật và công cụ quan trọng để
hiểu được phần mềm thực sự là gì. Nó là quá trình phân tích một hệ thống để xác định
các thành phần của hệ thống các mối quan hệ tương tác với nhau mà nó tạo ra. Điều này
cho chúng ta hình dung được cấu trúc phần mềm, cách thức hoạt động của nó, và các tính
năng điều khiển hành vi của nó. Các công cụ tự động để kiểm tra phần mềm cho chúng ta


2
một cách hợp lý để hiểu được sự phức tạp của phần mềm và để khám phá bên trong của
nó.
Kỹ thuật dịch ngược mã nguồn giúp cho các nhà phát triển xem lại mã nguồn của
mình và phát hiện ra những lỗ hổng và những lỗi cơ bản sau khi phát hành ứng dụng.

1.3 Mục đích của đề tài
-

Hiểu được các tính năng, ứng dụng, và lợi ích của việc dịch ngược mã nguồn.
Hiểu được cách sử dụng cơ bản của hai công cụ dịch ngược phần mềm phổ biến là

-

IDA và OllyDBG.
Hiểu được các cơ chế hoạt động của Windows Kernel và X86 của Windows.
Sử dụng công cụ IDA và OllyDBG để dịch ngược phần mềm, và tìm hiểu các ứng
dụng cơ bản.

1.4 Cấu trúc đồ án
Cấu trúc của đồ án bao gồm 5 Chương:
-

Chương 1: Giới thiệu
Chương này sẽ giới thiệu về dịch ngược mã nguồn, tính cấp thiết của đề tài.

-

Chương 2: Tổng quan dịch ngược mã nguồn
Giới thiệu dịch ngược mã nguồn là gì, các ứng dụng của dịch ngược mã
nguồn, ứng dụng của của dịch ngược mã nguồn trong phát triển phần mềm, giới
thiệu các công cụ trong dịch ngược mã nguồn.

-

Chương 3:The Windows Kernel, X86
Giới thiệu về Windows Kernel, X86 của Windows. Các cơ chế hoạt động,
tính năng và các nguyên tắc của nền tản X86 và Windows Kernel.

-

Chương 4: Kết quả thực nghiệm
Sử dụng hai công cụ IDA và OllyDBG để tìm mật khẩu của ứng dụng,
thực hiện các bước làm.

-

Chương 5: Kết luận và hướng phát triển

Chương này nêu lên ưu điểm và nhược điểm của luận văn, hướng phát triển
của đề tài.


3

Chương 2:

TỔNG QUAN DỊCH NGƯỢC MÃ NGUỒN

2.1 Khái niệm dịch ngược mã nguồn
Dịch ngược mã nguồn phần mềm là thực hành phân tích một phần mềm hệ thống,
toàn bộ hoặc một phần chương biên dịch sang mã nguồn và phân tích kết quả. Kỹ thuật
dịch ngược mã nguồn liên quan đến việc dịch ngược của một chương trình sang mã máy
(chuỗi các số 0 và số 1 được gửi tới các bộ vi xử lý logic).
Kỹ thuật dịch ngược mã nguồn được thực hiện để lấy mã nguồn của chương trình
bởi vì mã nguồn đã bị mất, để nghiên cứu cách chương trình thực hiện một số hoạt động,
để cải thiện hiệu suất của một chương trình, để sửa chữa mỗi lỗi (sửa một lỗi trong
chương trình khi mã nguồn không có sẵn). Để xác định nội dung độc hại trong một
chương trình như một virus hoặc để thích ứng với một chương trình được viết để sử dụng
với một bộ vi xử lý để sử dụng khác nhau.
Nó rất là hữu ích, nếu không biết bên trong một chường trình để rất khó xây dựng
lên nó, tạo ra phần mềm có thể tương tác tốt với nó, hoặc đơn giản là tạo ra một phần
mềm tương tự cho riêng bạn.
Có người làm kỹ thuật dịch ngược trên phần mềm có thể sử dụng một số công cụ để
dịch ngược phần mềm sang hợp ngữ.

2.2 Dịch ngược mã nguồn trong phát triền phần mềm
Trong khi rất nhiều phần mềm đã được viết không còn sử dụng, một số lượng đáng
kể đã tồn tại trong nhiều thập kỷ và tiếp tục chạy theo nền kinh tế toàn cầu. Thực tế của
tình hình là 70% của mã nguồn trong toàn bộ thế giới được viết bằng COBOL. Một sẽ
khó ép những ngày này để có một nền giáo dục chuyên gia ngôn ngữ lập trình di sản như
BOBOL, PL/I, và FORTRAN. Thêm vào là một thực tế rằng rất nhiều ngôn ngữ di sản
được thiết kế kém đi và tài liệu nói rằng “ chương trình COBOL đang được sử dụng trên
toàn cầu trong chính phủ và quân sự cơ quan, trong các doanh nghiệp thương mại, và các
hiệu điều hành như Z/ OS của IBM và Microsoft Windows, và hệ điều hành của POSIX
(Unix/ Linux, vv). Trong năm 1997, nhóm Gartner báo cáo rằng 80% doanh nghiệp trên


4
thế giới chạy trên COBOL với hơn 200 tỷ dòng mã trong sự tồn tại và ước tính khoảng 5
tỷ dòng mã mới hàng năm.

2.3 Ứng dụng của dịch ngược mã nguồn
Ứng dụng nổi tiếng nhất của kỹ thuật dịch ngược mã nguồn là làm cho sản phẩm
của mình phát triển cạnh tranh. Và thực sự nó cũng không được nhiều người mong chờ
trong ngành công nghiệp phần mềm. Có nhiều lý do cho điều này, nhưng dịch ngược
phần mềm mục đích cạnh tranh được cho là một quá trình rất phức tạp không chỉ về mặt
tài chính. Vì vậy, các ứng dụng phổ biến của dịch ngược phần mềm trong phần mềm là gì
trong thế giới. Nói chung, có hai loại kỹ thuật dịch ngược phần mềm: bảo mật và phát
triển phần mềm. Dưới đây sẽ trình bày các ứng dụng trong hai loại.
2.3.1 Security-related Reversing
Đối với một số người kết hợp giữa bảo mật và dịch ngược có thể không được ngay
lập tức hiểu rõ vấn đề. Dịch ngược liên quan đến các khía cạnh khác nhau của bảo mật
máy tính. Ví dụ, dịch ngược đã được sử dụng trong mã hóa và nhà nghiên cứu đã dịch
ngược một sản phẩm và đánh giá mức độ an toàn của nó. Dịch ngược cũng được sử dụng
trong nhiều trong việc tìm hiểu các phần mềm độc hại, nó được sử dụng bởi những nhà
phát triển phần mềm độc hại và những người phân tích và tìm ra cách chống những phần
mềm độc hại. Cuối cùng, dịch ngược nó còn phổ biến đối với các Cracker, những người
sử dụng nó để phân tích phần mềm và cuối cùng tìm ra những cách sử dụng phần mềm
mà không cần tới bản quyền.
2.3.2 Malicious Software
Internet đã thay đổi hoàn toàn ngành công nghiệp máy tính nói chung và khía cạnh
liên quan đến an toàn máy tính nói chung và vấn đề an ninh đã trở nên rất cấp thiết. Phần
mềm độc hại, như Virus và Malware, lây lan đi với một tốc độ chóng mặt trên thế giới
với hàng triệu người dùng kết nối Internet và sử dụng E-mail bị nhiễm. Cách đây 10 năm
trước, Virus có thể tự sao chính bản thân nó vào một ổ đĩa và ổ đĩa đó có thể được nạp
vào máy tính khác với mục đích lây nhiễm Virus. Quá trình lây nhiễm lúc đó khá là
chậm, và các biện pháp phòng chống không có gì quá khó khăn bởi vì diện lây lan hẹp và


5
yêu cầu sự can thiệp từ phía con người mới có thể lây nhiễm. Nhưng tất cả chỉ là quá khứ
- Internet đã tạo một kết nối ảo giữa hầu hết các máy tính trên trái đất. Ngày nay nhiễm
nhiều malware “ đời mới“ có thể lây lan tự động đến hàng triệu máy tính mà không cần
bất cứ sự can thiệp nào của con người.
Dịch ngược mã nguồn được mở rộng sử dụng cho cả hai đầu chuỗi của malicious
software. Những người phát triển thường sử dụng dịch ngược mã nguồn để xác định vị trí
của lỗ hổng trong các lớp bảo vệ và cho phép sự lây nhiễm. Ngoài việc lây nhiễm, thủ
phạm thỉnh thoảng còn sử dụng các kĩ thuật dịch ngược mã nguồn để xác định vị trí các
lỗ hổng phần mềm mà cho phép một malicous program có quyền được truy nhập tới các
thông tin nhạy cảm và chiếm được quyền điều khiển hệ thống.
Tại phía bên kia tuyến, các nhà phát triển phần mềm antivirus mổ xẻ và phân tích
mọi malicious program rơi vào tay họ. Họ sử dụng các kĩ thuật dịch ngược để lần theo
dấu vệt một chương trình để lại là đánh giá mối đe dọa nó có thể tạo ra, tỉ lệ lây nhiễm,
làm thế nào để loại bỏ chúng khỏi hệ thống bị lây nhiễm, sự lây nhiễm đó có thể tránh
được hoàn toàn hay không.
2.3.3 Reversing Cryptographic Algorithms
Cryptography thường xuyên dựa trên tính bí mật: Alice gửi một tin nhắn cho Bob,
và mã hóa tin nhắn sử dụng một key bít mật mà chỉ được biết bởi cô ấy là Bob.
Crytography algorithms được chia làm 2 nhóm: restricted algorithms và key-based
algorilms. Restricted algorithms là kiểu dành cho tụi trẻ con: viết một lá thư cho một
người bạn với mỗi chữ được dịch đi lên hoặc đi xuống. Sự bí mật trong restriced
algorithms là ở chính giải thuật này. Mỗi khi giải thuật bị lộ ra, sẽ không còn bảo mật
nữa. Restriced algorithms đáp ứng tính an toàn không cao bởi vì dịch ngược có thể làm
cho nó rất khó khăn để duy trì tính bảo mật của giải thuật. Bởi vì giải thuật là bí mật, dịch
ngược mã nguồn có thể được xem như là một cách bẻ gãy giải thuật.
Mặt khác, trong key-based algorithms, bí mật là một cái chìa khóa, một vài giá trị số
được sử dụng giải thuật để mã hóa và giải mã thông điệp. Trong key-based algorithms,
người dùng mã hóa các thông điệp sử dụng khóa được giữ riêng tư. Các giải thuật thường
xuyên được tạo công khai, và khóa được giữ riêng tư (và thỉnh thoảng bị tiết lộ đến


6
những người nhận không hợp lệ, phụ thuộc vào giải thuật). Điều đó làm reversing trở nên
vô nghĩa bởi giải thuật đã được biết rồi. Để giải mã một thông điệp với dạng mã hóa này,
bạn phải làm những bước sau:
 Lấy được khóa.
 Thử tất cả những sự kết hợp có thể cho tới khi bạn có được khóa.
 Tìm kiếm một lỗi trong giải thuật mà có thể được sử dụng để lấy được key hay
một thông điệp nguyên thủy.
Tuy vậy, vẫn có các trường hợp có thể ứng dụng dịch ngược để dịch ngược các
triển khai mang tính riêng tư của mã hóa dựa trên khóa. Thậm chí khi giải thuật mã hóa là
nổi tiếng, các chi tiết triển khai thường có tác động không như mong đợi đối với toàn
cảnh mức độ an toàn chung cung cấp bởi một chương trình. Các giải thuật mã hóa là tinh
vi, các lỗi triển khai phụ có thể thỉnh thoảng làm mất hiệu lực hoàn toàn mức độ bảo mật
được cung cấp bởi các giải thuật như vậy. Cách duy nhất để biết bằng một sản phẩm bảo
mật có triển khai thuật mã hóa thực sự bảo mật là đọc mã nguồn của nó hoặc dịch ngược
nó.
2.3.4 Quản lý bản quyền kỹ thuật số
Máy tính hiện đại đã biến hầu hết các loại hình nghệ thuật đề có quản quyền kỹ
thuật số. Âm nhạc, phim, và thậm chí cả sách, đó là lần duy nhất nó có sẵn trên các
phương tiện, hiện nay nếu có bản quyền kỹ thuật số. Xu hướng này là một trong những
tiện ích tuyệt vời, cung cấp các lợi ích to lớn cho người tiêu dùng, và các biến chứng rất
lớn để chủ sở hữu bản quyền tác giả và các nhà cung cấp nội dung. Đối với người tiêu
dùng, nó có nghĩa rằng sản phẩm đã tăng lên về mặt chất lượng, và trở nên dễ dàng tiếp
cận và đơn giản trong việc quản lý. Đối với nhà cung cấp, nó đã cho phép việc phân phối
các sản phẩm có nội dung chất lượng cao với chi phí thấp, nhưng quan trọng hơn việc
kiểm soát bản quyền là một nhiệm vụ rất khó.
Bản quyền kỹ thuật số là cực kỳ dễ bị sao chép. Nó rất dễ bị sao chép sang nhiều
bản khác. Những sản phẩm một khi có bản quyền đến tay người tiêu dùng họ có thể được
sao chép quá dễ dàng là vi phạm bản quyền gần như thực tế và rất phổ biến. Theo truyền


7
thống thì phần mềm đã được công ty xử lý bản quyền của các công nghệ bằng cách
nhúng chúng trực tiếp vào phần mềm của họ. Đây là những phần được gắn vào các sản
phẩm phần mềm của nhà cung cấp để cố gắng ngăn chặn hoặc hạn chế người dùng sao
chép chương trình.
Trong những năm gần đây, khi phương tiện truyền thông kỹ thuật số đã trở thành
vấn đề quan trọng, các nhà cung cấp các nội dung truyền thông có công nghệ phát triển
hay mắc phải việc kiểm soát là phân phát các nội dung như nhạc, phim ảnh … Những
công nghệ này được gọi chung là Digital Rights Management (DRM). Công nghệ DRM
có khái niệm rất giống với các công nghệ bảo vệ bản quyền phần mềm truyền thống được
nêu lên ở trên. Sự khác biệt với phần mềm là phần mềm được bảo vệ kích hoạt thông
minh, và có thể quyết định nó có sẵn sàng được sử dụng hay không. Phương tiện truyền
thông kỹ thuật số là một trong những yếu tố thụ động nó thường được phát hoặc được
đọc bằng một chương trình khác, làm cho nó khó khăn hơn trong việc hạn chế sử dụng.
2.3.5 Auditing Program Binaries
Một trong những thế mạnh của mã nguồn mở là nó thường là đáng tin cậy và an
toàn. Bất kể giải pháp bảo mật không thực sự an toàn, nó chỉ cảm thấy an toàn hơn nhiều
khi nó thường xuyên được dùng để chạy thường được kiểm tra và được nhiều kỹ sư phần
mềm cao cấp phê duyệt. Không cần phải nói, mã nguồn mở nó cũng cung cấp một số lợi
ích chất lượng thực sự, với phần mềm mã nguồn mở, việc truy cập mã nguồn của chương
trình có nghĩa là một số lỗ hổng bảo mật có thể được phát hiện rất sớm, thường là trước
khi các phần mềm độc hại có thể tận dụng được lỗ hổng của họ. Với những phần mềm
độc quyền và mà nguồn không có sẵn, việc dịch ngược trở thành một giải pháp thay thế
để tìm kiếm các lỗ hổng bảo mật. Tất nhiên, kỹ thuật dịch ngược không có thể làm cho
phần mềm độc quyền gần truy cập và đọc mã nguồn gần như được trên phần mềm mã
nguồn mở, những kỹ thuật dịch ngược mạnh sẽ cho phép người ta xem và đánh giá được
các rủi ro bảo mật khác nhau của phần mềm


8

2.4 Dịch ngược trong phát triển phần mềm.
Dịch ngược nó vô cùng hữu ích cho các nhà phát triển phần mềm. Ví dụ, các nhà
phát triển phần mềm có thể sử dụng các kỹ thuật dịch ngược để tìm hiểu cách tương tác
với phần mềm khi không có tài liệu hay chỉ có một phần tài liệu về phần mềm. Trong các
trường hợp khác, dịch ngược có thể sử dụng để xác định chất lượng sản phẩm của bên
thứ ba, chẳng hạn như thư viện mã nguồn hoặc thậm chí là một hệ điều hành. Cuối cùng,
đôi khi có thể sử dụng các kỹ thuật dịch ngược để trích xuất thông tin có giá trị từ sản
phẩm của đối thủ cạnh tranh với mục đích cải tiến công nghệ của riêng bạn.
2.4.1 Đạt được khả năng tương tác với phần mềm được sở hữu
Khả năng tương tác là nơi mà hầu hết các kỹ sư phần mềm có thể được hưởng lợi
từ việc dịch ngược phần mềm. Khi làm việc với một thư viện phần mềm độc quyền hay
hệ điều hành của hệ thống API, tài liệu là hầu như không đủ. Bất kể có bao nhiêu rắc rối
của nhà cung cấp thư viện đã đảm bảo rằng tất cả các trường hợp đã được lưu lại trong tài
liệu, nhưng người dùng hầu như luôn thấy không thể nào đáp ứng được những câu hỏi mà
chưa được trả lời. Hầu hết các lập trình viên sẽ liên tục và tiếp tục cố gắng bằng cách nào
đó có được mọi câu trả lời để làm việc, hoặc có thể liên hệ với nhà cung cấp sẽ giải đáp
cho câu hỏi của mình. Mặt khác, những người có kỹ năng dịch ngược thường sẽ tìm thấy
nó khá dễ dàng đối với những tình huống như vậy. Sử dụng phương pháp dịch ngược có
thể sẽ giải quyết những vấn đề này trong thời gian rất ít và sẽ không cần nhiều nỗ lực
trong vấn đề này.
2.4.2 Phát triển phần mềm cạnh tranh.
Như đã để cập phía trên đây là ứng dụng phổ biến nhất của dịch ngược mã nguồn.
Phần mềm thường rất phức tạp và vì vậy dịch ngược toàn bộ sản phẩm phầm mềm để tạo
ra một sản phẩm cạnh tranh không tạo ra bất cứ ý nghĩa nào cả. Thường là dễ dàng hơn
để thiết kế và phát triển một sản phẩm từ đầu. Trong công nghiệp phần mềm, thậm chí
nếu một đối thủ cạnh tranh có một công nghệ không có bằng sáng chế, nó không có ý
nghĩa gì để dịch ngược toàn bộ sản phẩm của họ. Thường xuyên dễ dàng để phát triển
độc lập các phần mềm của chính bạn. Ngoại lệ là các thiết kế hay giải thuật phức tạp và


9
độc nhất gây khó khăn cho việc phát triển. Trong các trường hợp như vậy, hầu hết ứng
dụng vẫn có thể được phát triển độc lập, nhưng các thành phần có sự phức tạp cao có thể
được dự trữ và triển khai lại trong sản phẩm mới.
2.4.3 Đánh giá chất lượng phần mềm
Reversing không chỉ có thể kiểm tra một thư viện chương trình để đánh giá tính
bảo mật và lỗ hổng của nó mà còn có thể thử và lấy mẫu một thư viện chương trình để có
được một ước lượng về chất lượng chung về code sử dụng trong chương trình. Nhu cầu
tương tự như: một chương trình mã nguồn mở là một cuốn sách mở cho phép độc giả của
nó đánh giá chất lượng của nó trước khi mua nó. Các hãng phần mềm không công khai
mã nguồn trong phần mềm của họ chủ yếu là yêu cầu khách hàng của họ "chỉ tin vào họ".
Nhu cầu dành cho việc "chạm" vào được mã nguồn để khóa các sản phẩm phần
mềm ví dụ như các hệ điều hành được tạo ra từ các tổ chức lớn; một vài năm trước khi
Microsoft có một số lượng lớn khách hàng mua hơn 1000 chỗ có thể có được truy nhập
đến mã nguồn Windows cho các mục đích thẩm định. Nhiều người sau đó thiếu khả năng
mua đã thuyết phục một tổ chức chính để cấp cho họ quyền truy nhập đến mã nguồn của
sản phẩm hoặc là lấy những phát ngôn của công ty rằng sản phẩm được xây dựng tốt
hoặc là trông cậy vào dịch ngược. Lại một lần nữa, dịch ngược có thể không làm lộ ra
nhiều thông tin về chất lượng code của sản phẩm và tính tin cậy như khi ta trực tiếp nhìn
vào mã nguồn, nhưng nó có thể là các thông tin có chất lượng. Không có một kỹ năng
đặc biệt nào được yêu cầu ở đây. Miễn là bạn cảm thấy thoải mái với dịch ngược mã
nguồn bạn có thể làm việc với thư viện code, bạn có thể sử dụng khả năng đó để thử và
đánh giá chất lượng sản phẩm.

2.5 Công cụ dịch ngược mã nguồn
Không thể dịch ngược nếu không có công cụ phù hợp. Có hàng trăm công cụ phần
mềm khác nhau hiện có thể sử dụng để dịch ngược, một số phần mềm miễn phí và một số
khác có chi phí rất cao.


10
Chúng ta sẽ xem xét các loại công cụ khác nhau, bắt đầu bằng các công cụ dịch
ngược cơ bản như dịch sang hợp ngữ và debuggers ở mức thấp nhất, và tiến hành các
trình biên dịch và công cụ giám sát hệ thống. Cuối cùng chúng ta sẽ thảo luận một số
công cụ vá lỗi và thực thi có thể hữu ích trong quá trình dịch ngược.
Có rất nhiều cách tiếp cận khác nhau để dịch ngược và lựa chọn đúng cách tùy
thuộc vào chương trình mục tiêu, nền tản mà có chạy và nó đã được phát triển, và loại
thông tin bạn muốn lấy ra. Nói chung, có hai phương pháp dịch ngược cơ bản: phân tích
ngoại tuyến và phân tích trực tiếp.
Phân tích mã ngoại tuyến: Có nghĩa là bạn thực hiện một tệp được thực thi sang
nhị phân và sử dụng trình biên dịch hoặc trình dịch ngược để chuyển đổi nó thành dạng
người có thể đọc được. Việc dịch ngược sau đó được thực hiện bằng cách đọc và phân
tích các phần có nó ra một cách thủ công. Phân tích mã ngoại tuyến là một phương pháp
tiếp cận mạnh mẽ bởi vì nó cung cấp một nền tản tốt của chương trình và giúp bạn có thể
dễ dàng tìm kiếm các chức năng cụ thể mà bạn quan tâm.
Nhược điểm của phân tích mã ngoại tuyến: là yêu cầu phải hiểu rõ hơn về code
được yêu cầu. Bởi vì về bạn không thể xem dữ liệu và chương trình giao tiếp và hoạt
động như thế nào. Bạn phải phân tích xem dữ liệu mà code nó xử lý và hoạt động dựa
trên những đoạn code nào. Phân tích ngoại tuyến thường là cách tiếp cận dễ hơn trong
dịch ngược.
Có một số trường hợp: (đặc biệt liên quan đến crack) khi không thể phân tích mã
bằng ngoại tuyến. Điều này thường xảy ra khi chương trình được “đóng gói”, do đó code
được mã hóa hoặc nén và chỉ được giải nén trong thời gian chạy. Trong những trường
hợp như vậy chỉ có phân tích mã nguồn là có thể làm được điều này.
Phân tích mã trực tiếp: bao gồm việc chuyển đổi mã thành một dạng mà con
người có thể đọc được, nhưng ở đây bạn không chỉ cần đọc đoạn mã đã được chuyển đổi
mà thay vào đó chạy nó trong một trình biên dịch nào đó và quan sát hành vi của nó trên
một hệ thống trực tiếp. Điều này cung cấp nhiều thông tin hơn bởi vì bạn có thể quan sát


11
dữ liệu bên trong của chương trình và nó ảnh hưởng như thế nào đến lưu lượng của mã.
Bạn có thể xem những biến riêng biệt nào chứa dữ liệu và điều gì xảy ra khi chương trình
đọc hoặc sửa đổi dữ liệu đó.
Nói chung, tôi muốn nói rằng phân tích trực tiếp là cách tiếp cận tốt hơn cho người
mới bắt đầu vì nó cung cấp nhiều dữ liệu hơn để làm việc.
Disassembler là một trong những công cụ dịch ngược quan trọng nhất. Về cơ bản,
một một phần giãi mã mã nhị phân thành hợp ngữ dễ đọc. Quá trình này tương tự như
những gì xảy ra trong một CPU trong khi một chương trình đang chạy. Sự khác biệt thay
vì thực sự hiện hiện các nhiệm vụ được chỉ định bởi mã, trình giải mã chỉ đơn thuần là
giải mã ra các hướng dẫn và tạo ra một đại diện cho đoạn chương trình đó.
Mô tả cách một trình dịch ngược chuyển đổi các byte opcode IA-32 sang hợp ngữ
mà con người có thể đọc được. Quá trình này thường bắt đầu với việc dịch ngược tìm
kiếm mã opcode trong một bảng dịch có chưa tên văn bản của mỗi hướng dẫn (trong
trường hợp này là mã số 8B và chỉ dẫn là MOV) cùng với định dạng của chúng. Các
hướng dẫn IA-32 giống như các chức năng, nghĩa là mỗi lệnh có một tập các “tham số”
khác nhau (thường được gọi là các toán hạng). Trình dịch ngược sau đó tiến hành phân
tích chính xác các toán hạng được sử dụng trong các hướng dẫn cụ thể này.
2.5.1 IDA PRO
IDA (Interactice DisAssembler): đây là phần mềm disasembler thông minh và đầy
đủ tính năng nhất, được sử dụng bởi rất nhiều chuyên gia nghiên cứu về bảo mật sử dụng.
IDA được viết bằng C++, chạy trên 3 hệ điều hành chính: Microsoft Windows, Mac OS
X, Linux.
IDA được phát triển bởi Hexrays ở Liege, Bỉ. Các lập trình viên phát triển IDA là
Ilfak Guilfanov. IDA đã có mặt cách đây hơn một thập kỳ là một ứng dụng tựa trên giao
diện điều khiển MS-DOS, điều này rất quan trọng vì nó giúp chung ta hiểu được một số
thử bản chất của giao diện người dùng IDA. Trong một số trường hợp, các phiên bản


12
không có giao diện của IDA cho tất cả các nền tảng được hỗ trợ bởi IDA và tiếp tục sử
dụng giao diện kiểu giao diện điều khiển bắt nguồn từ các phiên bản DOS ban đầu.
Bên trong IDA là một disassembler gốc đệ quy, tuy nhiên, một số lượng người đã
nỗ lực để phát triển và tăng thêm quá trình đệ quy. Để khắc phục một trong những khuyết
điểm lớn trong nguồn gốc của đệ quy, IDA sử dụng một số lượng lớn các kỹ thuật
heuritic để xác định mã bổ sung mà có thể không tìm thấy trong quá trình tái tổ chức.
Ngoài quá trình dịch ngược, IDA còn phải trải qua nhiều thời gian không chỉ để
phân biệt các bản rút gọn dữ liệu khỏi các phân mảnh mã, mà còn để xác định chính xác
các loại dữ liệu nào được đại diện bởi lần giải nén dữ liệu đó. Mặc dù mã mà chúng ta
xem trong IDA là hợp ngữ, một trong những mục tiêu cơ bản của IDA là vẽ một hình ảnh
gần với mã nguồn nhất có thể. IDA làm cho mọi nỗ lực để chú thích các bộ phận được
phân tách được tạo ra không chỉ với thông tin về kiểu dữ liệu mà còn có các biến và tên
hàm. Những chú thích này làm giảm tối đa lượng hex và tối đa số lượng thông tin biểu
tượng được trình bày cho người dùng.
-

Mua IDA Pro
IDA không phải là phần mềm miễn phí. Phiên bản phần mềm miễn phí IDA có

giới hạn, có sẵn cho những người muốn làm quen với các tính năng cơ bản của nó, nhưng
nó không có các tính năng mới của các phiên bản gần đây nhất.
-

Phiên bản IDA
Tính đến phiên bản 6.9.5, IDA có sẵn phiên bản giao diện và lệnh dành cho

Windows, Linux và OS X. IDA sử dụng các thư viện giao diện đa nền tản của QT để
cung cấp giao diện người dùng nhất quán trên cả ba nền tản. Từ quan điểm chức năng,
IDA Pro được cung cấp trong hai phiên bản đó là tiêu chuẩn và nâng cao. Hai biên bản
khác nhau chủ yếu với số lượng kiến trúc bộ xử lý mà chúng hỗ trợ dịch ngược. Một cái
nhìn nhanh về danh sách các bộ vi xử lý được hỗ trợ cho thấy rằng phiên bản tiêu chuẩn
khoảng 540$ cho phiên bản này hỗ trợ hơn 30 kiến trúc xử lý, trong khi phiên bản tiên


13
tiến hơn gần gấ đôi giá hỗ trợ hơn 50 kiến trúc xử lý. Các kiến trúc bổ sung được hỗ trợ
trong phiên bảo cao cấp như gồm x64, ADM64, MIPS, PPC và SPARC.
-

Bắt đầu sử dụng IDA
Bất kỳ khi nào bạn khởi chạy IDA, bạn sẽ nhận được tóm tắt thông tin phiên bản

của bạn và thông tin bản quyền, tiếp đến bạn sẽ được hiển thị màn hình một hộp thoại
cung cấp ba cách để tiến hành với máy tính của bạn. Như trong hình 2.1

Hình 2.1. Menu khởi động IDA
 Mục New sẽ mở một hộp thoại File Open tiêu chuẩn để chọn tập tin cần được
phân tích. Sau khi chọn tập một, một hoặc nhiều hộp thoại bổ sung được hiển thị
cho phép bạn chọn các tùy chọn phân tích tập tin cụ thể trước khi tệp được tải,
phân tích và hiển thị.
 Nút Go kết thúc quá trỉ tải và dẫn đến IDA mở ra giao diện làm việc trống. Tại
thời điểm này, nếu bạn muốn mở tập tin, bạn có thể kéo và thả tệp lên máy tính
hoặc bạn có thể chọn FileOpen để mở tệp lên. Theo mặc định, IDA sử dụng bộ


14
lục tiện ích đã biết để giới hạn chế độ xem loại file. Bạn phải sửa đổi bộ lọc thành
chọn tất cả các tệp để hộp thoại tệp hiển thị chính xác tệp mà bạn muốn mở. Khi
bạn mở một tập tin theo cách này, IDA sẽ tự động xá định loại tập tin được chọn.
Tuy nhiên, bạn nên chú ý cẩn thận đến hộp thoại khi nạp vào để xem tiến trình nào
được chọn để xử lý tệp.
 Previous: Bạn nên sử dụng nút trở về trước khi bạn muốn mở một trong các tập tin
trong danh sách các tập tin gần đây nằm dưới nút trở về trước. Danh sách các tập
tin được sử dụng gần dây được nhập với giá trị từ khóa lịch sử của khóa Windows
registry của IDA (hoặc ida.reg trên các nền tản không phải của Windows). Chiều
dài tối đa của danh sách lịch sử ban đầu là 10, Sử dụng danh sách lịch sử là tùy
chọn tiện lợi nhất để tiếp tục làm việc trên các tập tin cơ sở dữ liệu được sử dụng
-

gần đây
Khi bắt đầu mở tập tin bằng cách sử dụng lên File  Open, hộp thoại tải được thể
hiện trong hình 2.2. IDA tạo ra nhiều loại tập tin tiềm năng và hiển thị danh sách
đó ở đầu hộp thoại. Danh sách này đại diện cho bộ tải của IDA phù hợp nhất để xử
lý tập tin được chọn. Danh sách được tạo ra bằng cách thực hiện từng bộ tải tập tin
trong danh sách mục của IDA để tìm bất kỳ bộ tải nào nhận dạng được tệp mới.
Lưu ý rằng trong hình 2.2 cả trình nạp Windows PE (pe.ldw) yêu cầu nhận dạng
tập tin được chọn. Người dùng sẽ quen thuộc với dang tập tin PE bởi vì dạng tập
tin PE là dạng mở rộng của định dạng tập tin MS-DOS EXE.
 Processor Type được xử lý thả xuống cho phép bạn chỉ định bộ xử lý (từ thư
mục procs của IDA) nên được sử dụng trong quá trình dịch ngược. Trong hầu
hết các trường hợp, IDA sẽ chọn bộ vi xử lý phù hợp dựa trên thông tin mà nó
đọc từ phần đầu của tập tin thực thi. Khi IDA không thể xác định đúng loại bộ
vi xử lý được liên kết với tập tin đang mở, bạn cần phải chọn một loại bộ xử lý
theo cách thủ công trước khi tiếp tục thao tác load file.
 Loading Segment và Loading Offset chỉ hoạt động khi dạng đầu vào của tập tin
nhị phân được chọn cùng với bộ xử lý x86. Vì trình nạp nhị phân không thể
trích xuất bất kỳ thông tin bố cục bộ nhớ nào nền phân đoạn và giá trị bù lại
được nhập vào đây được kết hợp để tạo ra địa chỉ cơ sở cho nội dung tập tin đã


15
tải. nếu quên chỉ định địa chỉ cơ sở trong quá trình tải ban đầu, địa chỉ cơ sở
của hình ảnh IDA có thể được sửa đổi bất kỳ lúc nào bằng lệnh edit  Segment
Rebasse Program
 Các nút Kernel Option cung cấp quyền truy cập để định cấu hình các tùy chọn
phân tích dịch ngữ cụ thể mà IDA sẽ tăng cường quá trình đệ quy. Trong phần
lớn các trường hợp, các tùy chọn mặc định cung cấp giá trị tốt nhất có thể.
 Các tùy chọn trong mục Option xử lý cung cấp quyền truy cập vào tùy chọn
cấu hình và áp dụng cho các module bộ xử lý đã chọn. Tuy nhiên, các tùy chọn
bộ xử lý không nhất thiết có sẵn cho mỗi module xử lý. Trợ giúp có giới hạn
sẵn cho các tùy chọn bộ vi xử lý vì các tùy chọn này phụ thuộc rất nhiều vào
bộ xử lý được lựa chọn và sự thành thạo lập trình của tác giả các của module
 Các hộp Option còn lại được sử dụng để đạt được kiểm soát tốt hơn quá trình
tải tập tin lên. Mỗi lựa chọn được mô tả chi tiết trong tập tin trợ giúp của IDA.
Các tùy chọn không áp dụng cho tất cả các loại tập tin đầu vào trong nhiều
trương hợp, chúng ta có thể dựa vào các lựa chọn mặc định.


16

Hình 2.2. Các tùy chỉnh để load tệp vào IDA
- Giao diện chính của IDA
1. Số 1 là thanh toolbar chứa các công cụ tương ứng với các hoạt động IDA thông
dụng nhất. Các thanh công cụ được thêm vào và gỡ bỏ khỏi máy tính bằng các sử
dụng lệnh View  Toolbars. Sử dụng tính năng kéo thả, bạn cũng có thể chỉnh sửa
lại từng vị trí trong thanh công cụ cho phù hợp với nhu cầu sử dụng của mình.
Hình trên hiển thị thanh công cụ cơ bar của IDA với một hàng nút công cụ. Thanh
công cụ chế độ nâng cao bằng các sử dụng lệnh View  Toolbars  Advanced. Các
thanh công cụ chế độ nâng cao chứa ba dòng đầy đủ các nút công cụ.
2. Số 2 là dải màu ngang thuật ngữ tổng quát của IDA, còn được gọi là dải điều
hướng. Dải điều hướng hiển thị một khung nhìn tuyến tính của không gian địa chỉ
khi tệp được tải lên. Theo mặc định, toàn bộ dải địa chỉ của nhị phân được biểu
diễn. Chúng ta có thể phóng to và thu nhỏ phạm vi địa chỉ bằng cách nhấp chuột


17
phải vào bất kỳ đâu trong dải điều hướng và tùy chọn một trong các tùy chọn
phóng thu có sẵn. Màu sắc khác nhau đại diện cho các loại nội dung tệp khác
nhau, chẳng hạn như dữ liệu hoặc code. Một vị trí nhỏ (mặc định là màu vàng) chỉ
vào vị trí của bằng chuyển hướng tương ứng với phạm vi địa chỉ hiện tại được
hiển thị trong cữa sổ dịch ngược. Di chuột qua bất kỳ phần nào của dải điều hướng
mang lại một đầu công cụ mô tả vịt trí đó trong tập tin nhị phân. Nhấp vào vào
băng chuyển hướng sẽ mở chế độ dịch ngược ra vị trí đã chọn trong hệ nhị phân.
Các màu sắc được sử dụng trong dải điều hướng có thể được tùy chỉnh bằng cách
sử dụng lệnh Option  Colors. Kéo thanh định hướng ra ngoài màn hình IDA tạo
ra một trình điều khiển Overvew Navigator.
3. Ở hình 2.4, các tab số 3 được cung cấp cho mỗi màn hình dữ liệu hiện đang mở.
Hiển thị dữ liệu chứa thông tin được trích ra từ hệ nhị phân và thể hiện các quan
điểm khác nhau vào cơ sở dữ liệu. Phần lớn công việc phân tích có thể diễn ra
thông qua tương tác với các hiển thị dữ liệu hiện có. Hình 2.4 cho thấy ba trong số
các dữ liệu có sẵn hiển thị: IDA-View, Functions, và Graph Overview. Hiển thị dữ
liệu bổ sung có sẵn qua ViewOpen Sub và menu này cũng được sử dụng để khôi
phục lại màn hình nào đã bị đóng.
4. Chế độ xem dịch ngược số 4 là hiển thị dữ liệu chính. Hai kiểu hiển thị có sẵn cho
chế độ xem dịch ngược: chế độ xem dạng đồ thị (mặc định) và chế độ xem dạng
danh sách. Trong chế độ xem đồ thị, IDA hiển thị biểu đồ dạng biểu đồ dòng chảy
của một chức năng đơn tại bất kỳ thời điểm nào. Khi kết hợp với tổng quan về đồ
thị, chúng ta có thể hiểu được lưu lượng của hàm sử dụng và sự phân tích trực
quan về cấu trúc của hàm. Khi cữa sổ IDA-View được kích hoạt, thanh spacebar sẽ
chuyển đổi giữa chế đọ xem biểu đồ và hiển thị theo kiểu danh sách. Nếu bạn
muốn hiển thị danh sách mặc định của mình, bạn phải bỏ chọn sử dụng chế độ
xem đồ thị theo mặc định trên tab đồ thị qua OptionGeneral. Như hình dưới.


18

Hình 2.3. Các tùy chỉnh của IDA
5. Số 5 là chế độ xem đồ thị, hiếm khi có thể để phù hợp với toàn bộ đồ thị của một
chức năng vào vùng hiển thị cùng một lúc. Graph overview chỉ hiển thị khi chế độ
xem đồ thị đang hoạt động, cung cấp ảnh chụp nhanh được thu nhỏ của cấu trúc đồ
thì cơ bản. Hình chữ nhật chấm nhỏ cho biết hiển thị hiện tại trong chế độ xem
dạng biểu đồ. Nhấp vào Graph overview về bản đồ thì sẽ tự động chỉnh sửa lại chế
độ xem của đồ thị
6. Số 6 là cữa sổ Output là nơi mà chúng ta có thể tìm thấy bất kỳ thông tin nào được
tạo ra bởi IDA. Ở đây, chúng ta sẽ tìm thấy các thông báo trạng thái liên quan đến
tiến trình của giai đoạn phân tích tập tin, cùng với bất kỳ thông báo lỗi nào phát
sinh từ các hoạt động do người dùng yêu cầu.
7. Số 7 là Functions là cữa sổ này liệt kê tất cả các hàm của chương trình. Sau quá
trình phân tích IDA sẽ liệt kê và đưa ra danh sách hàm với địa chỉ bắt đầu, kết
thúc, các tham số và đặc tính của từng hàm.


19

Hình 2.4. Giao diện chính của IDA
2.5.2 OllyDBG
Ollydbg, là một chương trình GEBUGGER dễ sử dụng, trực quan và nó
disassembler cho Microsoft Windows PE (Portable Executable) file 32 bit nói 1 các
thường người ta gọi đó là PE. Và theo tác giả Oleh Yuschuk, Ollydbg chỉ debug được
32bit với nền tản Microsoft Windows và mặc nhiên ta không thể Debug những thư viện
được compiled bởi 64bit.
Olly cung cấp các tính năng phân tích mạnh mẽ. Bộ phân tích mã của Olly có thể
xác định các vòng, các khối chuyển đổi, và các cấu trúc mã quan trọng khác. Nó hiển thị
tên tham số cho tất cả các chức năng là API đã biết và hỗ trợ tìm kiếm tham chiếu chéo
giữa mã và dữ liệu theo mọi hướng có thể.
Với các tính năng dịch ngược mạnh mẽ, Olly hỗ trợ nhiều chế độ xem, bao gồm
danh sách các hàm import và export của các modules, nó sử dụng các thư viện import (.lil
files) để đặt tên đúng chức năng có nguồn gốc từ thư viện đó, và các tên khác.
-

Phiên bản Olly


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×