Sau khi đã theo dõi và phân tích virus, chúng ta đến giai đoạn cuối cùng là việc diệt con virus này. Bạn có thể đọc 2 bài phân tích trước của tôi về theo dõi và phân tích mẫu virus lây file Win32/Expiro này.
Giai đoạn diệt virus
Để diệt được virus này chúng ta cần biết virus đã thực hiện những hành vi gì với file gốc. Từ đó, chúng ta sẽ tiến hành làm ngược lại những gì virus đã thực hiện để khôi phục lại file gốc bạn đầu. Khôi phục EntryPoint gốc: mẫu virus này có thể xem là tương đối đơn giản trong việc phát hiện ra EntryPoint của chương trình gốc. Chúng ta quan sát chương trình virus được load lên bộ nhớ Chúng ta có thể thấy, EntryPoint của chương trình virus được load lên bộ nhớ tại 0101F000h (ImageBase = 1000000h, AddressOfEntryPoint = 1F000h), ngay sau khi thực hiện hàm giải mã virus, và tao luồng lây nhiễm, virus trả điều khiển về cho chương trình chính (tức là nhảy về OEP) thông qua lệnh JUMP (E9 6834FFFF). Như vậy, OEP sẽ được tính bằng khoảng cách từ EP hiện tại của file đã bị lây cộng thêm 0x0D bytes từ EP tới hết lệnh nhảy trừ đi khoảng cách nhảy ( bằng giá trị tuyệt đối của FFFF3468h) Khôi phục lại các trường quan trọng- NumberOfSections: Virus tiến hành ghi thêm hai section vào cuối file, ta cần giảm giá trị hiện tại của trường này đi hai đơn vị
- BoundImport: Do tăng thêm hai section nên BoundImport đã được tăng thêm 0x50 chính bằng kích thước của 2 section trong PE header
- SizeOfStackReverse, SizeOfHeapReverse: Hai trường này cùng được tăng thêm một giá trị như nhau. Giá trị này được lưu trong đoạn codesau khi giải mã của Virus (DWORD từ vị trí 0xF0 tới 0xF4 tương đối so với địa chỉ của EntryPoint). Cách thức giải mã như sau: Gọi A là byte thức 0x0D kể từ địa chỉ của EntryPoint, B = 0x4D, X1, X2, X3, X4 là 4 bytes virus mã hóa từ 0xF0 tới 0xF4 kể từ EntryPoint, ta có công thức giải mã như sau: Xi = (A XOR B) XOR Xi ; i = 1 → 4 (Đây cũng chính là công thức giải mã toàn bộ code mã hóa của virus.) Dưới đây là đoạn code giải mã thân virus và vị trí DWORD chúng ta cần lấy để khôi phục lại: SizeOfStackReverse, SizeOfHeapReverse
- SizeOfImage: SizeOfImage tăng lên chính bằng kích thước (VirtualSize) của hai section mà virus ghi thêm vào file. Để khôi phục lại trường này, ta cần đọc PE header, lấy SizeOfImage hiện tại trừ đi hai giá trị VirtualSize của hai section cuối, chúng ta sẽ thu được SizeOfImage ban đầu.
Một số thông tin thêm về mẫu virus Win32.Expiro
Tự tạo semaphore để hạn chế thực thi nhiều instance cùng một lúc Một số điều kiện của file được lây: Áp dụng quá trình lây khi mở file mục tiêu thành công, chỉ lây các file PE, không lây các file đã bị lây, không lây các file có SizeOfHeaders quá lớn (Không đủ để thêm 2 section mới)Kiểm tra việc mở file thành công
Kiểm tra điều kiện lây nhiễm
Kiểm tra kích thước của Header
Trên đây chỉ bao gồm một số bước và thông tin cơ bản trong quá trình phân tích hành vi lây file của virus.Ngoài ra, virus này còn thực hiện nhiều hành vi phá hoại khác, để phân tích chi tiết các hành vi này yêu cầu phải thực hiện quá trình theo dõi tỉ mỉ, toàn diện, việc phân tích được triệt để các hành vi này của virus thì yêu cầu đọc hiểu gần như toàn bộ các module của virus. |