Kỹ thuật PRIDE (Pseudo-Random Index DEcryption).

Một phần của tài liệu Phát hiện virus đa hình (Trang 32 - 33)

Mục đích của kỹ thuật này bảo vệ virus trước phương pháp heuristic. Ngay cả với việc thay đổi hướng thực hiện của thủ tục giải mã, nó theo các cơ chế phổ biến sau đây:

Data: là địa chỉ bộ đệm bên trong chứa dữ liệu của virus.

Tuần tự* đọc dữ liệu và tạo ra một bộ đệm mới sẽ chứa các dữ liệu được giải mã.

Kiểm soát mã lệnh mới được giải mã.

Giai đoạn thứ 2 của kỹ thuật này trong quá trình đọc tuần tự hàng 1000byte hoặc nhiều hơn trong bộ nhớ, nó sẽ đưa ra các cảnh báo nguy hiểm. Do đó kỹ thuật PRIDE bao gồm việc giải mã một cách giả ngẫu nhiên và không theo thứ tự, byte 10 được giải mã, byte 25 được giải mã, byte 7 được giải mã cứ như vậy. Kiểu truy cập vào bộ nhớ như thế sẽ giống với với truy cập bộ nhớ của một ứng dụng bình thường. Đồng thời kỹ thuật này sẽ củng cố hơn tính đa hình của mã lệnh giải mã.

Sau đây là thuật toán sử dụng trong kỹ thuật PRIDE, size_of_data là kích thước của dữ liệu được mã hóa. Đầu tiên thuật toán khởi tạo biến số:

pride_start = (size_of_data - 4) & random (); pride_step = (size_of_data - 8) & random (); pride_key = get_random_key ();

Sau đó nó sẽ khởi tạo thanh ghi sử dụng trong quá trình giải mã: CR, IR và BR. CR là thanh ghi đếm và chứa chỉ mục tuần tự giải mã, IR là thanh ghi chỉ số và chứa chỉ mục giả ngẫu nhiên giải mã, BR là thanh ghi đệm sử dụng lưu trữ tạm thời dữ liệu mã hóa. Đoạn mã lệnh sau đây được viết vào đầu của đoạn giải mã.

MOV CR, pride_start

MOV IR, val ; val = (size_of_data - 4) & random() MOV BR, val’ ; val’ = random()

Cuối cùng, khi phần thân của đoạn mã lệnh giải mã phải được tạo ra, thì áp dụng thuật toán:

XOR IR, CR

MOV BR, [IR + source]

XOR BR, key ; or ADD BR, +/- key ; or nothing (no decryption) ADD IR, dest

MOV [IR], BR ; write the decrypted dword POP IR

ADD CR, val ; CR += [4;7]

AND CR, val’ ; val’ = ((random() & ; ˜size_of_data) | (size_of_data-4)) & -4

; (->CR := (CR % size_of_code) & FFFFFFFCh) ADD IR, pride_step

AND IR, val’’ ; val’’ = ((random() & ; ˜size_of_data) | (size_of_data-1)) & -1 ; (->IR := IR % size_of_code)

CMP CR, pride_start

JNZ <?>; jump at a random branch

Những con trỏ lệnh trước đó được cập nhập các thanh ghi CR và IR (ADD CR VAL và ADD CR VAL’ cho thanh ghi CR) kết hợp với nhau. Với sự rõ ràng về yêu cầu của con trỏ lệnh AND thực hiện trước những lệnh AND trước. Cũng như vậy khi pride_start nó sẽ miêu tả thứ tự giải mã: khi nó bằng 0 thì nó sẽ thực hiện giải mã liên tục.

Một phần của tài liệu Phát hiện virus đa hình (Trang 32 - 33)

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

(63 trang)
w