宝峰科技

 找回密码
 注册

QQ登录

只需一步,快速开始

智能终端设备维修查询系统注册会员邮箱认证须知!
查看: 7608|回复: 1

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

[复制链接]
  • TA的每日心情
    奋斗
    2020-6-5 22:18
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    潇潇 发表于 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
  • TA的每日心情
    奋斗
    2020-6-5 22:18
  • 签到天数: 22 天

    [LV.4]偶尔看看III

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


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

    本版积分规则

    免责声明

    本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

    QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )

    Copyright © 2001-2023 Discuz! Team. GMT+8, 2024-3-19 11:29 , File On Powered by Discuz! X3.49

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