Chương 1: TONG QUAN DE TÀI Trình bày tổng quan về đề tài của khóa luận tốt nghiệp, khái quát định hướng nghiên cứu mà chúng tôi muốn hướng tới cũng như mục tiêu muốn đạt được. Chương 2: CƠ SỞ LÝ THUYET Trình bày về cơ sở lý thuyết, các định nghĩa, các khái niệm cũng như những kiến thức làm nền tang để thực hiện được nghiên cứu. Đồng thời trình bày sơ lược một số công trình nghiên cứu có liên quan trong lĩnh vực. Chương 3: PHƯƠNG PHÁP THỰC HIỆN Đây chính là phần trọng tâm của khoá luận, chúng tôi trình bày nội dung chính về mô hình và phương pháp pháp hiện tương đồng mã nhị phân ma chúng tôi đã xây dựng.
Chương 4: HIỆN THỰC, ĐÁNH GIÁ VÀ THẢO LUẬN Trong phần này chúng tôi sẽ trình bày các thí nghiệm và đánh giá phương pháp dé xuất đã dé cập ở Chương 3. Sau đó sẽ thực hiện đánh giá những kết quả đạt được và nêu bật các thảo luận chung. Chương 5: KẾT LUẬN VA HƯỚNG PHÁT TRIEN Chúng tôi sẽ đưa ra những kết luận về dé tài và mô hình đã xây dựng, dé xuất một số hướng phát triển mở rộng cho những nghiên cứu về tương đồng mã nhị phân trong tương lai. Chương 2 CƠ SỞ LÝ THUYÊT Tóm tắt chương Trong chương này, chúng tôi sẽ trình bày về các kiến thức lý thuyết trong phạm vi liên quan đến khóa luận.
Chương này sẽ bao gồm cái nhìn chung về bài toán phát hiện sự tương đồng mã nhị phân. Cùng với đó là lý thuyết về mô hình học sâu. Đồng thời, chúng tôi sẽ trình bày tóm tắt về những công trình nghiên cứu liên quan và những điểm mới của khóa luận này so với những nghiên cứu trước đây.1 Phát hiện tương dong mã nhị phân 2.1 Tổng quan bài toán Phát hiện tương đồng mã nhị phân Phát hiện sự tương đồng mã nhị phân liên quan đến việc phân tích các biểu diễn nhị phân của hai hàm để có thể xác định được mức độ tương đồng của chúng. Với đầu vào là biểu diễn nhị phân của một cặp hàm bắt kì đến từ hai chương trình nhị phân khác nhau, một phương pháp BCSD sẽ tính toán được dau ra là một điểm số tương đồng để có thể thể hiện được mức độ tương đồng giữa hai hàm làm đầu vào.
Điểm số tương đồng này có thể được sử dụng để chúng ta xác định những lỗ hổng phần mềm, bởi vì nếu một hàm tương đồng với một hàm đã biết là có lỗ hổng bảo mật thì ta có thể xác định được hàm đó cũng có lỗ hổng. Ngoài ra còn có thể xác định các đoạn mã độc hại, phân loại các họ phần mềm độc hại, và xác định các trường hợp sao chép phần mềm hoặc vi phạm bằng sáng chế phần mềm [11]. Công việc so sánh tương đồng trên mã nhị phân này tương đối là phức Chương 2. COSO LY THUYẾT tạp va khó khăn với con người hơn so với việc phân tích dựa trên mã nguồn, bởi vì một phần mềm thường được biên dich để có thể hoạt động trên nhiều những nền tảng kiến trúc khác nhau, điều này có thể khiến cho những tập lệnh nhị phân cũng khác đi.
Dù xuất phát cùng một đoạn mã nguồn, khi được biên dịch bằng những trình biên dịch khác nhau, hay dùng các phiên bản khác trong một trình biên dịch mã nguồn cũng khiến cho mã nhị phân đã có một sự khác biệt rõ rệt. Bên cạnh đó, còn có các tùy chọn biên dịch khác như biên dịch trên các lựa chọn tối ưu hóa khác nhau, hay là các phương pháp làm rối mã nhị phân cũng khiến cho công việc so sánh tương đồng nhị phân gặp nhiều thách thức.2 Hàm - Function Trong ngữ cảnh phát hiện sự tương đồng mã nhị phân, hàm (function) là một khối mã đã được biên dịch thành những mã máy và có thể được gọi để thực thi một nhiệm vụ cụ thể. Một hàm bao gồm một tập hợp gồm các lệnh được nhóm lại đưới một tên gọi và có thể được tái sử dụng ở nhiều đoạn khác nhau trong mã nguồn. Hàm giúp cấu trúc chương trình một cách rõ ràng va dé để chúng ta quản lý hơn, đặc biệt quan trọng khi phân tích và so sánh mã nhị phân.
Chúng tôi chọn hàm làm đơn vị chính trong phát hiện tương đồng nhị phân vì các lý do sau đây: 1. Tính đơn vị chức năng: Mỗi hàm thường thực hiện một nhiệm vụ cụ thể, rõ ràng và độc lập. Điều này có thể làm cho việc xem xét và so sánh giữa các hàm dé hơn. Bởi vì hàm thường chứa các khối mã liên quan đến một chức năng cụ thể, việc so sánh các hàm tương tự giữa các tệp nhị phân khác nhau sẽ giúp phát hiện các phần mã có chức năng tương đương.
Khả năng tái sử dụng: Một hàm, hay được gọi rất nhiều trong một ứng dụng hoặc giữa các phần mềm khác nhau, từ đó tăng tính tái sử dụng của mã nguồn và cùng một hàm có thé được tái sử dụng trong nhiều chương trình. Việc phát hiện các hàm tương tự trong các tệp nhị phân khác nhau có thể giúp nhận diện được các hàm tái sử dụng, từ đó, hỗ trợ tìm kiếm các hàm có chứa lỗ hổng bảo mật, các hàm đã biết là mã độc, v. COSO LY THUYẾT 3. Tinh rõ ràng và bảo trì: Sử dung hàm giúp mã nguồn trở nên rõ ràng hơn, dé đọc và dé bảo trì hơn.
Khi phân tích mã nhị phân, việc tập trung và các hàm giúp dễ xác định và so sánh các đoạn mã có chức năng tương tự, từ đó phát hiện các mẫu mã độc, các hàm có nguy cơ bảo mật hoặc mã sao chép. Ngoài những yếu tố trên, một hàm còn có khả năng biểu diễn thành đồ thị luồng điều khiển Control Flow Graph (CFG) một cách dé dàng.1 minh hoa CFG của hàm A và hàm B. Ưu điểm của hàm khi có thể biểu diễn thành CFG như sau: 1. Phân tích luồng điều khiển của ham: CFG giúp hình dung rõ ràng các đường đi khác nhau mà chương trình có thể thực hiện khi chạy, bao gồm các điều kiện rẽ nhánh va vòng lặp.
Điều này hữu ích trong việc phân tích hành vi của hàm, giúp nhận diện các điểm tương đồng và khác biệt giữa các hàm trong các tệp nhị phân khác nhau. Phát hiện lỗi: CFG hỗ trợ việc phát hiện các lỗi tiềm ẩn trong một hàm như vòng lặp vô tận, điều kiện không thể đạt tới, hoặc các đoạn mã không thể đạt tới. Trong ngữ cảnh bảo mật, việc phát hiện lỗi này giúp xác định các lỗ hổng có thể bị tận dụng khai thác. So sánh và đo lường tương đồng: Trong lĩnh vực phát hiện sư tương đồng mã nhị phân, CFG cung cấp một phương pháp mạnh mẽ để so sánh và đo lường mức độ tương đồng giữa các hàm, ngay cả khi chúng được biên dịch bởi các trình biên dịch khác nhau hoặc để chạy trên các nền tảng khác nhau.
Điều này hữu ích trong việc phân tích mã độc, phát hiện mã sao chép hay nhận diện đoạn mã có chức năng tương tự. COSO LY THUYẾT Function A Function B 9x199669d59 55 push rbp 9x199909ddf mov eax, dword [rdi] 0x100000d51 4889e5 mov rbp, rsp 9x199966de1 mov edx, dword [rsi] 9x199999g54 48897df8 mov qword [local 8h], rdi 0x100000de3 mov dword [rdi], edx 9x100000d58 488975f9 mov qword [local 16h], rsi 9x199909de5 mov dword [rsi], eax 0x190000d5c 488b75T8 mov rsi, qword [local_8h] 0x100000de7 ret 9x199996g69 8b06 mov eax, dword [rsi] 0x100000062 8945ec mov dword [local 14h], eax 9x199999g65 488b75f9 mov rsi, qword [local_ 19h] 0x190000d69 8b@6 mov eax, dword [rsi] 0x100600d6b 488b75f8 mov rsi, qword [tocal_ 8h] 9x199999d6f 8996 mov dword [rsi], eax 0x190600d71 8b45ec mov eax, dword [local_14h] 0x100000d74 488b75f9 mov rsi, qword [1ocal_19h] 0x100000d78 8906 mov dword [rsi], eax 0x100000d7a 5d pop rbp 0x100000d7b c3 ret HINH 2.1: Ví dụ về luồng điều khiển của hàm nhị phân 2. Khối cơ ban - Basic Block Khối cơ ban (Basic Block) là một đoạn mã lệnh trong một chương trình có điểm vào duy nhất, điểm ra duy nhất và thực thi tuần tự. Nghĩa là, khối cơ bản chỉ có thể được thực thi bắt đầu từ lệnh đầu tiên, kết thúc tại lệnh cuối cùng (có thể là lệnh nhảy hoặc return) và tất cả các lệnh bên trong được thực thi tuần tự từ trên xuống dưới mà không bị ngắt quãng (trừ lệnh nhảy ở cuối).
Nói cách khác, khi lệnh đầu tiên của khối co bản được thực thi, tat cả các lệnh còn lại cũng sé được thực thi theo thứ tự, và không có cách nào thoát khỏi khối cơ bản trước khi đến lệnh cuối cùng.2 minh họa các khối basic block trong một hàm. 100B585C 100B585C: 100B5832: mov eax, edi mov edi, [esp+1Ch] shr eax, 1 mov ecx, edi HINH 2.2: Hinh anh minh hoa basic block 10 Chương 2. COSO LY THUYẾT Tầm quan trọng của Basic Block trong việc phân tích tương đồng mã nhị phân: 1. Tính đơn vị: Khối cơ bản có tính đơn vị cao, vì tất cả các lệnh trong khối đều được thực thi mà không có sự ngắt quãng.
Điều này giúp cho việc phân tích mã trở nên dễ dàng hơn vì không cần quan tâm các lệnh nhảy mà có điều kiện hoặc không có các điều kiện bên trong khối. Câu trúc dir liệu quan trọng: Trong phân tích mã nhị phân va các chương trình phát hiện tương đồng mã, khối cơ bản là cấu trúc dữ liệu quan trọng. Các công cụ phân tích thường chia mã thành các khối cơ bản dé dé dang hơn trong việc so sánh và phân tích sự tương đồng. Phát hiện sự tương đồng mã: Trong bối cảnh phát hiện tương đồng mã nhị phân, khối cơ bản là đơn vị nhỏ nhất mà các công cụ phân tích thường xem xét.
Bằng cách so sánh các khối cơ bản từ các tệp nhị phân khác nhau, có thể xác định được mức độ tương đồng giữa các đoạn mã, giúp phát hiện lỗi phần mềm, hoặc đạo văn phần mềm.4 Công cụ dịch ngược Công cụ dịch ngược (Reverse Engineering Tools) là các phần mềm được sử dụng để phân tích mã nhị phân và chuyển đổi nó thành mã nguồn có cấu trúc cao hơn. Công cụ này giúp phân tích phần mềm, nắm rõ hơn về các phần cấu trúc, các chức năng và logic của chương trình đã được biên dịch. Một số công cụ dịch ngược được sử dụng có thể nói là rộng rãi hiện nay có thể kể đến như IDA Pro, Ghidra, Radare2, Angr. Các chức năng chính của công cụ dịch ngược như sau: e Trích xuất hàm: các công cụ dịch ngược giúp chuyển đổi mã máy không có cau trúc thành mã nguồn có cấu trúc (thường là assembly), giúp người dùng dé dàng hiểu va phân tích các hàm có trong mã nhị phân.