请选择 进入手机版 | 继续访问电脑版

潇潇编程综合教学网

 找回密码
 注册
Flash解密FRC(Flash Resource Catcher)注册会员邮箱认证须知!
查看: 2309|回复: 1

[原创] OD 解析EXE感染型木马文件7a3e0f74.exe

[复制链接]
潇潇 发表于 2015-5-8 23:07:34 | 显示全部楼层 |阅读模式
      分析环境:1、虚拟机环境VMware? Workstation_10.0.0 build-1295980  2、操作系统win2003sp2  3、无杀软环境
      第一步:查壳和脱壳,先把壳解决了更容易分析:


      再看下区段:


      不难看出应该是双壳或者有可能是伪装壳 ASPack 2.12 和 UPX ,两者都是压缩壳,先简单脱下ASPack 2.12,ESP定律法,OD载入到木马程序入口:
[Asm] 纯文本查看 复制代码
00421001 >  60               pushad                                    ; 程序入口
00421002    E8 03000000      call 7a3e0f74.0042100A
00421007  - E9 EB045D45      jmp 459F14F7
0042100C    55               push ebp
0042100D    C3               retn

      F8单步后,寄存器窗口的esp数据窗口中跟随,然后再在 Hex 数据下硬件访问word断点(或者直接在命令行输入 hr 0012FFA4),F9运行断在如下代码位置:
[Asm] 纯文本查看 复制代码
00421416   /75 08            jnz short 7a3e0f74.00421420               ; esp下断后F9运行断在这里
00421418   |B8 01000000      mov eax,1
0042141D   |C2 0C00          retn 0C
00421420   \68 00104000      push 7a3e0f74.00401000
00421425    C3               retn

      接下来单步3次到OEP位置:
[Asm] 纯文本查看 复制代码
00401000    55               push ebp                                  ; OEP
00401001    8BEC             mov ebp,esp
00401003    83EC 28          sub esp,28
00401006    8365 FC 00       and dword ptr ss:[ebp-4],0
0040100A    837D 0C 02       cmp dword ptr ss:[ebp+C],2
0040100E    74 30            je short 7a3e0f74.00401040
00401010    837D 0C 03       cmp dword ptr ss:[ebp+C],3
00401014    74 2A            je short 7a3e0f74.00401040
00401016    A1 68E14000      mov eax,dword ptr ds:[40E168]
……

      在00401000地址处用 OD 自带 dump 或别的工具 dump 得到 1.exe;再用 Imprec 工具看下函数指针是否有效,如果有无效指针则修复得到1_.exe文件。另外这里就不说脱壳后优化了,有兴趣的同学可以自己去做。
      第二步:OD 载入脱壳后的到OEP(注:下面的ASM代码只分析重点了):
[Asm] 纯文本查看 复制代码
00401000 >/$  55             push ebp                                           ;  OEP
00401001  |.  8BEC           mov ebp,esp
00401003  |.  83EC 28        sub esp,28
00401006  |.  8365 FC 00     and dword ptr ss:[ebp-4],0
0040100A  |.  837D 0C 02     cmp dword ptr ss:[ebp+C],2
0040100E  |.  74 30          je short 1_.00401040
00401010  |.  837D 0C 03     cmp dword ptr ss:[ebp+C],3
00401014  |.  74 2A          je short 1_.00401040
00401016  |.  A1 68E14000    mov eax,dword ptr ds:[<&kernel32.GetTempPathA>]    ;  取GetTempPathA地址
0040101B  |.  8945 D8        mov dword ptr ss:[ebp-28],eax
0040101E  |.  A1 38E14000    mov eax,dword ptr ds:[<&kernel32.GetSystemDirector>;  取GetSystemDirectory地址
00401023  |.  8945 DC        mov dword ptr ss:[ebp-24],eax
00401026  |.  68 A0354100    push 1_.004135A0                                   ;  系统临时目录路径的保存地址C:\Documents and Settings\Administrator\Local Settings\Temp
0040102B  |.  68 04010000    push 104
00401030  |.  FF55 D8        call dword ptr ss:[ebp-28]                         ;  GetTempPathA -->取系统临时目录路径
00401033  |.  68 04010000    push 104
00401038  |.  68 B0364100    push 1_.004136B0                                   ;  系统system32文件夹路径的保存地址C:\WINDOWS\system32
0040103D  |.  FF55 DC        call dword ptr ss:[ebp-24]                         ;  GetSystemDirectory 取系统system32的路径
00401040  |>  E8 00000000    call 1_.00401045                                   ; 注意这里F7进入,因这call的函数入口就在下一行反汇编代码
00401045  |$  8B0424         mov eax,dword ptr ss:[esp]
00401048  |.  83C4 04        add esp,4
0040104B  |.  8945 FC        mov dword ptr ss:[ebp-4],eax                       ;  00401045
0040104E  |.  6A 1C          push 1C                                            ; /BufSize
00401050  |.  8D45 E0        lea eax,dword ptr ss:[ebp-20]                      ; |
00401053  |.  50             push eax                                           ; |Buffer-->0012FFA0指向MEMORY_BASIC_INFORMATION结构的指针,用于接收内存信息。
00401054  |.  FF75 FC        push dword ptr ss:[ebp-4]                          ; |Address 00401045
00401057  |.  FF15 0CE14000  call dword ptr ds:[<&kernel32.VirtualQuery>]       ; \查询地址00401045空间中内存地址的信息
0040105D  |.  8B45 E4        mov eax,dword ptr ss:[ebp-1C]
00401060  |.  A3 38434100    mov dword ptr ds:[414338],eax                      ;  00400000
00401065  |.  6A 00          push 0                                             ; /pModule = NULL
00401067  |.  FF15 20E14000  call dword ptr ds:[<&kernel32.GetModuleHandleW>]   ; \GetModuleHandleW获取自身应用程序句柄
0040106D  |.  3B05 38434100  cmp eax,dword ptr ds:[414338]                      ;  判断是否为自进程句柄
00401073  |.  74 12          je short 1_.00401087                               ;  跳转实现
00401075  |.  FF75 10        push dword ptr ss:[ebp+10]                         ; /Arg3
00401078  |.  FF75 0C        push dword ptr ss:[ebp+C]                          ; |Arg2
0040107B  |.  FF75 08        push dword ptr ss:[ebp+8]                          ; |Arg1
0040107E  |.  E8 1A4A0000    call 1_.00405A9D                                   ; \1_.00405A9D
00401083  |.  C9             leave
00401084  |.  C2 0C00        retn 0C
00401087  |>  6A 01          push 1
00401089  |.  6A 00          push 0
0040108B  |.  E8 58230000    call 1_.004033E8                                   ;  F7进入创建木马的相关文件、注册表操作、服务操作等
00401090  |.  6A 00          push 0                                             ; /ExitCode = 0
00401092  \.  FF15 F8E04000  call dword ptr ds:[<&kernel32.ExitProcess>]        ; \kernel32.ExitProcess 目标完成后结束自进程
00401098   .  C9             leave
00401099   .  C2 1000        retn 10

      上面的代码中,F7进入地址0040108B的 call 1_.004033E8,一直F7,注意里面有一部分循环计算啥的不知道,总之一直F7直到:
[Asm] 纯文本查看 复制代码
0040109C  /.  55             push ebp                                  ;  F7直到这里
0040109D  |.  8BEC           mov ebp,esp
0040109F  |.  E8 201C0000    call 1_.00402CC4                         ;  F7进入,看下面的汇编代码
004010A4  |.  E8 51160000    call 1_.004026FA                          ;  生成一个路径为C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\随机名称.log文件
004010A9  |.  85C0           test eax,eax                              ;  eax=1
004010AB  |.  75 02          jnz short 1_.004010AF                     ;  如果eax>0则跳
004010AD  |.  EB 21          jmp short 1_.004010D0
004010AF  |>  833D 58384100 >cmp dword ptr ds:[413858],1               ;  如果[413858]=1,则不跳转
004010B6  |.  75 0A          jnz short 1_.004010C2
004010B8  |.  68 84394100    push 1_.00413984                                ; /Arg1 = 00413984 ASCII "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\699340D1.log"
004010BD  |.  E8 28960000    call 1_.0040A6EA                                ; 截图函数,截图后保存为699340D1.log
004010C2  |>  E8 1A090000    call 1_.004019E1                               ;未知过程,F7好多次都没执行完
004010C7  |.  85C0           test eax,eax                                              ;eax=0                                      
004010C9  |.  75 05          jnz short 1_.004010D0                             ;跳转未实现
004010CB  |.  E8 91040000    call 1_.00401561              ;创建木马的相关文件、注册表操作、服务操作等
004010D0  |>  5D             pop ebp                                 ; 到此已经生成148大小的dll木马文件13个
004010D1  \.  C3             retn


//上面CALL执行完成后所生成同大小的(148kb)的tmp和dl木马文件有14个。

0040109F  |.  E8 201C0000    call 1_.00402CC4                         ;  F7进入,看下面的汇编代码
[Asm] 纯文本查看 复制代码
00402CC4   $  55             push ebp
00402CC5   .  8BEC           mov ebp,esp
00402CC7   .  6A FF          push -1
00402CC9   .  68 48F04000    push 1_.0040F048
00402CCE   .  68 1AD24000    push <jmp.&msvcrt._except_handler3>              ;  SE 处理程序安装
00402CD3   .  64:A1 00000000 mov eax,dword ptr fs:[0]                         ;  TEB-->fs:[0]指向SEH链指针
00402CD9   .  50             push eax
00402CDA   .  64:8925 000000>mov dword ptr fs:[0],esp
00402CE1   .  51             push ecx
00402CE2   .  51             push ecx
00402CE3   .  83EC 10        sub esp,10
00402CE6   .  53             push ebx
00402CE7   .  56             push esi
00402CE8   .  57             push edi
00402CE9   .  8965 E8        mov dword ptr ss:[ebp-18],esp
00402CEC   .  C745 E0 000000>mov dword ptr ss:[ebp-20],4000000
00402CF3   .  8365 E4 00     and dword ptr ss:[ebp-1C],0
00402CF7   .  8365 DC 00     and dword ptr ss:[ebp-24],0
00402CFB   .  A1 4CE14000    mov eax,dword ptr ds:[<&kernel32.VirtualAlloc>]  ;  kernel32.VirtualAlloc
00402D00   .  8945 D8        mov dword ptr ss:[ebp-28],eax
00402D03   .  8365 FC 00     and dword ptr ss:[ebp-4],0
00402D07   .  6A 40          push 40
00402D09   .  68 00300000    push 3000
00402D0E   .  FF75 E0        push dword ptr ss:[ebp-20]                       ;  4000000
00402D11   .  6A 00          push 0
00402D13   .  FF55 D8        call dword ptr ss:[ebp-28]                       ;  分配内存地址,成功返回已分配内存的首地址
00402D16   .  8945 DC        mov dword ptr ss:[ebp-24],eax                    ;  01110000
00402D19   .  837D DC 00     cmp dword ptr ss:[ebp-24],0
00402D1D   .  75 06          jnz short 1_.00402D25                            ;  [ebp-24]>0跳转实现
00402D1F   .  834D FC FF     or dword ptr ss:[ebp-4],FFFFFFFF
00402D23   .  EB 68          jmp short 1_.00402D8D
00402D25   >  FF75 E0        push dword ptr ss:[ebp-20]                       ; /4000000
00402D28   .  68 90000000    push 90                                          ; |c = 90
00402D2D   .  FF75 DC        push dword ptr ss:[ebp-24]                       ; |01110000
00402D30   .  E8 79A40000    call <jmp.&msvcrt.memset>                        ; \0040D1AE=<jmp.&msvcrt.memset> -->用0x90初始化
//01110000  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90  悙悙悙悙悙悙悙悙
//01110010  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90  悙悙悙悙悙悙悙悙
//01110020  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90  悙悙悙悙悙悙悙悙
……………………………………………………………………………………………
//0510FFD0  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90  悙悙悙悙悙悙悙悙
//0510FFE0  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90  悙悙悙悙悙悙悙悙
//0510FFF0  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90  悙悙悙悙悙悙悙悙
//05110000 地址01110000开始,大小4000000 初始化为0x90


00402D35   .  83C4 0C        add esp,0C
00402D38   .  B8 662D4000    mov eax,1_.00402D66                              ;  这里开始计算0510FFFB的跳转地址
00402D3D   .  8945 E4        mov dword ptr ss:[ebp-1C],eax
00402D40   .  8B45 DC        mov eax,dword ptr ss:[ebp-24]                    ;  01110000
00402D43   .  0345 E0        add eax,dword ptr ss:[ebp-20]
00402D46   .  C740 FB E90000>mov dword ptr ds:[eax-5],0E9                     ;  ds:[0510FFFB]=90909090
00402D4D   .  8B45 DC        mov eax,dword ptr ss:[ebp-24]
00402D50   .  0345 E0        add eax,dword ptr ss:[ebp-20]
00402D53   .  8B4D E4        mov ecx,dword ptr ss:[ebp-1C]
00402D56   .  2BC8           sub ecx,eax
00402D58   .  8B45 DC        mov eax,dword ptr ss:[ebp-24]
00402D5B   .  0345 E0        add eax,dword ptr ss:[ebp-20]
00402D5E   .  8948 FC        mov dword ptr ds:[eax-4],ecx                     ;  [05110000-4]=ECX=FB2F2D66


//0510FFFB  E9 66 2D 2F FB                                   閒-/?

00402D61   .  8B45 DC        mov eax,dword ptr ss:[ebp-24]
00402D64   .  FFE0           jmp eax                                          ;  01110000-->90909090……
{
01110000    90               nop;到这以后,这里有4000000个0x90,实际上在反汇编中没实际意义,F8单步没必要了。这里更像是给分析者一个假象
01110001    90               nop
01110002    90               nop
………………

0510FFF9    90               nop
0510FFFA    90               nop
0510FFFB  - E9 662D2FFB      jmp 1_.00402D66;所以我们直接在这F2下断F9运行断下后,再F8一次

}
00402D66   .  68 00800000    push 8000                                        ; /FreeType = MEM_RELEASE
//从上面的反汇编代码不难看出从地址00402CFB开始到此的代码没实际意义
00402D6B   .  6A 00          push 0                                           ; |Size = 0
00402D6D   .  FF75 DC        push dword ptr ss:[ebp-24]                       ; |Address
00402D70   .  FF15 24E14000  call dword ptr ds:[<&kernel32.VirtualFree>]      ; \VirtualFree
00402D76   .  834D FC FF     or dword ptr ss:[ebp-4],FFFFFFFF
00402D7A   .  EB 11          jmp short 1_.00402D8D
00402D7C   .  33C0           xor eax,eax
00402D7E   .  40             inc eax
00402D7F   .  C3             retn
00402D80   .  8B65 E8        mov esp,dword ptr ss:[ebp-18]
00402D83   .  834D FC FF     or dword ptr ss:[ebp-4],FFFFFFFF
00402D87   .  EB 04          jmp short 1_.00402D8D
00402D89   .  834D FC FF     or dword ptr ss:[ebp-4],FFFFFFFF
00402D8D   >  8B4D F0        mov ecx,dword ptr ss:[ebp-10]
00402D90   .  64:890D 000000>mov dword ptr fs:[0],ecx                         ;  TEB
00402D97   .  5F             pop edi
00402D98   .  5E             pop esi
00402D99   .  5B             pop ebx
00402D9A   .  C9             leave
00402D9B   .  C3             retn

      从上面这段反汇编代码中分析后,call 00402CC4 感觉没实际作用,有兴趣的同学可以试着把这call nop掉会是什么样子呢?
      下面我们接着分析004010A4  |.  E8 51160000    call 1_.004026FA                   ;  在C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\创建一个随机名称log文件

[Asm] 纯文本查看 复制代码
004026FA   $  55             push ebp
004026FB   .  8BEC           mov ebp,esp
004026FD   .  81EC 80020000  sub esp,280
00402703   .  C745 E8 010000>mov dword ptr ss:[ebp-18],1
0040270A   .  834D EC FF     or dword ptr ss:[ebp-14],FFFFFFFF
0040270E   .  8365 F0 00     and dword ptr ss:[ebp-10],0
00402712   .  8365 F4 00     and dword ptr ss:[ebp-C],0
00402716   .  C745 FC 020000>mov dword ptr ss:[ebp-4],2
0040271D   .  C745 E4 010000>mov dword ptr ss:[ebp-1C],1
00402724   .  8365 F8 00     and dword ptr ss:[ebp-8],0
00402728   .  C745 E0 102700>mov dword ptr ss:[ebp-20],2710
0040272F   .  83A5 CCFDFFFF >and dword ptr ss:[ebp-234],0
00402736   .  68 04010000    push 104                                       ; /BufSize = 104 (260.)
0040273B   .  8D85 D0FDFFFF  lea eax,dword ptr ss:[ebp-230]                 ; |
00402741   .  50             push eax                                       ; |0012FD20
00402742   .  6A 00          push 0                                         ; |hModule = NULL
00402744   .  FF15 58E14000  call dword ptr ds:[<&kernel32.GetModuleFileNam>; \GetModuleFileNameA 取自进程路径
//0012FD20  43 3A 5C 44 6F 63 75 6D 65 6E 74 73 20 61 6E 64  C:\Documents and
//0012FD30  20 53 65 74 74 69 6E 67 73 5C 41 64 6D 69 6E 69   Settings\Admini
//0012FD40  73 74 72 61 74 6F 72 5C D7 C0 C3 E6 5C 31 5F 2E  strator\桌面\1_.
//0012FD50  65 78 65 00 01 00 00 00 50 FA 77 F6 0D ED 82 80  exe....P鷚?韨?
0040274A   .  68 04010000    push 104                                       ; /n = 104 (260.)
0040274F   .  8D85 D0FDFFFF  lea eax,dword ptr ss:[ebp-230]                 ; |C:\Documents and Settings\Administrator\桌面\1_.exe
00402755   .  50             push eax                                       ; |src
00402756   .  8D85 D8FEFFFF  lea eax,dword ptr ss:[ebp-128]                 ; |
0040275C   .  50             push eax                                       ; |dest
0040275D   .  E8 46AA0000    call <jmp.&msvcrt.memcpy>                      ; \memcpy
//0012FE28  43 3A 5C 44 6F 63 75 6D 65 6E 74 73 20 61 6E 64  C:\Documents and
//0012FE38  20 53 65 74 74 69 6E 67 73 5C 41 64 6D 69 6E 69   Settings\Admini
//0012FE48  73 74 72 61 74 6F 72 5C D7 C0 C3 E6 5C 31 5F 2E  strator\桌面\1_.
//0012FE58  65 78 65 00 01 00 00 00 50 FA 77 F6 0D ED 82 80  exe....P鷚?韨?
00402762   .  83C4 0C        add esp,0C
00402765   .  83A5 DBFEFFFF >and dword ptr ss:[ebp-125],0
0040276C   .  8D85 D8FEFFFF  lea eax,dword ptr ss:[ebp-128]     ;  C:\....ments and Settings\Administrator\桌面\1_.exe
00402772   .  50             push eax                           ; /RootPathName
00402773   .  FF15 ECE04000  call dword ptr ds:[<&kernel32.GetD>; \kernel32.GetDriveTypeA -->判断磁盘驱动器类型
00402779   .  83F8 02        cmp eax,2                          ;  eax=3时为固定磁盘 if eax>2 则跳转
0040277C   .  75 33          jnz short 1_.004027B1
0040277E   .  8D85 D8FEFFFF  lea eax,dword ptr ss:[ebp-128]
00402784   .  50             push eax                           ; /<%s>
00402785   .  68 68E54000    push 1_.0040E568                   ; |Format = "explorer.exe /n,%s"
0040278A   .  8D85 88FDFFFF  lea eax,dword ptr ss:[ebp-278]     ; |
00402790   .  50             push eax                           ; |s
00402791   .  FF15 94E24000  call dword ptr ds:[<&user32.wsprin>; \wsprintfA
00402797   .  83C4 0C        add esp,0C
0040279A   .  6A 00          push 0                             ; /Arg3 = 00000000
0040279C   .  6A 00          push 0                             ; |Arg2 = 00000000
0040279E   .  8D85 88FDFFFF  lea eax,dword ptr ss:[ebp-278]     ; |
004027A4   .  50             push eax                           ; |Arg1
004027A5   .  E8 B90A0000    call 1_.00403263                   ; \1_.00403263
004027AA   .  C745 E4 030000>mov dword ptr ss:[ebp-1C],3
004027B1   >  0FBE05 E81C410>movsx eax,byte ptr ds:[411CE8];eax=FFFFFFB1=-79
004027B8   .  83F8 B1        cmp eax,-4F                        ;  eax=-4F if eax=-4F 不跳转
004027BB   .  75 11          jnz short 1_.004027CE
004027BD   .  68 8F000000    push 8F                            ; /Arg3 = 0000008F
004027C2   .  6A 30          push 30                            ; |Arg2 = 00000030
004027C4   .  68 E81C4100    push 1_.00411CE8                   ; |Arg1 = 00411CE8
004027C9   .  E8 E3FAFFFF    call 1_.004022B1                   ; \1_.004022B1


执行后的结果为:00411CE8=1_.00411CE8 (ASCII "\\.\pipe\{D952F2D0-0BCE-4b2b-8FFF-2317F120FCC3}")
//00411CE8  5C 5C 2E 5C 70 69 70 65 5C 7B 44 39 35 32 46 32  \\.\pipe\{D952F2
//00411CF8  44 30 2D 30 42 43 45 2D 34 62 32 62 2D 38 46 46  D0-0BCE-4b2b-8FF
//00411D08  46 2D 32 33 31 37 46 31 32 30 46 43 43 33 7D 00  F-2317F120FCC3}.

004027CE   > \FF35 E01C4100  push dword ptr ds:[411CE0]                     ; /ds:[00411CE0]=0040E7AC (1_.0040E7AC), ASCII "Global\{6581F932-EEC4-422e-A5FD-0F78BB508683}"
004027D4   .  6A 00          push 0                                         ; |InitiallySignaled = FALSE
004027D6   .  6A 00          push 0                                         ; |ManualReset = FALSE
004027D8   .  6A 00          push 0                                         ; |pSecurity = NULL
004027DA   .  FF15 30E14000  call dword ptr ds:[<&kernel32.CreateEventA>]   ; \CreateEventA创建或打开一个命名的或无名的事件对象
004027E0   .  8945 F0        mov dword ptr ss:[ebp-10],eax                  ;  返回事件对象的句柄 eax=0xCC
004027E3   .  FF15 A0E14000  call dword ptr ds:[<&kernel32.GetLastError>]   ; [GetLastError
004027E9   .  8985 CCFDFFFF  mov dword ptr ss:[ebp-234],eax                 ;  0
004027EF   >  6A 00          push 0                                         ; /hTemplateFile = NULL
004027F1   .  6A 00          push 0                                         ; |Attributes = 0
004027F3   .  6A 03          push 3                                         ; |Mode = OPEN_EXISTING
004027F5   .  6A 00          push 0                                         ; |pSecurity = NULL
004027F7   .  6A 00          push 0                                         ; |ShareMode = 0
004027F9   .  68 000000C0    push C0000000                                  ; |Access = GENERIC_READ|GENERIC_WRITE
004027FE   .  68 E81C4100    push 1_.00411CE8                               ; |FileName = "\\.\pipe\{D952F2D0-0BCE-4b2b-8FFF-2317F120FCC3}"
00402803   .  FF15 FCE04000  call dword ptr ds:[<&kernel32.CreateFileA>]    ; \CreateFileA --> 创建管道
00402809   .  8945 EC        mov dword ptr ss:[ebp-14],eax                  ;  eax=FFFFFFFF 创建失败
0040280C   .  837D EC FF     cmp dword ptr ss:[ebp-14],-1
00402810   .  0F85 85000000  jnz 1_.0040289B                                ;  跳转未实现
00402816   .  FF15 A0E14000  call dword ptr ds:[<&kernel32.GetLastError>]   ; [GetLastError
0040281C   .  3D E7000000    cmp eax,0E7                                    ;  eax=2 --> 系统找不到指定的文件
00402821   .  75 2E          jnz short 1_.00402851                          ;  跳转实现
……………………
00402851   >  FF15 84E14000  call dword ptr ds:[<&kernel32.GetTickCount>]   ; [GetTickCount
00402857   .  3D 60EA0000    cmp eax,0EA60
0040285C   .  73 0D          jnb short 1_.0040286B                          ;  跳转实现
……………………
0040286B   > \81BD CCFDFFFF >cmp dword ptr ss:[ebp-234],0B7

00402875   .  75 1A          jnz short 1_.00402891                          ;  跳转实现
……………………
00402891   >  E9 D2000000    jmp 1_.00402968
……………………
00402968   > \6A 00          push 0
0040296A   .  FF75 E4        push dword ptr ss:[ebp-1C]                     ;  堆栈 ss:[0012FF34]=00000001
0040296D   .  8D85 D0FDFFFF  lea eax,dword ptr ss:[ebp-230]
00402973   .  50             push eax                                       ;  目标程序路径
00402974   .  E8 77FAFFFF    call 1_.004023F0                               ;  创建一个随机名称的.log文件
00402979   .  8B45 E8        mov eax,dword ptr ss:[ebp-18] ; eax=1
0040297C   .  C9             leave
0040297D   .  C3             retn






      下面我们来分析下面一个call 00402974   .  E8 77FAFFFF    call 1_.004023F0                               ;  创建一个随机名称的.log文件
游客,如果您要查看本帖隐藏内容请回复


      小结:
      1、创建一个管道"\\.\pipe\{D952F2D0-0BCE-4b2b-8FFF-2317F120FCC3}",遍历进程查找RavMonD.exe、360tray.exe、MPSVC.exe,因在分析环境里没有安装过以上三款杀软,所以创建管道失败执行后面的操作。判断是什么操作系统,并且在目录C:\Documents and Settings\或C:\Users\下生成个Infotmp.txt文件。

      2、在目录C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\下面截取一个随机值名称的,后缀为.log的当前窗口截图。

      3、打开服务设备管理器遍历系统多个服务试图修改感染系统服务文件,来启动执行病毒代码,如果服务设备管理器打开失败则创建注册表服务、衍生病毒DLL文件到%System32%目录下,利用服务启动病毒。在CALL 00401561执行完成后所生成同大小的(148kb)的tmp和dll后缀的木马文件有:7A540000.tmp、appmgmts.dll、HidServ.dll、Ias.dll、Iprip.dll、Irmon.dll、mspmsnsv.dll、Ntmssvc.dll、NWCWorkstation.dll、Nwsapagent.dll、pchsvc.dll、qmgr.dll、WmdmPmSp.dll、xmlprov.dll等14个木马文件。

      4、获取磁盘类型,分析环境为固态磁盘,并且只有一个C盘,所以没执行感染EXE事件。
      5、试图替换或创建以下系统服务文件来达到开机启动病毒:
appmgmts、HidServ、Ias、Iprip、Irmon、mspmsnsv、Ntmssvc、NWCWorkstation、Nwsapagent、pchsvc、qmgr、WmdmPmSp、xmlprov
对应的服务文件按顺序如下:
appmgmts.dll、HidServ.dll、Ias.dll、Iprip.dll、Irmon.dll、mspmsnsv.dll、Ntmssvc.dll、NWCWorkstation.dll、Nwsapagent.dll、pchsvc.dll、qmgr.dll、WmdmPmSp.dll、xmlprov.dll


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 潇潇 发表于 2015-5-10 15:31:44 | 显示全部楼层
      下面我们重点分析:      004010CB  |.  E8 91040000    call 1_.00401561            ;创建木马的相关文件、注册表操作、服务操作等
      
游客,如果您要查看本帖隐藏内容请回复


您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|潇潇编程综合教学网 ( 滇ICP备09007156号-2 )

滇公网安备 53050202000040号

GMT+8, 2018-1-19 17:44 , Processed in 0.204335 second(s), 22 queries .

Powered by Discuz!

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表