Copy propagation va Deadcode elimination

Một phần của tài liệu Khóa luận tốt nghiệp An toàn thông tin: Phương pháp phát hiện sự tương đồng mã nhị phân của chương trình dựa trên học sâu trong an toàn phần mềm (Trang 56 - 59)

Normalize là quá trình cuối cùng trước khi dùng MD5 hash để chuyển đổi

các strand thành vector. Dây là quá trình tái đặt tên các các biến đã được sinh

ra bởi Vex-IR. Chúng tôi tiến hành thực hiện một quá trình gọi là "linear scan

renaming" (tạm dịch là tái đặt tên theo quét tuyến tính). Cụ thể, chúng tôi

duyệt qua mã nhị phân và theo đõi sự xuất hiện của các biến. Khi chúng ta gặp một biến mới, chúng ta đặt tên cho nó theo thứ tự xuất hiện (Hình 3.5).

t13 = CmpEQ64(0x4010,0x4010) t1 = CmpEQ64(0x4010,0x4010) t12 = 1Uto64(t13) t2 = 1Uto64(t1)

t14 = 64to1(t12) 13 = 64to1(t2)

Hình 3.5: Normalize

Việc tái đặt tên các biến theo thứ tự xuất hiện mang lại các lợi ích quan

trọng:

e Don giản hóa mã: Các tên biến ngắn gọn và tuân thủ theo thứ tự

xuất hiện giúp đơn giản hóa mã nhị phân. Khi đặt tên biến theo thứ

tự xuất hiện, chúng ta có một cấu trúc rõ ràng và dễ hiểu hơn, làm

cho mã trở nên dé đọc và xử lý hơn.

e Tăng tính nhất quán: Công việc tái đặt tên biến theo thứ tự xuất hiện đảm bảo tính nhất quán trong cách đặt tên biến trong mã. Mỗi biến

sẽ có một tên duy nhất và khác biệt, giúp tránh nhầm lẫn và xung đột tên biến.

e Hỗ trợ quá trình phân tích: Khi chúng ta tái đặt tên biến theo thứ tự xuất hiện, việc phân tích và hiểu mã nhị phân trở nên dễ dàng hơn. Các biến đặt tên theo thứ tự xuất hiện trong đoạn mã, giúp ta nhìn thấy sự liên quan và tương tác giữa chúng. Diều này hỗ trợ quá trình phân tích và trích xuất ngữ nghĩa.

Nếu không có quá trình này, tên các biến sẽ xuất hiện một các không có trật

tự trên Vex-IR, khiến cho việc xác định ngữ nghĩa cho 2 chức năng tương tự nhau gặp khó khăn, và giảm hiệu suất của phương pháp.

Cả 2 công việc tối ưu hóa trên là một phần rất quan trọng trong phương pháp bytes2vec của chúng tôi. Sau khi áp dụng các công việc này, những phần

dư thừa không phù hợp của Vex-IR sinh ra sẽ bị loại bỏ, từ đó giúp dé dàng trích xuất ngữ nghĩa hơn và tăng hiệu quả của phương pháp.

3.2.3. Lựa chon m6 hành học máu

Từ những tìm hiểu của mình, chúng tôi thấy rằng xử lý hình ảnh bằng học sâu CNN đã mang lại hiệu qua cao trong nhiều nghiên cứu. Do đó, trong nghiên cứu này, chúng tôi cũng áp dụng kiến trúc CNN vào việc phát hiện sự tương

đồng trong mã nhị phân. Đồng thời để nâng cao hiệu quả tốt nhất chúng tôi còn kết hợp CNN với GRU - một biến thể của RNN.

Mô hình học sâu của chúng tôi sử dụng một số lớp và kỹ thuật từ lĩnh vực

xử lý hình ảnh. Đặc biệt, chúng tôi sử dụng các lớp Conv2D để trích xuất các đặc trưng từ các vector đầu vào và lớp MaxPooling2D để giảm kích thước của các đặc trưng này. Bằng cách áp dụng các lớp này, chúng tôi có thể tận dụng các thông tin quan trọng và mối quan hệ không gian.

Dé làm cho dit liệu đầu vào phù hợp với mô hinhf, chúng tôi đã sử dụng lớp Reshape để chuyển đổi đầu vào từ 2 vector thành một định dạng có kích thước

(2, 512, 1). Điều này cho phép mô hình xem xét mã nhị phân như là các hình

ảnh với hai kênh và kích thước 512x1. Sau đó, lớp Conv2D với 16 bộ lọc và kích

thước kernel (1, 2) được áp dụng để trích xuất các đặc trưng của dữ liệu. Lớp MaxPooling2D sau đó được sử dụng để giảm kích thước của đặc trưng trích

xuất. Ở đây chúng tôi thêm 1 lớp Dropout 0.2 để tránh overfitting.

Tiếp theo, mô hình áp dụng lớp Conv2D khác với 8 bộ lọc và kích thước kernel

(1, 2) để tiếp tục trích xuất đặc trưng. Lại một lần nữa, lớp MaxPooling2D và Dropout 0.2 được sử dụng để giảm kích thước.

Một lớp Flatten được sử dụng để làm phẳng dữ liệu, chuẩn bị cho việc đưa

vào các lớp Fully Connected. Đồng thời, lớp RNN-GRU có nhiệm vụ nhận đầu vào là dữ liệu tuần tự có kích thước (2, 512) và thực hiện việc xử lý dựa trên nguyên tắc của mạng GRU.Đầu ra của lớp GRU và đầu ra của lớp Flatten được kết hợp thông qua lớp Concatenate, tạo thành một vectơ đặc trưng kết hợp

Cuối cùng vector đặc trưng này được dua qua 2 lớp Fully Connected với lần

lượt 64 đơn vị và 2 đơn vị để đưa ra dự đoán xác suất đầu ra. Giữa 2 lớp này chúng tôi cũng thêm 1 lớp Dropout 0.5 lần nữa để tránh việc overfitting.

Để đễ dàng hơn cho việc hiểu mô hình, chúng tôi tóm tắc lại các lớp trong

hình 3.6.

input_1 input: | [(None, 2, 512)]

| InputLayer | output: | [(None, 2, 512)]

reshape input: | (None, 2, 512)

(None, 2, 512, 1) Reshape | output:

conv2d | input: (None, 2, 512, 1) gru input: | (None, 2, 512)

Conv2D | output: | (None, 1, 510, 16) GRU | output: (None, 3)

MaxPooling2D | output: | (None, 1, 255, 16)

dropout | input: | (None, 1, 255, 16) |

(None, 1, 255, 16) Dropout

(None, 1, 255, 16) (None, 1, 253, 8)

max _pooling2d_1 MaxPooling2D

(None, 1, 253, 8) (None, 1, 126, 8)

dropout_1 (None, 1, 126, 8)

(None, 1, 126, 8) (None, 1008)

[(None, 1008), (None, 3)]

(None, 1011)

concatenate

Concatenate | output:

| dense | input: | (None, 1011) |

output: (None, 64) |

| Dense

dropout_2 | input: | (None, 64) Dropout | output: | (None, 64)

Dense | output: | (None, 2)

Một phần của tài liệu Khóa luận tốt nghiệp An toàn thông tin: Phương pháp phát hiện sự tương đồng mã nhị phân của chương trình dựa trên học sâu trong an toàn phần mềm (Trang 56 - 59)

Tải bản đầy đủ (PDF)

(86 trang)