a) Thuật toán tạo mã Huffman
14.4.1. Virus lây vào file COM, EXE
Cấu trúc file COM
File COM (Copy Of Memory) có hình ảnh như là hình ảnh vật lý của mã trên bộ nhớ. Sau đây là hình ảnh của file COM khi được tải len bộ nhớ.
Hình 10.1 - Cấu trúc Virus COM trong RAM
Thi hành chương trình COM
Sau khi được nhận diện, file COM sẽ được tải vào ngay sau PSP, không cần định vị lại. Do đó, kích thước của nó bị giới hạn trong một phân đoạn 64Kb (FFFFh) trừ đi 100h bytes sử dụng cho PSP chỉ còn (FFFFh-100h=FEFFh). Tất cả các thanh ghi DE, ES, CS, SS đều trỏ đến PSP, stack cũng được tạo trong phân đoạn này.
Các bước tổ chức của DOS thi hành file .COM như sau: a) CS, DS, ES và SS cùng trỏ tới PSP
b) SP được định vị để trỏ đến cuối segment PSP (thông thường giá trị của SP là 0FFFEh), nó sẽ còn thấp hơn nữa nếu bộ nhớ không còn đủ 64Kb. Giá trị word ở offset 6 của PSP cũng chỉ ra đoạn chương trình còn bao nhiêu byte dùng được.
Tất cả các vùng nhớ đều được phân phối cho chương trình. Do đó, nếu chương trình này cần thi hành một chương trình khác thì phải giải phóng bớt số vùng nhớ không cần đến bằng chức năng 49 của ngắt 21h.
Một giá trị 0 được đảy vào stack, điều này đảm bảo sự kết thúc chắc chắn của chương trình chính nếu cuối chương trình là một lệnh RFT thay cho cách gọi ngắt 20h.
Chương trình được nạp nagy sau PSP nên đầu vào chương trình (CS:IP) luôn là PSP:100.
Offset Size Nội dung Ý nghĩa
2h 2 PartPag Chiều dài của phần trang cuối cùng
4h 2 PageCnt Số trang (512 bytes một trang) kể cả header 6h 2 RecoCnt Số Item trong bảng tái định vị
8h 2 HdrSize Kích thước của header trong đoạn
0Ah 2 MinMem Vùng nhớ tối thiểu cần trên chương trình (theo đoạn)
0Ch 2 MaxMem Vùng nhớ tối đa cần trên chương trình (theo đoạn)
0Eh 2 ReloSS Segment offset của SS (dùng để khởi tạo SS) 10h 2 ExeSP Giá trị của thanh ghi SP (dùng để khởi tạo) 12h 2 ChkSum File Checksum
14h 2 ExeIP Giá trị của thanh ghi IP (dùng để khởi tạo) 16h 2 ReloCS Segment offset của CS (dùng để khởi tạo CS) 18h 2 TablOff File -offset của item đầu tiên (thường là
01Ch)
1Ah 2 Overlay số overlay (0 cho mode cơ sở) Thuật toán:
1. Thực hiện G
2. Xác định địa chỉ đầu của Virus trong G
3. Trả lại 3 bytes gốc vào đầu G
4. Đặt DTA sang địa chỉ mới
5. Tìm file F (*.COM)
6. Nếu không thấy, sang bước 16 7. Mở file F
8. Lưu 3 bytes đầu tiên F1,F2,F3 của F
9. Tình độ lớn bước nhẩy từ đầu F tới virus (sau này)
10. Chuyển con trỏ file về đầu F
11. Ghi đè lệnh Jump(V1,V2,V3) vào 3 bytes đầu của F
12. Chuyển con trorfile về cuối F
13. Ghi virus vào F
14. Đóng file F
15. Nhẩy tới bước 5 (tìm tiếp file)
16. Trả về địa chỉ DTA cũ (địa chỉ 80h), trả điều khiển cho chương trình chính