2.2.1 Kỹ thuật mã hóa.
Kỹ thuật mã hóa gần như được sử dụng trong hầu hết virus đa hình hiện nay. Mã hóa cơ bản: Cơ bản, đơn giản và hay được sử dụng nhất trong trong kỹ thuật mã hóa của virus đa hình là sử dụng phép toán XOR, AND, SUB với một khóa ngẫu nhiên được tạo ra trong mỗi lần lây nhiễm được lưu trữ dữ liệu của virus hoặc trực tiếp trong các phương thức giải mã. Ví dụ sau đây là một ví dụ cơ bản của kiểu mã hóa này:
mov esi, offset enc_code_start ;bắt đầu mã hóa
mov edi, esi ;bắt đầu giải mã
mov ecx, (offset enc_code_end - offset enc_code_start) / 4
mov ebx, 6B3C728Ah ; Khóa mã hóa start:
lodsd
xor eax, ebx ; Giải mã stosd ; Lưu lại loop start
end:
jmp đoạn mã hóa
Mã hóa dòng: Phương pháp tạo ra một khóa dòng (keystream) có cùng kích thước với dữ liệu mã hóa. Có nghĩa là tạo ra một chuỗi giả ngẫu nhiên sử dụng một hoặc một đảo ngược các thanh ghi. Cách thực hiện đơn giản là sao chép nhiều khóa đầu vào. Đoạn mã có thể dễ dàng áp vào trong kỹ thuật trong trường hợp sử dụng một thanh ghi. Đoạn mã sau:
...
mov ebx, 6B3C728Ah
call lfsr_init ; Đăng ký init từ khóa start:
lodsd
call lfsr_next ; ebx := 4 byte mới từ khóa xor eax,ebx
…
Lfsr_init khởi tạo thanh ghi, lfsr_next thay đổi thanh ghi 32bits thông qua đó tạo ra một khóa mới.
Mã hóa dựa trên hoán vị, tức là hoán vị những dữ liệu đầu vào. Hoán vị có thể xảy ra trên quy mô toàn bộ dữ liệu, các khối byte, thâm chí mỗi byte.
Mã hóa với khóa ngẫu nhiên: Dữ liệu được mã hóa với một khóa ngẫu nhiên mà khóa không được lưu trữ để giải mã. Trên thực tế khóa chỉ có thể phục hồi khi thực hiện vét cạn hoặc sử dụng phương pháp phân tích mật mã. Kỹ thuật này vô hiệu hóa phương pháp phân tích mã. Kích thước không gian khóa cho phép điều khiển qua thời gian giải mã. Kỹ thuật này được giởi thiệu bởi DarkMan vào năm 199 với việc thực hiện mã hóa mà không để lại khóa.
Mã hóa phụ thuộc vào mã lệnh: Mã nhị phân của chính nó được sử dụng làm khóa mã hóa, hoặc kết hợp của đoạn mã và khóa ngẫu nhiên. Kỹ thuật thường sử dụng đảm bảo mã lệnh không bị chỉnh sửa và chống lại việc phân tích virus. Trước khi giải mã, virus phải có được khóa giải mã. Khóa thường được lưu trữ trong chương trình: trong hàm giải mã, trong dữ liệu của virus hoặc đơn giản là liên quan đến chương trình (ví như tên tập tin, kích thước …). Khác với trường hợp của mã hóa khóa ngẫu nhiên là khóa tìm thấy bởi phương pháp vét cạn. Kịch bản ở đây khóa không được lưu trữ trong mã lệnh nhưng có thể suy ra từ môi trường. Kỹ thuật này gọi là sinh khóa môi trường. Sau đâu là một số ví dụ:
- Khóa phụ thuộc vào các yếu tố kích hoạt. Ví dụ, khóa phụ thuộc vào thời gian hiện tại và giá trị là khoảng thời gian được định trước. Kết quả, virus bị vô hiệu hóa chính nó trong thời gian nằm ngoài khoảng định trước.
- Khóa được lưu trữ trên một máy chủ web, một máy chủ mới …
Sử dụng hiệu quả nhất của kỹ thuật này trên virus Bradley. Nó sử dụng kỹ thuật mã hóa, với khóa lấy từ môi trường. Với loại virus này thì những người viết có thể hạn chế hoạt động của virus của họ về mặt địa lý và thời gian.