Kéo xuống một chút, bạn sẽ thấy 2 hàm kế FindFirstFile/FindNextFile sẽ tìm kiếm các file *.exe và WORM này sẽ dùng các file đã tìm thấy làm đối số cho lời gọi hàm L00401330... Phần mã tr
Trang 1Kéo xuống một chút, bạn sẽ thấy 2 hàm kế FindFirstFile/FindNextFile sẽ tìm kiếm các file *.exe và WORM này sẽ dùng các file đã tìm thấy làm đối số cho lời gọi hàm L00401330 Ta sẽ nghiên cứu L00401330 sau
Giờ thì ngâm cứu hàm L00401050:
Ừm, ta các bạn hãy tìm phần mã này nhé, trong Olly :
Trang 2Phần mã trên sẽ lấy tên của file vir thực thi thiện tại (Tham số cuối cùng đã lưu trong ngăn xếp là 0), nó chộp lấy tên của chính nó Sau đó nó sẽ tóm kích cỡ của
nó rồi lưu trong [0042370] và tiếp tục thực thi
Hãy đừng đào sâu thêm các hàm và lời gọi như trong hình, vì nó sẽ mất rất nhiều thời gian
Chúng ta sẽ xem xét tiếp tới hàm tại L004011F0 sẽ rất khó hiểu đối với ai chưa từng viết mã về Virus Tôi sẽ giải thích:
CreateFileA SetFilePointer ReadFile CloseHandle
SUB_L00401019
WinExec
Ừm, những tham số của CreateFileA dường như là dùng để tạo file mới, nhưng nếu chúng ta nhìn xa hơn là nó đang làm cho việc phân tích của ta rối loạn (vì chỉ số điều khiển trả lại chỉ được sử dụng bởi ReadFileA) Vì thế hãy cẩn thận, dường như là file virus thực thi sẽ đọc phần mã của nó, sau đó gọi hàm SUB_L00401019
và thực thi một file mà tên của nó được lưu trữ ở L004235C8 Giờ thì hãy nhìn đến
00401019
Nó sẽ đưa ta tới một lệnh nhảy jmp 004010D0 Ừm, xem chuyện gì sẽ xảy ra
Chuỗi sau: P$.exe liên hệ tới một bộ đệm mà chứa tên file vir (địa chỉ đã được thay đổi) Sau đó, một file gắn với tên của nó được tạo Thuộc tính của file sẽ là
SYSTEM+READONLY và một bộ đệm dữ liệu mà được đọc trong hàm ở
004011F0 sẽ được ghi vào file mới
Chúng ta rút ra nhận xét là hàm này với hàm L004011F0 sẽ đọc file host với filr Vir, và ghi chúng tới một file P$.exe và thực thi nó
Chúng ta nghiên cứu tiếp hàm tại L00401910:
Trang 3Như chúng ta thấy, công việc này sẽ lặp lại trong partition C đến partition Z
Kế đến là sự kiểm tra xem có ổ đĩa di động hay không, nếu có chúng ta sẽ gặp một hàm là L00401005, rồi đến một lệnh nhảy jmp 00401973 để đến lời gọi hàm con L00401005
Địa chỉ kế sẽ là L004019C0, nhưng vì nó là một hàm chính của VIR, nên tôi sẽ bàn sau
Giờ là L00401330:
Hãy xem qua các lời gọi API:
GetFileAttributesA ; chộp lấy thuộc tính của File và lưu trữ chúng
SetFileAttributesA (0x80 là một tham số (FILE_ATTRIBUTE_NORMAL)) ;
Thuộc tính bình thường
CreateFileA (<VirusFileName>, GENERIC_READ, FILE_SHARE_READ, 0,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); Mở file Vir
GlobalAlloc ; cấp phát vùng nhớ
GlobalLock ; khóa vùng nhớ
ReadFile(<Handle To Viral File>, Allocated memory,000058FFh , L004236F4 ,
0) ; đọc tên của VIR
CloseHandle ; xóa chỉ số điều khiển File
Trang 4CreateFile(<file that serves as argument to this function (victimfile)>,
GENERIC_READ + GENERIC_WRITE, FILE_SHARE_READ +
FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) ; Mở victim file
GetFileSize(<victimfile>) ; lấy kích cỡ victim
GlobalAlloc ; cấp phát memory
GlobalLock ; lock it
SetFilePointer (7 bytes before victim's end) ; duh
ReadFile (7 bytes) ; duh
lstrcmpA(readbytes,"BogimpX") ;So sánh bytes đã đọc với chuỗi "BogimpX", đây
là tín hiệu bị lây nhiễm
SetFilePointer(To begin) ; duh
ReadFile(VictimFile Handle, allocated memory, VictimSize, L004236F4
(bytesread) , 0) ;Đọc thân mã VICTIm
CloseHandle
Trang 5CreateFile("penor.exe", GENERIC_WRITE, FILE_SHARE_WRITE, 0,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0) ; Tạo một file tạm mà
sẽ lưu giữ victim được gắn kết
SetFilePointer(begin)
WriteFile(tempfile handle, L004236F8 (viral body) , 000058FFh ,
L004236F0(byteswritten) , 0) ; ghi mã viral body vào file tạm
WriteFile(Tempfile handle,L004236EC (victim
body),L004236DC(Victimsize),L004236F0 (byteswritten) , 0); ghi host body vào file tạm
WriteFile(Tempfile handle,"BogimpX",7,L004236F0 (byteswritten),0) ; Ghi dấu hiệu bị lây nhiễm
CloseHandle
CopyFileA("penor.exe",victimfile) ; Ghi file được kết hợp đến Victim
DeleteFileA("penor.exe");xóa file tạm
SetFileAttributesA(victimfile,host's original attributes)
Thường trình này là một thường trình gắn kết Virus sẽ xem xét thuộc tính của HOST, thiết lập trở thành NORMAL, rồi mở VIR, cấp phát bộ nhớ, đọc thân virus, đóng file, mở VICTIM, lấy kích cỡ FILE, đọc 7 bytes cuối, kiểm tra xem đã bị lây nhiễm chưa, nếu chưa thì chép thân virus vào, đóng file, tạo một file tạm, ghi virus, host và dấu hiệu lây nhiễm vào file đó rồi ghi đè file host ban đầu
L004019C0 : Hàm chính của VIR sẽ như thế này:
Trang 6Vì thế, tóm gọn là nó sẽ tìm kiếm thông tin về tên và kích cỡ của VIR (chính nó), sau đó sẽ scan tất cả ổ đĩa và thư mục con, lây nhiễm tất cả các file *.exe Trong trường hợp kích cỡ có tăng dần lên thì sẽ được tạo sự gắn kết và thực thi host
UNPACK ARMADILLO 3.70a
Target : VCT crackme #5