目前才开通博客,整理并转移以前写的文章

本文于2015年4月1号发表于看雪,2015年7月22号发表于52pojie。

以前博客:http://youngs-rsr.blog.163.com/

首选先自我介绍一下吧,我在病毒分析方面纯小白!
此篇文章是自己第一次分析病毒,第一次写病毒分析报告!
此分析报告是前几天面试一家安全公司时需要上交的题目!
自己的基础方面:C/C++、逆向等有一定入门基础!所以打算自己边学边写一个病毒分析系列的教程吧,希望对那些和我一样的新手有所帮助吧!如有笔误或者分析有误时,大神们勿喷!

一、  名词解释
           母体:指病毒主文件(即2E6682932F826269B0F84A93AAB9E609.85A681D7)
           子体:指由母体从资源中释放出来的文件

二、  研究环境及分析工具
系统环境:虚拟机中的XP环境
研究工具:OD 、IDA、procexp(行为分析)、procmon、PEID等
分析人:Youngs

三、  行为分析
     1、 用OD加载母体程序,直接按F9运行时,在procexp中可以看到母体释放出一个子体daemonupd.exe格式的程序,并创建进程运行!如图一所示:

图一
2、用PEID给母体查壳,显示为Nullsoft PiMP Stub [Nullsoft PiMP SFX] *,如下图所示
图二
因为不知道这个是什么壳,于是我百度一下,结果百度上给出的是以下回答:
不是特别的壳,只是用Nullsoft Installation System制作的安装程序。Nullsoft Installation System(NSIS)是一个把程序,数据和文档等,用Script 方式,制作成“安装程序”的软件。
只是它的母体只是一个用NSIS来制作的一个exe程序。

四、  调试分析
      1、打开ida加载母体程序后,可以看到一些重要的API和CALL,了解整个过程的操作流程。看了其伪代码大概知道是获取临时路径,然后操作文件相关。

2、大致流程路线:

3、用OD加载母体程序,首先是其母体程序的路径,如图三所示:
图三
然后获取完整路径,用“(即22)作为结束符判断,如图四所示:
图四
通过脚本程序(后面会介绍到脚本)获取零时文件:

代码:
0040588C  |.  56                  |PUSH ESI                                ; /TempName
0040588D  |.  8D45 08             |LEA EAX,DWORD PTR SS:[EBP+0x8]          ; |
00405890  |.  6A 00               |PUSH 0x0                                ; |Unique = 0x0
00405892  |.  50                  |PUSH EAX                                ; |Prefix="nsa"(此值是随时变化的)
00405893  |.  FF75 0C             |PUSH DWORD PTR SS:[EBP+0xC]             ; |Path="C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\"
00405896  |.  0055 0A             |ADD BYTE PTR SS:[EBP+0xA],DL            ; |DL=9 此时"nsa"中的a+9=t 从而名字为"nsj"
00405899  |.  FF15 D8704000       |CALL DWORD PTR DS:[<&KERNEL32.GetTempFi>; \GetTempFileNameA
0040589F  |.  85C0                |TEST EAX,EAX
004058A1  |.  75 0D               |JNZ SHORT 2E668293.004058B0
004058A3  |.  85FF                |TEST EDI,EDI
004058A5  |.^ 75 D0               \JNZ SHORT 2E668293.00405877

然后我们会发现在C:\Documents and Settings\Administrator\Local Settings\Temp路径下会发现  这样一个零时文件。执行完后回到那个调用CALL的位置:

因为不知道创建这个零时文件有什么作用,然后我们接着继续往下分析,会发现其回继续跳出回来主call,其实通过GetTempPathA就可以猜出是在上面的目录下进行操作的,如下图:
然后接着继续看,当看到下面的时候,我们会发现之前的分析没有啥意义了,个人理解为是在干扰分析用的又或者可以理解为一种壳吧。
代码:
004033A8  |. /74 7E               JE SHORT 2E668293.00403428
004033AA  |> |68 00A04200         PUSH 2E668293.0042A000                   ; /FileName="C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\nsj3.tmp"
004033AF  |. |FF15 44714000       CALL DWORD PTR DS:[<&KERNEL32.DeleteFile>; \DeleteFileA
004033B5  |.  56                  PUSH ESI                                 ; /Arg1
004033B6  |.  E8 B7F8FFFF         CALL 2E668293.00402C72                   ; \在路径C:\Documents and Settings\Administrator\Local Settings\Temp中创建nsd4.tmp

刚才分析的文件又重新删除掉了,并又创建了nsd4.tmp方式与之前一样!

跟着我们继续跟入CALL中,然后会发现这样一段,是在C:\Documents and Settings\Administrator\Local Settings\Application Data\NVIDIA Corporation\Update目录下创建一下文件夹的方法,由于文件夹为null,所以没出现新文件夹。如下图:

下面这段代码是创建google下update的目录:
代码:
00402A0C  |.  83E1 0F       AND ECX,0xF[/size]
[size=3]00402A0F  |.  C1F8 04       SAR EAX,0x4[/size]
[size=3]00402A12  |.  FF348A        PUSH DWORD PTR DS:[EDX+ECX*4]        ; /Arg2[/size]
[size=3]00402A15  |.  C1E0 0A       SHL EAX,0xA                          ; |[/size]
[size=3]00402A18  |.  05 709B4000   ADD EAX,2E668293.00409B70            ; |ASCII "Google\Update"[/size]
[size=3]00402A1D  |.  50            PUSH EAX                             ; |Arg1[/size]
[size=3]00402A1E  |.  E8 65310000   CALL 2E668293.00405B88               ; \创建CALL

以下是在C:\Documents and Settings\Administrator\Local Settings\Application Data\NVIDIA Corporation\Update\路径下创建新文件d83665e11921a3e0525e1d4d9e1d04f1.exe

0040583D  /$  FF7424 04     PUSH DWORD PTR SS:[ESP+0x4]          ; /FileName[/size]
[size=3]00405841  |.  FF15 78704000 CALL DWORD PTR DS:[<&KERNEL32.GetFil>; \GetFileAttributesA[/size]
[size=3]00405847  |.  8BC8          MOV ECX,EAX[/size]
[size=3]00405849  |.  6A 00         PUSH 0x0                             ; /hTemplateFile = NULL[/size]
[size=3]0040584B  |.  41            INC ECX                              ; |[/size]
[size=3]0040584C  |.  F7D9          NEG ECX                              ; |[/size]
[size=3]0040584E  |.  1BC9          SBB ECX,ECX                          ; |[/size]
[size=3]00405850  |.  23C8          AND ECX,EAX                          ; |[/size]
[size=3]00405852  |.  51            PUSH ECX                             ; |Attributes=0[/size]
[size=3]00405853  |.  FF7424 14     PUSH DWORD PTR SS:[ESP+0x14]         ; |Mode=CREATE_ALWAYS[/size]
[size=3]00405857  |.  6A 00         PUSH 0x0                             ; |pSecurity = NULL[/size]
[size=3]00405859  |.  6A 01         PUSH 0x1                             ; |ShareMode = FILE_SHARE_READ[/size]
[size=3]0040585B  |.  FF7424 1C     PUSH DWORD PTR SS:[ESP+0x1C]         ; |Access = GENERIC_WRITE[/size]
[size=3]0040585F  |.  FF7424 1C     PUSH DWORD PTR SS:[ESP+0x1C]         ; |FileName="C:\Documents and Settings\Administrator\Local Settings\Application Data\NVIDIA Corporation\Update\d83665e11921a3e0525e1d4d9e1d04f1.exe[/size]
[size=3]00405863  |.  FF15 90704000 CALL DWORD PTR DS:[<&KERNEL32.Create>; \CreateFileA[/size]
[size=3]00405869  \.  C2 0C00       RETN 0xC

如下图所示:是创建出来的程序

然后通过调用此call
创建进程,运行它
Call内代码如下:
代码:
004053C6  /$  55            PUSH EBP
004053C7  |.  8BEC          MOV EBP,ESP
004053C9  |.  83EC 10       SUB ESP,0x10
004053CC  |.  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-0x10]
004053CF  |.  C705 A8244200>MOV DWORD PTR DS:[0x4224A8],0x44
004053D9  |.  50            PUSH EAX                             ; /pProcessInfo
004053DA  |.  33C0          XOR EAX,EAX                          ; |
004053DC  |.  68 A8244200   PUSH 2E668293.004224A8               ; |pStartupInfo = 2E668293.004224A8
004053E1  |.  50            PUSH EAX                             ; |CurrentDir => NULL
004053E2  |.  50            PUSH EAX                             ; |pEnvironment => NULL
004053E3  |.  50            PUSH EAX                             ; |CreationFlags => 0
004053E4  |.  50            PUSH EAX                             ; |InheritHandles => FALSE
004053E5  |.  50            PUSH EAX                             ; |pThreadSecurity => NULL
004053E6  |.  50            PUSH EAX                             ; |pProcessSecurity => NULL
004053E7  |.  FF75 08       PUSH DWORD PTR SS:[EBP+0x8]          ; |CommandLine
004053EA  |.  50            PUSH EAX                             ; |ModuleFileName => NULL
004053EB  |.  FF15 D0704000 CALL DWORD PTR DS:[<&KERNEL32.Create>; \CreateProcessA
004053F1  |.  85C0          TEST EAX,EAX
004053F3  |.  74 0C         JE SHORT 2E668293.00405401
004053F5  |.  FF75 F4       PUSH DWORD PTR SS:[EBP-0xC]          ; /hObject
004053F8  |.  FF15 EC704000 CALL DWORD PTR DS:[<&KERNEL32.CloseH>; \CloseHandle
004053FE  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-0x10]
00405401  |>  C9            LEAVE
00405402  \.  C2 0400       RETN 0x4

运行后的程序如下图:
 
随后的代码中,直接关闭其句柄了:
代码:

00401E87  |> \FF75 08       PUSH DWORD PTR SS:[EBP+0x8]          ; /hObject
00401E8A  |>  FF15 EC704000 CALL DWORD PTR DS:[<&KERNEL32.CloseH>; \CloseHandle

接着其创建注册表,操作过程用 可以查看到:
 
代码:

00402328  |.  53            PUSH EBX                             ; /pDisposition
00402329  |.  51            PUSH ECX                             ; |pHandle
0040232A  |.  8B0D 503F4200 MOV ECX,DWORD PTR DS:[0x423F50]      ; |
00402330  |.  83C9 02       OR ECX,0x2                           ; |
00402333  |.  53            PUSH EBX                             ; |pSecurity
00402334  |.  51            PUSH ECX                             ; |Access
00402335  |.  53            PUSH EBX                             ; |Options
00402336  |.  53            PUSH EBX                             ; |Class
00402337  |.  53            PUSH EBX                             ; |Reserved
00402338  |.  50            PUSH EAX                             ; |SubKey="Software\Microsoft\Windows\CurrentVersion\Run"
00402339  |.  57            PUSH EDI                             ; |hKey=HKEY_CURRENY_USER
0040233A  |.  C745 FC 01000>MOV DWORD PTR SS:[EBP-0x4],0x1       ; |
00402341  |.  FF15 20704000 CALL DWORD PTR DS:[<&ADVAPI32.RegCre>; \RegCreateKeyExA

紧接着会出现设置注册表的键值
代码:

0040238E  |> \50            PUSH EAX                             ; /BufSize=95
0040238F  |.  57            PUSH EDI                             ; |Buffer="C:\Documents and Settings\Administrator\Local Settings\Application Data\NVIDIA Corporation\Update\daemonupd.exe /app 2B42CDC8B1EDBFEC23AA442F8F7EF3D9"
00402390  |.  FF75 D0       PUSH DWORD PTR SS:[EBP-0x30]         ; |ValueType = REG_SZ
00402393  |.  53            PUSH EBX                             ; |Rserved = 0x0
00402394  |.  FF75 BC       PUSH DWORD PTR SS:[EBP-0x44]         ; |ValueName = "NvUpdService"
00402397  |.  FF75 08       PUSH DWORD PTR SS:[EBP+0x8]          ; |hKey = OxDC
0040239A  |.  FF15 04704000 CALL DWORD PTR DS:[<&ADVAPI32.RegSet>; \RegSetValueExA

监控的操作为:
 
紧接着关闭注册表:
代码:

0040247C  |> \57            PUSH EDI                             ; /hKey
0040247D  |>  FF15 1C704000 CALL DWORD PTR DS:[<&ADVAPI32.RegClo>; \RegCloseKey

 
继续跟进,会发现在C:\Documents and Settings\Administrator\Local Settings\Application Data\Google\Update中创建一个空目录,

代码:

[Asm] 纯文本查看 复制代码
?
1
2
3
4
5
6
004015D2  |.  53            |PUSHEBX                          ; /pSecurity=0
004015D3  |.  57            |PUSHEDI                          ; |Path = "C:\Documents and Settings\Administrator\Local Settings\Application Data\Google\Update"
004015D4  |.  8A06          |MOVAL,BYTEPTRDS:[ESI]          ; |
004015D6  |.  881E          |MOVBYTEPTR DS:[ESI],BL          ; |
004015D8  |.  8845 0B       |MOVBYTEPTR SS:[EBP+0xB],AL      ; |
004015DB  |.  FF15 80704000 |CALLDWORDPTR DS:[<&KERNEL32.Creat>; \CreateDirectoryA

然后调用SHFileOperationA函数来复制d83665e11921a3e0525e1d4d9e1d04f1.exe并重命名为gupdate.exe:

代码:

[Asm] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
004021CC  |.  50            PUSHEAX                           ; /Arg2
004021CD  |.  53            PUSHEBX                           ; |Arg1
004021CE  |.  8975 A4       MOVDWORDPTR SS:[EBP-0x5C],ESI    ; |
004021D1  |.  897D A8       MOVDWORDPTR SS:[EBP-0x58],EDI    ; |
004021D4  |.  8945 B6       MOVDWORDPTR SS:[EBP-0x4A],EAX    ; |
004021D7  |.  66:894D AC    MOVWORDPTR SS:[EBP-0x54],CX      ; |
004021DB  |.  E8 242D0000   CALL2E668293.00404F04             ; \2E668293.00404F04
004021E0  |.  8D45 9C       LEAEAX,DWORDPTRSS:[EBP-0x64]
004021E3  |.  50            PUSHEAX
004021E4  |.  FF15 60714000 CALLDWORDPTR DS:[<&SHELL32.SHFileO>;  shell32.SHFileOperationA (把d83665e11921a3e0525e1d4d9e1d04f1.exe复制到\Application Data\Google\Update目录下 并把程序名改为gupdate.exe)

紧接着给gupdate.exe创建注册表,代码如下:
代码:

[Asm] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
00402328  |.  53            PUSHEBX                           ; /pDisposition
00402329  |.  51            PUSHECX                           ; |pHandle
0040232A  |.  8B0D 503F4200 MOVECX,DWORDPTRDS:[0x423F50]    ; |
00402330  |.  83C9 02       ORECX,0x2                         ; |
00402333  |.  53            PUSHEBX                           ; |pSecurity
00402334  |.  51            PUSHECX                           ; |Access
00402335  |.  53            PUSHEBX                           ; |Options
00402336  |.  53            PUSHEBX                           ; |Class
00402337  |.  53            PUSHEBX                           ; |Reserved
00402338  |.  50            PUSHEAX                           ; |SubKey="Software\Microsoft\Windows\CurrentVersion\Run"
00402339  |.  57            PUSHEDI                           ; |hKey=HKEY_CURRENY_USER
0040233A  |.  C745 FC 01000>MOVDWORDPTR SS:[EBP-0x4],0x1     ; |
00402341  |.  FF15 20704000 CALLDWORDPTR DS:[<&ADVAPI32.RegCre>; \RegCreateKeyExA

接着设置其注册表的键值,代码如下:
代码:

[Asm] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
0040238E  |> \50            PUSHEAX                           ; /BufSize=95
0040238F  |.  57            PUSHEDI                           ; |Buffer="C:\Documents and Settings\Administrator\Local Settings\Application Data\Google\Update\gupdate.exe /app 2B42CDC8B1EDBFEC23AA442F8F7EF3D9"
00402390  |.  FF75 D0       PUSHDWORDPTR SS:[EBP-0x30]       ; |ValueType = REG_SZ
00402393  |.  53            PUSHEBX                           ; |Rserved = 0x0
00402394  |.  FF75 BC       PUSHDWORDPTR SS:[EBP-0x44]       ; |ValueName = "Google Update"
00402397  |.  FF75 08       PUSHDWORDPTR SS:[EBP+0x8]        ; |hKey = OxDC
0040239A  |.  FF15 04704000 CALLDWORDPTR DS:[<&ADVAPI32.RegSet>; \RegSetValueExA

接下来就是关闭注册表:
代码:

[Asm] 纯文本查看 复制代码
?
1
2
0040247C  |> \57            PUSHEDI                           ; /hKey
0040247D  |>  FF15 1C704000 CALLDWORDPTR DS:[<&ADVAPI32.RegClo>; \RegCloseKey

更换了目录,对C:\Documents and Settings\Administrator\Local Settings\Application Data\Microsoft\Windows目录操作
代码:

[Asm] 纯文本查看 复制代码
?
1
2
3
4
5
6
004015D2  |.  53            |PUSHEBX                          ; /pSecurity
004015D3  |.  57            |PUSHEDI                          ; |Path = "C:\Documents and Settings\Administrator\Local Settings\Application Data\Microsoft\Windows"
004015D4  |.  8A06          |MOVAL,BYTEPTRDS:[ESI]          ; |
004015D6  |.  881E          |MOVBYTEPTR DS:[ESI],BL          ; |
004015D8  |.  8845 0B       |MOVBYTEPTR SS:[EBP+0xB],AL      ; |
004015DB  |.  FF15 80704000 |CALLDWORDPTR DS:[<&KERNEL32.Creat>; \CreateDirectoryA

调用SHFileOperationA函数来复制d83665e11921a3e0525e1d4d9e1d04f1.exe并重命名为winupdate.exe:
代码:

[Asm] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
004021CC  |.  50            PUSHEAX                           ; /Arg2
004021CD  |.  53            PUSHEBX                           ; |Arg1
004021CE  |.  8975 A4       MOVDWORDPTR SS:[EBP-0x5C],ESI    ; |
004021D1  |.  897D A8       MOVDWORDPTR SS:[EBP-0x58],EDI    ; |
004021D4  |.  8945 B6       MOVDWORDPTR SS:[EBP-0x4A],EAX    ; |
004021D7  |.  66:894D AC    MOVWORDPTR SS:[EBP-0x54],CX      ; |
004021DB  |.  E8 242D0000   CALL2E668293.00404F04             ; \2E668293.00404F04
004021E0  |.  8D45 9C       LEAEAX,DWORDPTRSS:[EBP-0x64]
004021E3  |.  50            PUSHEAX
004021E4  |.  FF15 60714000 CALLDWORDPTR DS:[<&SHELL32.SHFileO>;  shell32.SHFileOperationA (把d83665e11921a3e0525e1d4d9e1d04f1.exe复制到\Application Data\Microsoft\Windows目录下 并把程序名改为winupdate.exe)

把其中的一个字符串装换为宽字符:
代码:

[Asm] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
8
0040211B  |.  68 00040000   PUSH0x400                         ; /WideBufSize = 400 (1024.)
00402120  |.  56            PUSHESI                           ; |WideCharBuf => 2E668293.00409368
00402121  |.  6A FF         PUSH-0x1                          ; |StringSize = FFFFFFFF (-1.)
00402123  |.  FF75 D0       PUSHDWORDPTR SS:[EBP-0x30]       ; |StringToMap = "C:\Documents and Settings\Administrator\「开始」菜单\程序\启动\winupdate.lnk"
00402126  |.  BF 05400080   MOVEDI,0x80004005                 ; |
0040212B  |.  53            PUSHEBX                           ; |Options
0040212C  |.  53            PUSHEBX                           ; |CodePage
0040212D  |.  FF15 1C714000 CALLDWORDPTR DS:[<&KERNEL32.MultiB>; \MultiByteToWideChar

紧接着去搜索C:\Documents and Settings\Administrator\Local Settings\Application Data\NVIDIA Corporation\Update\daemonupd.exe"

代码:

[Asm] 纯文本查看 复制代码
?
1
2
3
4
00405527  |.  50            PUSHEAX                           ; /pFindFileData
00405528  |.  56            PUSHESI                           ; |FileName="C:\Documents and Settings\Administrator\Local Settings\Application Data\NVIDIA Corporation\Update\daemonupd.exe"
00405529  |.  03DF          ADDEBX,EDI                        ; |
0040552B  |.  FF15 40714000 CALLDWORDPTR DS:[<&KERNEL32.FindFi>; \FindFirstFileA

然后就自己调用MoveFileA函数来重命名程序了,

代码:

[Asm] 纯文本查看 复制代码
?
1
2
3
0040165E  |.  57            PUSHEDI                           ; /NewName = "C:\Documents and Settings\Administrator\Local Settings\Application Data\NVIDIA Corporation\Update\daemonupd.exe"
0040165F  |.  56            PUSHESI                           ; |ExistingName = "C:\Documents and Settings\Administrator\Local Settings\Application Data\NVIDIA Corporation\Update\d83665e11921a3e0525e1d4d9e1d04f1.exe"
00401660  |.  FF15 70704000 CALLDWORDPTR DS:[<&KERNEL32.MoveFi>; \MoveFileA

执行完上面代码后,则出现下图情况:
 
继续跟入,我们会发现,程序创建进程直接运行起daemonupd.exe

代码:

[Asm] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
004053D9  |.  50            PUSHEAX                           ; /pProcessInfo
004053DA  |.  33C0          XOREAX,EAX                        ; |
004053DC  |.  68 A8244200   PUSH2E668293.004224A8             ; |pStartupInfo = 2E668293.004224A8
004053E1  |.  50            PUSHEAX                           ; |CurrentDir => NULL
004053E2  |.  50            PUSHEAX                           ; |pEnvironment => NULL
004053E3  |.  50            PUSHEAX                           ; |CreationFlags => 0
004053E4  |.  50            PUSHEAX                           ; |InheritHandles => FALSE
004053E5  |.  50            PUSHEAX                           ; |pThreadSecurity => NULL
004053E6  |.  50            PUSHEAX                           ; |pProcessSecurity => NULL
004053E7  |.  FF75 08       PUSHDWORDPTR SS:[EBP+0x8]        ; |CommandLine = ""C:\Documents and Settings\Administrator\Local Settings\Application Data\NVIDIA Corporation\Update\daemonupd.exe" /app 2B42CDC8B1EDBFEC23AA442F8F7EF3D9"
004053EA  |.  50            PUSHEAX                           ; |ModuleFileName => NULL
004053EB  |.  FF15 D0704000 CALLDWORDPTR DS:[<&KERNEL32.Create>; \CreateProcessA

关闭句柄,代码如下:
代码:

[Asm] 纯文本查看 复制代码
?
1
2
00402753  |> \FF75 08       PUSHDWORDPTR SS:[EBP+0x8]        ; /hObject
00402756  |.  FF15 EC704000 CALLDWORDPTR DS:[<&KERNEL32.CloseH>; \CloseHandle

继续搜索以前的原有程序d83665e11921a3e0525e1d4d9e1d04f1.exe是否存在

代码:

[Asm] 纯文本查看 复制代码
?
1
2
3
4
5
00405521  |.  8D85 B8FEFFFF LEAEAX,DWORDPTRSS:[EBP-0x148]
00405527  |.  50            PUSHEAX                           ; /pFindFileData
00405528  |.  56            PUSHESI                           ; |FileName="C:\Documents and Settings\Administrator\Local Settings\Application Data\NVIDIA Corporation\Update\d83665e11921a3e0525e1d4d9e1d04f1.exe"
00405529  |.  03DF          ADDEBX,EDI                        ; |
0040552B  |.  FF15 40714000 CALLDWORDPTR DS:[<&KERNEL32.FindFi>; \FindFirstFileA

继续检查2E6682932F826269B0F84A93AAB9E609.85A681D7是否存在,代用代码和上面一样
接着调用DeleteFileA来删除母体程序,由于我用OD已经加载了,所以删除失败,正常是可以自己删除母体程序的

代码:

[Asm] 纯文本查看 复制代码
?
1
2
004055A0  |.  57            |PUSHEDI                          ; /FileName
004055A1  |.  FF15 44714000 |CALLDWORDPTR DS:[<&KERNEL32.Delet>; \DeleteFileA

后面的代码都是对2B42CDC8B1EDBFEC23AA442F8F7EF3D9操作的,搜索目录、终止进程、关闭句柄,因为我用OD加载了 所以无法对其操作!
其代码如下:
代码:

[Asm] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
004055D3  |> \8D85 B8FEFFFF |LEAEAX,DWORDPTRSS:[EBP-0x148]
004055D9  |.  50            |PUSHEAX                          ; /pFindFileData
004055DA  |.  FF75 08       |PUSHDWORDPTR SS:[EBP+0x8]       ; |hFile
004055DD  |.  FF15 3C714000 |CALLDWORDPTR DS:[<&KERNEL32.FindN>; \FindNextFileA
004055E3  |.  85C0          |TESTEAX,EAX
004055E5  |.^ 0F85 52FFFFFF \JNZ2E668293.0040553D
004055EB  |.  FF75 08       PUSHDWORDPTR SS:[EBP+0x8]        ; /hSearch
004055EE  |.  FF15 38714000 CALLDWORDPTR DS:[<&KERNEL32.FindCl>; \FindClose
……………………………………………………………………………………………………
004035AF  |.  894424 18     MOVDWORDPTR SS:[ESP+0x18],EAX
004035B3  |>  FF7424 18     PUSHDWORDPTR SS:[ESP+0x18]       ; /ExitCode
004035B7  \.  FF15 A4704000 CALLDWORDPTR DS:[<&KERNEL32.ExitPr>; \ExitProcess
004035BD  /$  A1 14904000   MOVEAX,DWORDPTRDS:[0x409014]
004035C2  |.  56            PUSHESI
004035C3  |.  8B35 EC704000 MOVESI,DWORDPTRDS:[<&KERNEL32.Clo>;  kernel32.CloseHandle
004035C9  |.  83F8 FF       CMPEAX,-0x1
004035CC  |.  74 0A         JESHORT2E668293.004035D8
004035CE  |.  50            PUSHEAX                           ; /hObject => FFFFFFFF
004035CF  |.  FFD6          CALLESI                           ; \CloseHandle
……………………………………………………………………………………………………

五、  继续分析daemonup.exe文件
用OD加载的时候会显示数据被压缩过,可能是加了某种壳吧!打乱了所有的顺序,用“删除模块分析”都没什么反应 ,由于水平有限暂到这里吧  
我们会发现无法正常双击去运行它,然后我又重新让母体程序运行起来,用Process Monitor会发现如下的情况

 
应该是一个远控木马程序,因为它不停的发包和接包!

六、  带着好奇心打开NSIS文件
   1、弄玩上面的,又百度了一下NSIS,在卡饭论坛上看到有这样的回答,说是可以用7z-zip解压一些文件,于是在虚拟机中我用7z解压打开了母体程序。我一个朋友也解压出来了,然后也跟着试试!看到如下信息:

 
暂时百度后只知道nsis是执行脚本。
结合图一和图6,我们可以看到图6中的exe在图一中都没显示过,初步估计是操作很快,人眼无法识别出来,但是在我们动态调试的时候,显示有!
2、以文本文档的方式打开[NSIS].nsi文件,我们会发现正如百度知道所说,这里面全部是一些操作文件、注册表等的代码,部分代码如下:
代码:

[Asm] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Exec"$\"$INSTDIR\daemonupd.exe$\" /exit 2B42CDC8B1EDBFEC23AA442F8F7EF3D9"
  DeleteRegValue HKCU Software\Microsoft\Windows\CurrentVersion\Run $_0_
  DeleteRegValue HKCU Software\Microsoft\Windows\CurrentVersion\Run $_4_
  Sleep 1000
  Delete $INSTDIR\daemonupd.exe
  Delete $SMSTARTUP\$_2_.lnk
  Delete $LOCALAPPDATA\Microsoft\Windows\$_2_.exe
  Delete $LOCALAPPDATA\$_1_\$_3_.exe
  Quit
label_61:
  File d83665e11921a3e0525e1d4d9e1d04f1.exe
  Exec"$\"$INSTDIR\d83665e11921a3e0525e1d4d9e1d04f1.exe$\" /exit 2B42CDC8B1EDBFEC23AA442F8F7EF3D9"
  Sleep 2000
  WriteRegStr HKCU Software\Microsoft\Windows\CurrentVersion\Run $_0_ "$INSTDIR\daemonupd.exe /app 2B42CDC8B1EDBFEC23AA442F8F7EF3D9"
  CreateDirectory $LOCALAPPDATA\$_1_
  CopyFiles /SILENT $INSTDIR\d83665e11921a3e0525e1d4d9e1d04f1.exe $LOCALAPPDATA\$_1_\$_3_.exe  ; $(LSTR_7)$LOCALAPPDATA\$_1_\$_3_.exe    ;  "Copy to "
  WriteRegStr HKCU Software\Microsoft\Windows\CurrentVersion\Run $_4_ "$LOCALAPPDATA\$_1_\$_3_.exe /app 2B42CDC8B1EDBFEC23AA442F8F7EF3D9"
  CreateDirectory $LOCALAPPDATA\Microsoft\Windows
  CopyFiles /SILENT $INSTDIR\d83665e11921a3e0525e1d4d9e1d04f1.exe $LOCALAPPDATA\Microsoft\Windows\$_2_.exe  ; $(LSTR_7)$LOCALAPPDATA\Microsoft\Windows\$_2_.exe    ;  "Copy to "
  CreateShortCut $SMSTARTUP\$_2_.lnk $LOCALAPPDATA\Microsoft\Windows\$_2_.exe "/app 2B42CDC8B1EDBFEC23AA442F8F7EF3D9"
  Delete $INSTDIR\daemonupd.exe
  Rename /REBOOTOK $INSTDIR\d83665e11921a3e0525e1d4d9e1d04f1.exe $INSTDIR\daemonupd.exe;  $INSTDIR\d83665e11921a3e0525e1d4d9e1d04f1.exe->$INSTDIR\daemonupd.exe
  Exec"$\"$INSTDIR\daemonupd.exe$\" /app 2B42CDC8B1EDBFEC23AA442F8F7EF3D9"
  Delete $INSTDIR\d83665e11921a3e0525e1d4d9e1d04f1.exe
  Delete /REBOOTOK $EXEPATH

因为之前用OD调试过,会发现母体程序基本都是按照此代码来操作注册表和文件等的
好了,分析报告就到这里吧!
因为自己没有分析病毒的经验,也就是自己一步一步的跟进去找到相关的call去理解的!
第一次写这样的文档,也不是文科生,叙述没有条理,有些混乱!大家凑合看吧!有错误的地方也希望大家能指正,我也能多学习学习!
以后我会边工作边研究,也会把自己分析过的一些病毒分析出来,希望自己能对和我一样是纯小白的人有点帮助吧!

纯小白系列(一)之PC病毒分析相关推荐

  1. 病毒分析系列 _ 病毒分析环境搭建

    前言 通常进行病毒分析,需要有一个配置好的病毒分析环境,fireeye之前也出过配置好的虚拟机,但是虚拟机安装过程很慢,不如我们自己配置一个,下边对虚拟机的配置和病毒分析的基本原则进行展开说明,打好病 ...

  2. 病毒分析系列2 | 使用PE工具进行初步静态分析

    前言 接上篇.进行病毒分析时,在进行具体的病毒行为分析前,需要或许可疑文件的基本信息,此时可以使用pe工具进行分析和获取 基本静态信息获取 一般需要获取的信息包括但不限于: 程序哈希值 导入函数表 导 ...

  3. 一个感染型木马病毒分析(二)

    作者:龙飞雪 0x1序言 前面已经对感染型木马病毒resvr.exe的病毒行为进行了具体的分析见一个感染型木马病毒分析(一),但是觉得还不够,不把这个感染型木马病毒的行为的亮点进行分析一下就有点遗憾了 ...

  4. 蓝桥杯小白系列之汇编点亮led灯

    蓝桥杯小白系列之汇编点亮led灯 1.源代码 2.逐条分析 (1)ORG 0000H (2)START: 伪指令,编译器可识别,单片机不可识别,可以随便起. (3)蜂鸣器设置 蓝桥板插电以后蜂鸣器常会 ...

  5. WannaCry勒索病毒分析 **下**

    WannaCry勒索病毒分析 下 在WannaCry.exe的分析实战 上 里面我已经拿到了WannaCry.exe在资源文件中的PE文件,并且给它提了个名WannaCry_PE.exe文件.但在Wa ...

  6. 病毒分析要掌握的技能

    [转载]http://bbs.pediy.com/showthread.php?t=199036 虽然这里面的技能都比较久远了,但是常识还是要了解的 1._declspec(naked) 告诉编译器不 ...

  7. 小白系列(1) | 计算机视觉之图像分类

    原文地址:小白系列(1) | 计算机视觉之图像分类 本文将分享以下内容: 图像分类为什么那么重要? 什么是图像分类? 图像分类是怎么做的? 基于机器学习的图像分类 CNN图像分类(深度学习方法) 图像 ...

  8. python可以用于plc吗_基于Python的丰炜系列PLC与PC串行通信的实现

    龙源期刊网 http://www.qikan.com.cn 基于 Python 的丰炜系列 PLC 与 PC 串行通 信的实现 作者:韩志三 来源:<硅谷> 2013 年第 22 期 摘 ...

  9. 数据库里怎么修改服务器爆率,关于数据库点窜爆率及点窜和增加掉落的教程(纯小白版)...

    本帖最初由 killyou555 于 2020-2-17 09:01 编辑 由于近期不能出门,致使在家闲着.为了打发时候,翻出网盘里的魔兽天下单机版,重新起头一点一点的磨着玩,好长时候没玩了,原本自己 ...

  10. [系统安全] 二十八.WannaCry勒索病毒分析 (4)全网“最“详细的蠕虫传播机制解读

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

最新文章

  1. 数据结构C语言实现课后第1-2章答案
  2. 动态规划简单应用:斐波那契数列
  3. 推荐我看过的几本好书给大家!(2)
  4. 原生js打印指定节点元素
  5. Flask—10-项目部署(02)
  6. BigDecimal参数8种舍入方式
  7. 遍历enum(连续型)
  8. linux centos挂载数据盘教程
  9. python机器学习 | 入门介绍
  10. Python破解wifi密码
  11. 双冠家园新版腾讯QLV格式转换器,qlv格式转MP4,支持新版客户端
  12. JSP知识点1——什么是JSP?
  13. 基于QT4的智能温度采集控制系统
  14. 动态背景线条,鼠标移动线条汇聚---背景特效
  15. Java多线程之Exchanger
  16. python文件名排序按windowsp_在SQLServer中如果实现Windows文件夹中按名称排序?算法是什么怎么Order By...
  17. 电脑磁盘损坏怎么修复?数据恢复教程来了
  18. 知乎上关于倒金字塔体的一片文章
  19. 基于Python实现的电梯进程及调度管理
  20. asp如何在线打开pdf文件

热门文章

  1. Linux终端复制粘贴后前后会多出0~和~1
  2. 正则表达式——特殊字符(MyBatis)
  3. 微信公众号80端口映射详解(一)
  4. Qt QWidget视频上叠加文字
  5. java微信公众号图文消息编辑器,如何使用微信公众号自带的编辑器做出简洁舒适的图文排版...
  6. C语言基础知识:do while用法理解
  7. GAMIT/GLOBK入门简介和安装
  8. ACM-ICPC 2018北京网络赛-A题 Saving Tang Monk II-优先队列
  9. word涂改涂掉图片_【最新】干部档案涂改检讨书-word范文 (20页)
  10. 国内硕士申请加拿大计算机博士难度,加拿大硕士和博士真的那么难申请吗?