1.样本概况

病毒名称 Virus.Win32.Virut.ce
MD5 6A500B42FC27CC5546079138370C492F
文件大小 131 KB (134,144 字节)
壳信息 无壳
文件名 9-29_vir.exe(感染程序)
数字签名 NO
时间戳 2000年1月10日, 12:00:00

1.1 样本行为

 恶意代码为感染型病毒,母体病毒通过将正常的PE文件进行加密,然后每个受感染的文件又可以进行全盘传播,通过连接国外IP服务器发送上线报文。

1.2 测试环境及工具

操作系统 Windows7(x86)
行为检测 Wireshark、Api Monitor、Malware Defender
文件检测 010 Editor、PEID
虚拟机平台 VMware10
调试工具 OD、IDA

1.3 分析目标

 1)样本的网络行为、文件行为

 2)感染传播的方式

2、具体行为分析

2.1 主要行为概述

2.2 恶意程序对用户造成的危害

2.2.1 感染途径

  • 通过母体文件,或被母体文件感染过的文件感染。

  • 运行后会将恶意代码以及模块注入explorer.exe\Conhost.exe\winlogo.exe\dwm.exe等进程。

2.2.2 恶意行为

  • 感染已经打开的进程和磁盘可执行文件,重写程序入口点的代码并指向病毒代码。

  • 与国外IP发送数据包进行通讯连接。

2.3 恶意代码分析

2.3.1 恶意程序加固方式

 1)加密处理:病毒代码处理经过多层的解密指令,运行过程中对后续代码进行解密,解密代码会变形。例如原反汇编指令代码如下:


  1. 00424772 imul edx,eax,0xCFA924B3
  2. 00424778 mov ecx,0x1A7DDAE2
  3. 0042477D sbb byte ptr ss:[ebp-0x223],dh; 带借位减法指令,这里会修改42479D位置的ret变成call
  4. 00424783 pop edi
  5. 00424784 lea edi,dword ptr ds:[edi-0x69B4>
  6. 0042478A test dl,bh ; dl = 4D('M');查找文件头
  7. 0042478C mov dl,ah
  8. 0042478E adc al,bl
  9. 00424790 adc al,cl
  10. 00424792 push dword ptr ss:[ebp-0x17D]
  11. 00424798 add edi,ebp ; 9-29_vir.004249C0
  12. 0042479A xchg cl,cl
  13. 0042479C pop edx
  14. 0042479D retn ; import - NoTips ---- By Jmp2 -
  15. 0042479E add al,0x3
  16. 004247A0 add byte ptr ds:[eax],al
  17. 004247A2 mov edi,edi

 执行完【0042477D sbb byte ptr ss:[ebp-0x223],dh】这条语句后,机器码为C3的改成了E8,ret就变成了call。修改后的代码如下:

图:指令被修改

 2)花指令:代码会在指令中增加00,在鼠标滑动时指令发生变化。

图:花指令

2.3.2 恶意行为过程截获

  • 恶意行为

    (1)修改其他进程的内存:

图:修改其程序内存

(2)API行为监控:

图:API行为监控

(3)感染文件变化:

图:源文件与感染文件对比

  • 网络行为

 通过Malware Defender对被感染的文件进行监控,发现每个被感染的文件自成母体病毒文件向当前的系统进程dwm.exe进行了修改。通过dwm.exe文件访问国外IP。

图:注入进程,进程访问网络

 病毒运行后会访问国外IP:148.81.111.121,通过VT查询该IP与多个恶意代码HASH绑定,Wireshark抓包后的数据包:

图:访问IP

 通过Windows系统自带的DNS记录跟踪大量域名后,通过系统命令确定病毒感染后访问的国外IP绑定的域名为ant.trenz.pl。

图:Windwos自带DNS记录访问的域名

图:系统命令关联域名的IP地址

2.3.3 恶意程序的代码分析记录

2.3.3.1 调用病毒代码

 病毒代码执行前,首先获取kernel32.dll入口循环遍历代码所需函数,通过IDA静态可查看代码运行的结构是在不断进行循环。

图:OD-kernel32入口地址

图:IDA-kernel32函数地址遍历

 当面对这类感染类病毒,很多使用寄存器进行传值的指令是无法用IDA轻轻松松F5查看源码的。

 所以分析过程中我采用通过行为监控+动态调试的思路分析!打开Malware Defender,借助吾爱破解OD进行F8单层步过直到程序结束。当Malware Defender出现关键行为时,对走过的call进行记录,然后深入这个call再逐层分析。

 跟踪到第6个函数时,程序出现了修改其他进程内存、其他进程中创建线程的行为。

图:第6个call为重点分析函数

 通过反复还原虚拟机快照对比,发现该病毒在感染后 [cmp al,bl]执行的分支是不一样的,如果没有被感染的系统JNZ不跳转程序继续向下执行,否则JNZ则跳转到下一个分支处。对比值是eax与ebx的寄存器的低位值。此时的AL与BL的值分别为:Al=B7,Bl=00。

 为了验证这个【B7】的值是否为随机值,切换到另外一台虚拟机再次单步跟踪有操作EAX的的位置,发现在00424A38地址处执行完【mov eax,dword ptr ds:[eax+0x34];】,B7的值就没有发生过改变,由此得出B7这个值就是病毒判断系统有没有被感染的标识,对比反汇编代码如下:

  1. 00424A38 mov eax,dword ptr ds:[eax+0x34]; 获取感染标志位
  2. 00424A3B jmp short 9-29_vir.00424A5D
  3. 00424A3D and al,0xFF
  4. 00424A3F cmc
  5. 00424A40 mov edx,0x8B090FE1
  6. 00424A45 sete dh
  7. 00424A48 inc ch
  8. 00424A4A push 0xC0FCDCDC
  9. 00424A4F call 9-29_vir.00424845 ; ----
  10. 00424A54 and al,al
  11. 00424A56 xor ecx,ebp ; 9-29_vir.004249C0
  12. 00424A58 call 9-29_vir.00424841 ; -----
  13. 00424A5D cmp al,bl ; 判断是否被感染
  14. 00424A5F jnz short 9-29_vir.00424A6A; 已感染则跳转
  15. 00424A61 xchg dh,al ; 该分支1在未感染时,执行
  16. 00424A63 xchg esi,edx
  17. 00424A65 call 9-29_vir.00424702 ; ;重点分析函数;import
  18. 00424A6A push 0xBC8257D8 ; 感染后执行的分支2
  19. 00424A6F jmp short 9-29_vir.00424A74
  20. 00424A71 mov ebx,ebx ; kernel32.75EC0000
  21. 00424A73 clc
  22. 00424A74 xchg ch,cl

所有寄存器当前的值如下:

  1. EAX 000000B7
  2. ECX 0012FF70
  3. EDX 00000000
  4. EBX 75EC0000 kernel32.75EC0000
  5. ESP 0012FF38
  6. EBP 004249C0 9-29_vir.004249C0
  7. ESI E2FCE64A
  8. EDI 00000506
  9. EIP 00424A5D 9-29_vir.00424A5D
  10. C 1 ES 0023 32 0(FFFFFFFF)
  11. P 1 CS 001B 32 0(FFFFFFFF)
  12. A 0 SS 0023 32 0(FFFFFFFF)
  13. Z 1 DS 0023 32 0(FFFFFFFF)
  14. S 0 FS 003B 32 7FFDE000(4000)
  15. T 0 GS 0000 NULL
  16. D 0
  17. O 0 LastErr ERROR_ALREADY_EXISTS (000000B7)
  18. EFL 00000247 (NO,B,E,BE,NS,PE,GE,LE)
  19. ST0 empty 0.0
  20. ST1 empty 0.0
  21. ST2 empty 0.0
  22. ST3 empty 0.0
  23. ST4 empty 0.0
  24. ST5 empty 0.0
  25. ST6 empty 0.0
  26. ST7 empty 0.0
  27. 3 2 1 0 E S P U O Z D I
  28. FST 0000 Cond 0 0 0 0 Err 0 0 0 0 0 0 0 0 (GT)
  29. FCW 027F Prec NEAR,53 掩码 1 1 1 1 1 1

 当前已知关键感染代码都在00424A65地址的call内,那么按照原有思路继续根据行为找关键call,F8单步跟踪所有的call后借助监控行为软件的结果细化分析各层call内的反汇编指令。

2.3.3.2 代码混淆

 病毒代码处理存在两种方式,一种是对后续代码进行解密,解密代码会变形。另一种是后续代码是明文未加密直接调用明文。例如原反汇编指令代码如下:


  1. 00424772 imul edx,eax,0xCFA924B3
  2. 00424778 mov ecx,0x1A7DDAE2
  3. 0042477D sbb byte ptr ss:[ebp-0x223],dh ; 带借位减法指令,这里会修改42479D位置的ret变成call
  4. 00424783 pop edi
  5. 00424784 lea edi,dword ptr ds:[edi-0x69B4>
  6. 0042478A test dl,bh ; dl = 4D('M');查找文件头
  7. 0042478C mov dl,ah
  8. 0042478E adc al,bl
  9. 00424790 adc al,cl
  10. 00424792 push dword ptr ss:[ebp-0x17D]
  11. 00424798 add edi,ebp ; 9-29_vir.004249C0
  12. 0042479A xchg cl,cl
  13. 0042479C pop edx
  14. 0042479D retn ; import - NoTips ---- By Jmp2 -
  15. 0042479E add al,0x3
  16. 004247A0 add byte ptr ds:[eax],al
  17. 004247A2 mov edi,edi

执行完【0042477D sbb byte ptr ss:[ebp-0x223],dh】这条语句后,机器码为C3的改成了E8,ret就变成了call。修改后的代码如下:

图:指令被修改

在跟随中遇到获取kernel32.dll解密代码的算法。反汇编代码如下:

  1. 00424896 xor eax,eax ; kernel32.BaseThreadInitThunk
  2. 00424898 imul eax,eax,0xF ; eax == eax*0xF
  3. 0042489B lea ebx,dword ptr ds:[esi-0x18]; ebx = esi - 0x18
  4. 0042489E inc ebx ; ebx = ebx + 1
  5. 0042489F lea ebx,dword ptr ds:[eax-0x3] ; ebx = eax-0x3
  6. 004248A2 movzx ecx,byte ptr ds:[esi+0x3]; Kernel32函数存放
  7. 004248A6 sbb bh,0xCB ; bh = bh - bh - CF
  8. 004248A9 dec ebx ; ebx = ebx - 1
  9. 004248AA adc bl,0x25 ; bl =bl + 0x25 + CF
  10. 004248AD not ebx ; 位翻转指令,将操作数中的每一位翻转
  11. 004248AF sub eax,ecx ; eax = eax - ecx
  12. 004248B1 sub esi,-0x12
  13. 004248B4 lea esi,dword ptr ds:[esi-0x11]; 取有效地址
  14. 004248B7 cmp byte ptr ds:[esi+0x3],0xA ; 获取所有kernel32.dll函数
  15. 004248BB jnb short 9-29_vir.00424898 ;大于或等于转移,因为kernel32.dll函数后的下一个是0xA(换行符)

图:OD-反汇编代码

指令块通过jmp连接,跳转后有指令变形的红色提示。

图:通过JMP连接

2.3.3.3 挂钩底层API函数

 进入代码变形后的指令继续跟踪,发现挂钩了底层API函数。对应的七个函数分别为ZwCreateFile、ZwOpenFile、ZwCreateProcess、ZwCreateProcessEx、ZwCreateUserProcess、ZwQueryInformationProcess、ZwDeviceIoControlFile;反汇编指令如下:

  1. 0041E339 mov eax,dword ptr ss:[ebp+0xD2723C6] ; ntdll.ZwCreateFile
  2. 0041E33F push dword ptr ds:[eax+0x1]
  3. 0041E342 pop dword ptr ss:[ebp+0xD277592]
  4. 0041E348 cmp dword ptr ss:[ebp+0xD277592],0xFFFF
  5. 0041E352 ja 9-29_vir.0041E2A9
  6. 0041E358 mov eax,dword ptr ss:[ebp+0xD2723E2] ; ntdll.ZwOpenFile
  7. 0041E35E push dword ptr ds:[eax+0x1]
  8. 0041E361 pop dword ptr ss:[ebp+0xD277617]
  9. 0041E367 cmp dword ptr ss:[ebp+0xD277617],0xFFFF
  10. 0041E371 ja 9-29_vir.0041E2A9
  11. 0041E377 mov eax,dword ptr ss:[ebp+0xD2723CA] ; ntdll.ZwCreateProcess
  12. 0041E37D push dword ptr ds:[eax+0x1]
  13. 0041E380 pop dword ptr ss:[ebp+0xD277621]
  14. 0041E386 cmp dword ptr ss:[ebp+0xD277621],0xFFFF
  15. 0041E390 ja 9-29_vir.0041E2A9
  16. 0041E396 mov ecx,dword ptr ss:[ebp+0xD2723CE] ; ntdll.ZwCreateProcessEx
  17. 0041E39C jecxz short 9-29_vir.0041E3D8
  18. 0041E39E push dword ptr ds:[ecx+0x1]
  19. 0041E3A1 pop dword ptr ss:[ebp+0xD27762E]
  20. 0041E3A7 cmp dword ptr ss:[ebp+0xD27762E],0xFFFF
  21. 0041E3B1 ja 9-29_vir.0041E2A9
  22. 0041E3B7 mov ecx,dword ptr ss:[ebp+0xD2723D6] ; ntdll.ZwCreateUserProcess
  23. 0041E3BD jecxz short 9-29_vir.0041E3D8
  24. 0041E3BF push dword ptr ds:[ecx+0x1]
  25. 0041E3C2 pop dword ptr ss:[ebp+0xD27763B]
  26. 0041E3C8 cmp dword ptr ss:[ebp+0xD27763B],0xFFFF
  27. 0041E3D2 ja 9-29_vir.0041E2A9
  28. 0041E3D8 mov ecx,dword ptr ss:[ebp+0xD2723F2] ; ntdll.ZwQueryInformationProcess
  29. 0041E3DE jecxz short 9-29_vir.0041E3FC
  30. 0041E3E0 push dword ptr ds:[ecx+0x1]
  31. 0041E3E3 pop dword ptr ss:[ebp+0xD27766F]
  32. 0041E3E9 cmp dword ptr ss:[ebp+0xD27766F],0xFFFF
  33. 0041E3F3 jbe short 9-29_vir.0041E3FC
  34. 0041E3F5 and dword ptr ss:[ebp+0xD2723F2],0x0
  35. 0041E3FC lea eax,dword ptr ss:[ebp+0xD2721A4]
  36. 0041E402 lea edi,dword ptr ss:[ebp+0xD277934]
  37. 0041E408 push eax ; ntdll.ZwDeviceIoControlFile

图:OD-挂钩七个底层API函数

2.3.3.4 自身映射到开辟的内存中

 第三层数第3个call后。F8跟踪过程中有一个底层API函数,ZwMapViewOfSection作用为创建内存将自身映射到进程中:

图:OD-调用ZwMapViewOfSection

2.3.3.5 解密代码

 第三层第4个call中还在进行多个循环进行判断解密长度、解密数据,当这个call运行完毕,指令块发生改变。

  1. 001F035B sub ebx,0x66E4
  2. 001F0361 and ecx,0x7FFF
  3. 001F0367 bt dword ptr ss:[ebp+0xD271C9E],ebx
  4. 001F036E jnb short 001F0373
  5. 001F0370 inc esi
  6. 001F0371 jmp short 001F0399
  7. 001F0373 cmp dword ptr ss:[ebp+0xD271E1A],0x0
  8. 001F037A je short 001F0398
  9. 001F037C mov eax,ebx
  10. 001F037E sub eax,dword ptr ss:[ebp+0xD271E1A]
  11. 001F0384 jb short 001F0398
  12. 001F0386 cmp eax,0x4
  13. 001F038B jnb short 001F0398
  14. 001F038D mov al,byte ptr ds:[eax+ebp+0xD271E1E]
  15. 001F0394 inc esi
  16. 001F0395 stos byte ptr es:[edi]
  17. 001F0396 jmp short 001F0399
  18. 001F0398 movs byte ptr es:[edi],byte ptr ds:[esi]
  19. 001F0399 inc ebx
  20. 001F039A loopd short 001F0367 ; 循环204
  21. 001F039C inc dl
  22. 001F039E pop esi ; 001F0780
  23. 001F039F cmp dl,byte ptr ss:[ebp+0xD27189D] ; 比对条件,对指令变形
  24. 001F03A5 jb short 001F0340
  25. 001F03A7 push 0x2E
  26. 001F03AC lea esi,dword ptr ss:[ebp+0xD271E22]
  27. 001F03B2 pop ecx ; 001F0780
  28. 001F03B3 movzx edx,word ptr ds:[esi]
  29. 001F03B6 movzx eax,word ptr ds:[esi+0x4]
  30. 001F03BA movzx ebx,word ptr ds:[esi+0x2]
  31. 001F03BE sub eax,ebx
  32. 001F03C0 mov dword ptr ds:[edx+ebp+0xD271000],eax
  33. 001F03C7 sub ebx,edx
  34. 001F03C9 mov al,byte ptr ds:[edx+ebp+0xD270FFF]
  35. 001F03D0 cmp ebx,0x4 ; 比对长度
  36. 001F03D3 jnz short 001F0401
  37. 001F03D5 cmp al,0xE8
  38. 001F03D7 je short 001F0401
  39. 001F03D9 cmp al,0xE9
  40. 001F03DB je short 001F0401
  41. 001F03DD cmp al,0xEB
  42. 001F03DF jnz short 001F03EB
  43. 001F03E1 mov byte ptr ds:[edx+ebp+0xD270FFF],0xE9
  44. 001F03E9 jmp short 001F0401
  45. 001F03EB mov al,0xF
  46. 001F03ED xchg byte ptr ds:[edx+ebp+0xD270FFE],al
  47. 001F03F4 cmp al,0xF
  48. 001F03F6 je short 001F0401
  49. 001F03F8 add al,0x10
  50. 001F03FA mov byte ptr ds:[edx+ebp+0xD270FFF],al
  51. 001F0401 add esi,0x6
  52. 001F0404 loopd short 001F03B3 ; 循环46

图:OD-Loop循环结束,指令块发生改变

2.3.3.6 遍历进程

 跟进001F0796这个call内,病毒在此处进行了遍历进程的操作,但在此之前调用了FreeLibrary、CloseHandle可见已经进行了加载某个模块的操作。通过CreateToolhelp32Snapshot通过获取进程信息、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照,然后跳过前4个进程后程序继续向下执行,反汇编代码如下:

  1. 001F07C9 call dword ptr ss:[ebp+0xD2722E6]; kernel32.CreateToolhelp32Snapshot
  2. 001F07CF mov ecx,0x128
  3. 001F07D4 xchg eax,edi
  4. 001F07D5 sub esp,ecx
  5. 001F07D7 mov dword ptr ss:[esp],ecx
  6. 001F07DA push esp ; 进程结信息结构体
  7. 001F07DB push edi ; 句柄
  8. 001F07DC call dword ptr ss:[ebp+0xD27233E]; kernel32.Process32First
  9. 001F07E2 xor esi,esi
  10. 001F07E4 and dword ptr ss:[ebp+0xD277A94],0x0
  11. 001F07EB push esp ; 进程结信息结构体
  12. 001F07EC push edi ; 句柄
  13. 001F07ED call dword ptr ss:[ebp+0xD272342]; kernel32.Process32Next
  14. 001F07F3 test eax,eax
  15. 001F07F5 je short 001F0865
  16. 001F07F7 inc esi
  17. 001F07F8 cmp esi,0x4 ; 4个进程名则继续遍历
  18. 001F07FB jb short 001F07EB
  19. 001F07FD push dword ptr ss:[esp+0x8] ; 进程标示符
  20. 001F0801 push 0x0 ; 是否继承句柄
  21. 001F0803 push 0x2A ; 渴望得到的访问权限

图:OD-遍历进程

2.3.3.7 创建远程线程注入

前四个进程遍历后使用OpenProcess做打开操作, CreateRemoteThread创建远程线程,反汇编如下:

  1. 001F07F8 cmp esi,0x4 ; 4个进程名则继续遍历
  2. 001F07FB jb short 001F07EB
  3. 001F07FD push dword ptr ss:[esp+0x8]; 进程标示符
  4. 001F0801 push 0x0 ; 是否继承句柄
  5. 001F0803 push 0x2A ; 渴望得到的访问权限
  6. 001F0805 call dword ptr ss:[ebp+0xD27233A]; kernel32.OpenProcess
  7. 001F080B test eax,eax
  8. 001F080D je short 001F07EB
  9. 001F080F xchg eax,ebx
  10. 001F0810 call 001F2574
  11. 001F0815 xor ecx,ecx
  12. 001F0817 xchg eax,ecx
  13. 001F0818 jecxz short 001F085C
  14. 001F081A cmp dword ptr ss:[ebp+0xD277A94],eax
  15. 001F0820 jnz short 001F085C
  16. 001F0822 mov edx,dword ptr ss:[esp+0x24]
  17. 001F0826 or edx,0x20202020
  18. 001F082C cmp edx,0x73727363
  19. 001F0832 je short 001F085C
  20. 001F0834 add ecx,0x3C38
  21. 001F083A push eax
  22. 001F083B push esp
  23. 001F083C push eax
  24. 001F083D push esi
  25. 001F083E push ecx
  26. 001F083F push eax
  27. 001F0840 push eax ; 指向SECURITY_ATTRIBUTES结构指定新的线程安全描述符
  28. 001F0841 push ebx ; 进程句柄
  29. 001F0842 call dword ptr ss:[ebp+0xD2722DE]; kernel32.CreateRemoteThread

图:OD-创建远程线程注入

2.3.3.8 修改进程内存

 单步跟踪发现每次经过001F0810地址的call便会出现修改其他进程内存的操作, 深入分析,发现这个call内会挂钩其七个api函数,挂钩的已知Api函数名为:ZwOpenSection、ZwMapViewOfSection、ZwDeviceIoControlFile、ZwCreateFile、ZwOpenFile、ZwCreateProcess、ZwCreateProcessEx、ZwCreateUserProcess、ZwQueryInformationProcess,反汇编如下:

  1. 001F255D push eax
  2. 001F255E call dword ptr ss:[ebp+0xD2723EA]; ntdll.ZwOpenSection
  3. 001F2564 add esp,0x20
  4. 001F2567 xor edx,edx
  5. 001F2569 test eax,eax
  6. 001F256B setns dl
  7. 001F256E neg edx
  8. 001F2570 pop eax ; 001F0863
  9. 001F2571 and eax,edx
  10. 001F2573 retn ; 这里直接跳转到下一个函数
  11. 001F2574 push edi
  12. ……….
  13. 001F2574 push edi
  14. 001F2575 xor edi,edi
  15. 001F2577 call 001F252F
  16. 001F257C je 001F2661
  17. 001F2582 push eax
  18. 001F2583 push 0xB7C4
  19. 001F2588 mov edx,esp
  20. 001F258A push 0x0
  21. 001F258C mov ecx,esp
  22. 001F258E push 0x40 ; Win32Protect
  23. 001F2590 push 0x100000; AllocationType
  24. 001F2595 push 0x2 ; InheritDisposition
  25. 001F2597 push edx ; ViewSize
  26. 001F2598 push 0x0 ; SectionOffset
  27. 001F259A push 0xB7C4 ; CommitSize
  28. 001F259F push 0x0 ; ZeroBits
  29. 001F25A1 push ecx ; *BaseAddress
  30. 001F25A2 push ebx ; ProcessHandle
  31. 001F25A3 push eax ; SectionHandle
  32. 001F25A4 call dword ptr ss:[ebp+0xD2723DE]; ntdll.ZwMapViewOfSection
  33. 001F25AA pop edi
  34. 001F25AB pop ecx
  35. 001F25AC call dword ptr ss:[ebp+0xD2722C6]; kernel32.CloseHandle
  36. 001F25B2 test edi,edi
  37. 001F25B4 je 001F2661
  38. 001F25BA mov ecx,dword ptr ss:[ebp+0xD271891]
  39. 001F25C0 jecxz short 001F25CE
  40. 001F25C2 lea edx,dword ptr ss:[ebp+0xD271000]
  41. 001F25C8 add edx,ecx
  42. 001F25CA push edi
  43. 001F25CB push ebx
  44. 001F25CC call edx ; ntdll.KiFastSystemCallRet
  45. 001F25CE>test dword ptr ss:[ebp+0xD275B83],0x
  46. 001F25D8 je short 001F25EF
  47. 001F25DA mov eax,dword ptr ss:[ebp+0xD2723DA]; ntdll.ZwDeviceIoControlFile
  48. 001F25E0 test eax,eax
  49. 001F25E2 je short 001F25EF
  50. 001F25E4 lea ecx,dword ptr ds:[edi+0x68B1]
  51. 001F25EA call 001F2477
  52. 001F25EF mov eax,dword ptr ss:[ebp+0xD2723C6]; ntdll.ZwCreateFile
  53. 001F25F5 lea ecx,dword ptr ds:[edi+0x6591]
  54. 001F25FB call 001F2477
  55. 001F2600 mov eax,dword ptr ss:[ebp+0xD2723E2]; ntdll.ZwOpenFile
  56. 001F2606 lea ecx,dword ptr ds:[edi+0x6616]
  57. 001F260C call 001F2477
  58. 001F2611 mov eax,dword ptr ss:[ebp+0xD2723CA]; ntdll.ZwCreateProcess
  59. 001F2617 lea ecx,dword ptr ds:[edi+0x6620]
  60. 001F261D call 001F2477
  61. 001F2622 mov eax,dword ptr ss:[ebp+0xD2723CE]; ntdll.ZwCreateProcessEx
  62. 001F2628 test eax,eax
  63. 001F262A je short 001F2637
  64. 001F262C lea ecx,dword ptr ds:[edi+0x662D]
  65. 001F2632 call 001F2477
  66. 001F2637 mov eax,dword ptr ss:[ebp+0xD2723D6]; ntdll.ZwCreateUserProcess
  67. 001F263D test eax,eax
  68. 001F263F je short 001F264C
  69. 001F2641 lea ecx,dword ptr ds:[edi+0x663A]
  70. 001F2647 call 001F2477
  71. 001F264C mov eax,dword ptr ss:[ebp+0xD2723F2]; ntdll.ZwQueryInformationProcess
  72. 001F2652 test eax,eax
  73. 001F2654 je short 001F2661
  74. 001F2656 lea ecx,dword ptr ds:[edi+0x666E]
  75. 001F265C call 001F2477
  76. 001F2661 mov eax,edi
  77. 001F2663 pop edi
  78. 001F2664 retn

图:OD-挂钩底层API函数

2.3.3.9 发送网络数据包

在远程线程注入执行后,在winlogon.exe进程出现了联网行为。再此之前的单步跟踪则是dwm.exe进行联网访问,推测病毒是将联网执行的恶意代码注入到某个进程后,将联网操作交给了被注入的进程中。且联网的进程是存在随机性的。

图:联网行为监控

运行后会访问国外IP:148.81.111.121,通过VT查询该IP与多个恶意代码HASH绑定,Wireshark抓包后的数据包:

图:访问IP

通过Windows系统自带的DNS记录跟踪大量域名后,用系统命令确定病毒感染后访问的国外IP绑定的域名为ant.trenz.pl。

图:Windwos自带DNS记录访问的域名

图:系统命令关联域名的IP地址

PChunter查看winlogon已经被注入了3个线程。

2.3.3.10 恢复执行原始文件

跟到最后的几个call,已经是运行原先程序的代码。因为我用母体感染的是我自己写的程序。printf(“11111111”)就是。。。

3、思考小结

这个病毒分析起来还是有难度的,病毒没有跟完,没有办法像某些常见病毒一样可以IDA F5大法轻松查看伪C代码。C和汇编的基础需要提升的前提下,也引发了一些思考。

1、病毒分析方面

  • 1)使用OD动态调试对于病毒运行的流程架构不像IDA一般清晰,如何使用IDAPython辅助将esi等寄存器传值的函数在IDA中标识出来让自己通过静态分析,提升分析速度。
  • 2)对于挂钩底层API函数这里,是在同事指点下修正过了。网上的文章分析中提到使用了zwXXXXX这类函数就是挂钩了内核函数是不严谨的。只能相当于调用了系统DLL中比较底层的函数,距离内核还差一段距离。

2、编程技术方面

  • 1)如果是我自己写这类程序,还有什么思路可以隐藏进程。
  • 2)注入到系统进程内存中的数据,采用什么手段可以排查。

4、参考

virut详细分析 - 米哈伊尔 - 博客园

http://www.cnblogs.com/Mikhail/p/5615286.html

Virut.ce-感染型病毒分析报告的更多相关文章

  1. [FreeBuff]Trojan.Miner.gbq挖矿病毒分析报告

    Trojan.Miner.gbq挖矿病毒分析报告 https://www.freebuf.com/articles/network/196594.html 竟然还有端口转发... 这哥们.. 江民安全 ...

  2. 一份通过IPC$和lpk.dll感染方式的病毒分析报告

    样本来自52pojie论坛,从事过两年渗透开始学病毒分析后看到IPC$真是再熟悉不过. 1.样本概况 1.1 样本信息 病毒名称:3601.exe MD5值:96043b8dcc7a977b16a28 ...

  3. 【Windows编程】大量病毒分析报告辅助工具编写

    解决重复劳动 是否在分析单个病毒时很爽,分析N个病毒写报告很机械的情况.. 1)样本下载多个文件,这些文件写报告时要加上这些文件的MD5 2)写报告时明明是17个MD5,实际样本有18个的情况.不知道 ...

  4. 【Android病毒分析报告】 - ZooTiger “集恶意推广、隐私窃取、恶意吸费于一体”

    本文章由Jack_Jia编写,转载请注明出处.  文章链接:http://blog.csdn.net/jiazhijun/article/details/11772379 作者:Jack_Jia    ...

  5. 【Android病毒分析报告】 - ZxtdPay 吸费恶魔

    本文章由Jack_Jia编写,转载请注明出处.  文章链接:http://blog.csdn.net/jiazhijun/article/details/11581543 作者:Jack_Jia    ...

  6. 【Android病毒分析报告】- 手机支付毒王“银行悍匪”的前世今生

    from://http://blog.csdn.net/androidsecurity/article/details/18984165 2014年1月8日,央视曝光了一款名为“银行悍匪”的手机银行木 ...

  7. PE文件附加数据感染之Worm.Win32.Agent.ayd病毒分析

    一.基本信息 样本名称:1q8JRgwDeGMofs.exe 病毒名称:Worm.Win32.Agent.ayd 文件大小:165384 字节 文件MD5:7EF5D0028997CB7DD3484A ...

  8. Android木马病毒com.schemedroid的分析报告

    某安全公司移动病毒分析报告的面试题目,该病毒样本的代码量比较大,最大的分析障碍是该病毒样本的类名称和类方法名称以及类成员变量的名称被混淆为无法辨认的特殊字符,每个被分析的类中所有的字符串都被加密处理了 ...

  9. 推荐一个利用 python 生成 pptx 分析报告的工具包:reportgen

    reportgen v0.1.8 更新介绍 这段时间,我对 reportgen 进行了大工程量的修改和更新.将之前在各个文章中出现的函数进行了封装,同时也对现有工具包的一些逻辑进行了调整. 1.rep ...

随机推荐

  1. alpha版发布

    网站网址:http://doeverying.applinzi.com/

  2. beta版本“足够好”/测试矩阵

    能通过地图鱼相应的地点信息实时交互,便于用户操作. 测试矩阵

  3. 使用Visual Studio 2013进行单元测试

    使用Visual Studio 2013进行单元测试 1.打开VS2013 --> 新建一个项目.这里我们默认创建一个控制台项目.取名为UnitTestDemo 2.在解决方案里面新增一个单元测 ...

  4. 2017-8-20 HTTP协议

    http协议 http协议是一种超文本传输协议(一种约定) 三大特性:无状态,媒体独立,无连接: HTTP 工作原理 HTTP协议工作于客户端-服务端架构为上.浏览器作为HTTP客户端通过URL向HT ...

  5. [转帖]第二个显示屏上禁用Windows任务栏

    http://os.51cto.com/art/201812/589207.htm 这个过程非常简单,你可以在一分钟内摆脱第二个屏幕上的任务栏. 您需要做的就是按照以下步骤操作: --打开设置,然后转 ...

  6. msyql: navicat 连接时msyql遇到的问题

    1.使用 mysql的用户,密码连接 服务器上的MySQL时,连接不上,报 100xx的错误. 1)原因是,MySQL默认情况下,只允许本地连接[127.0.0.1,或localhost]来连接mys ...

  7. OneZero第二周第三次站立会议(2016.3.30)

    会议时间:2016年3月30日  13:00~13:20 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:汇报前一天工作,全体成员评论,确定会后修改内容或分配下一步任务. 会议内容: 1.前端,完成功 ...

  8. MongoDB高级操作(2)

    查询方法-常用查询方法 查询多条数据 --db.集合名称.find({条件文档}) 查询一条数据 --db.集合名称.findOne({条件文档}) 结果格式化 --pretty()方法 --db.集 ...

  9. MT【180】齐次化+换元

    已知实数$a,b$满足$a^2-ab-2b^2=1,$则$a^2+b^2$的取值范围_____ 解答:$\textbf{方法一}$由已知得$(a-2b)(a+b)=1$,设$x=a-2b,y=a+b$ ...

  10. Spring点滴十:Spring自动装配(Autowire)

    在基于XML配置元数据,在bean的配置信息中我们可以使用<constructor-arg/>和<property/>属性来实现Spring的依赖注入.Spring 容器也可以 ...