BÀI 1:
VR là gì?
E hèm... cũng khó đấy vì trong thực tế VR HẾT SỨC ĐA DẠNG. Tuy nhiên ta có
thể định nghiã nôm na VR là một đoạn code có khả năng tự sao chép, nhân bản
(không đúng với trojan lắm nhỉ ). VR có thể nằm trong các tệp khả thi
(executable files) như COM hoặc EXE, boot sector, MBR...
Chọn ngôn ngữ lập trình
Thông thường VR được xây dựng bằng Assembler nhưng không nhất thiết như vậy.
VR trên thực tế có thể xây dựng bằng Pascal, C, VB... thậm chí có VR còn được
viết bằng tệp BAT. Tuy vậy tôi khuyên nên chọn ASM với các lý do sau:
Kích thước nhỏ: ngôn ngữ ASM sẽ cho ta khả năng lập trình với kích thước
nhỏ nhất có thể. Đây là một đặc tính quan trong của VR. Bằng ASM ta sẽ bớt
đi rất nhiều code không cần thiết và trùng lặp do các trình biên dịch ngôn
ngữ bậc cao sinh ra. Trong quá trình tối ưu mã code ta có thể tối ưu đến từng
byte mã lệnh. Lựa chọn các lệnh có cùng kết quả với kích thước nhỏ
nhất....
Khả năng kiểm soát: Ta có thể kiểm soát từng lệnh, move code từ vị trí này
sang vị trí khác, vừa chạy vừa patch code ( patch on-the-fly ). Mã hoá code từng
phần ....
Tính linh hoạt: đây là ưu điểm mạnh nhất của ASM khi lập trình. Là một ngôn
ngữ phi cấu trúc, khả năng sáng tạo trên ASM là không bị giới hạn.
Cuối cùng nhiều khi VR không hoàn toàn là một chương trình (boot VR chẳng hạn)
nên chẳng có lý do gì để chọn một ngôn ngữ bâc cao cả trừ phi bạn quá
lười.
Một Vxer cần có gì
Như vậy, hãy trang bị cho mình chút kiến thức về ASM rồi ta bắt tay với vài
công cụ tối thiểu sau:
Chương trình dịch ASM. Bạn có thể chọn TASM, MASM hoặc một chương trình dịch
bất kỳ tuỳ thích. Nói chung với tasm 3.1 là đủ với một dos VR
Chương trình link. Có thể là Tlink hoặc link.exe
Một tool debuger. Có nhiều lắm, debug, symdeb... (dos) softice, win32dasm... (win)
Một chương trình soạn text (quickedit, notepad, utraedit....)
Kiếm vài mẫu VR cơ bản, đừng bắt đầu từ VR phức tạp quá nếu không bạn
sẽ mệt mỏi vì debug thuật toán mã hoá và vượt qua một đống mã anti-debug.
Kiếm vài con cô cổ như LittleGirl, onehalf...
Tool dump bộ nhớ. Nếu không có thì sài tạm chức năng của debuger vậy