

- LordPE查看样本输入表,发现有使用网络相关的操作:

1 |
将刚刚我们提取出来的exe文件再次拖到Resource Hacker里查看一下其资源,发现了有一个`PK`开头的资源,这是一个 ZIP 格式的压缩文件,我们可以再次将它提取出来,保存为 ZIP 文件,当然微步云沙箱也能检测出这个文件的格式:
|


1 |
可以看出来这个压缩包里有很多文件,但都是经过加密的,无法直接解压缩和查看:
|

-
行为信息:

-
释放PE文件到C:\Windows\taskse.exe
、
C:\ProgramData\znemvazsnwpqy217\taskse.exe
和
C:\ProgramData\znemvazsnwpqy217\@WanaDecryptor@.exe
-
启动C:\Windows\taskse.exe
-
自我复制
-
进程信息:

-
注册表信息:

-
文件信息:

-
执行情况:

-
启动进程->样本本体
-
加载模块->C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.17514_none_41e6975e2bd6f2b2\comctl32.dll
-
启动进程->C:\Windows\tasksche.exe
-
退出进程->样本本体和C:\Windows\tasksche.exe
1 |
打开IDA载入样本文件,快速定位到`WinMain`函数并按`F5`进入查看伪代码:
|

1 |
这里的检测参数个数其实就是检测是否由鼠标双击运行,因为双击运行的话程序的执行参数就只有一个了:
|

Sub_408000()
1 |
这里就是注册了一个服务然后设置了一下参数就开始执行Sub_407BD0这个函数,重点就是这个函数干了什么:_
|

Sub_407BD0()

Sub_407B90()


1 |
分析到这里其实我们可以用工具去直接找样本中的这两个地址和大小然后把文件提取出来看看这两个文件是干什么的,这里可以使用 010 Editor,当然别的十六进制工具也行。
|
- 第一个PE文件起始RVA是B020,大小是C8A4,由于不知道是什么格式只知道是个PE文件,这里就暂时保存为EXE文件吧


1 |
载入ExeInfo查看该文件信息,发现是一个DLL文件:
|

然后LordPE查看它的输入输出表,可以看到输出表就一个函数PlayGame,有点奇怪

- 第二个PE文件的起始RVA是F080,大小是4060:


1 |
但是它确实是一个PE文件呀,那么还有一种情况:这是一个Dos文件
|


第一个线程Sub_407720()





-
Sub_4076B0()

继续向下分析可见这个线程就是用来收发数据的

1 |
注意:< / mark>那么这个收发数据可能就和攻击有关了。
|
第二个线程Sub_407840()
1 |
主要的功能如下,发现其调用的大多都是第一个回调函数里的函数
|


1 |
那么Sub_407840()的主要功能就是随机组合一个公网IP并尝试连接 445 端口,如果连接上了就会攻击这台主机以及这台主机所在的局域网的所有主机,如果没有连接上,就会尝试继续组合IP。
|
总结一下Sub_408000():

总结一下Sub_407BD0():

Sub_407F20()
这个函数调用了两个函数,我们分别进入分析:

sub_407C40()
这个函数挺简单的,就是创建并开启了一个服务:
此时程序就是以附加参数的方式启动,下次检测的时候就会进入参数大于1的分支!

sub407CE0()
这个函数就是创建文件并执行exe的函数

还记得前面从样本提取出来的EXE文件吗?它就是R资源

小结一下Sub_407F20函数的功能

按照现有的分析可以梳理一下大致的流程:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
graph TB
A((开始)) - - >Z{能否访问目标网站}
Z - - 是 - - >Y((结束))
Z - - 否 - - >X[执行主逻辑块]
X - - >B{鼠标双击启动?}
B - - 是 - - >C[创建服务启动自身]
C - - >D[在系统目录下创建并执行文件tasksche.exe]
B - - 否 - - >W[打开自身服务]
W - - >V[获取加密容器]
V - - >U[创建线程]
U - - >T[第一个线程]
T - - >E[获取网卡信息] - - >F[尝试局域网攻击]
U - - >S[第二个线程]
S - - >G[获取网卡信息] - - >H[尝试广域网攻击]
|
1 |
样本主函数以及分析完了,接下来就要去看看他释放并启动的`C:\WINDOWS\tasksche.exe`这个文件的行为了。
|
首先,由于这个被释放出来的文件是没有加壳的,所以我们可以直接将它载入IDA定位到main查看其代码:

这个判断的条件有点多,我们一个一个去看:

所以这个函数就是尝试在C:\WINDOWS\ProgramData
、C:\WINDOWS\Intel
、C:\WINDOWS
或临时目录下创建服务并设置其属性为隐藏。

接着就来了三个函数:
如果有目标服务就直接开启了,没有的话以tasksche.exe
所在的完整路径创建一个服务并运行


先关注一下这个函数有三个参数,第一个就是路径,后两个都是0

就是创建了一个隐藏的进程去运行程序

小结一下,sub_401F5D函数就是创建一个服务或进程来运行tasksche.exe
回到主函数,继续往下看:
如果参数是1,就设置当前路径为注册表值
如果是0,就获取注册表中病毒路径设置到当前目录中


这个Str的字符是这一串,然后我们点进去看看这个函数有什么操作:
一进来就寻找那个ZIP包的资源


猜测这个sub_4075AD就是用来解压的函数,我们可以验证一下,那个Str就是密码:
真的就成功解压缩了,把病毒资源释放出来了


注意:该函数调用的时候后三个参数都是0


应该是对t.wnry文件进行操作

到这里都是读取文件中的数据然后比较

进去临界区进行解密操作

这个函数非常复杂,里面涉及到了很多数据的计算,猜测是加密或者解密的操作,可以进OD调试,看看到了这个函数会发生什么:


第一个参数是Dest,数据窗口跟随查看有什么:

第二个是Src,一样的,查看有什么:

F8
单步步过之后发现这两个空间的值并没有发生变化,只有EAX
作为返回值得到了0xA
这个函数暂时不知道是干什么的,做个?
标记一下继续往下看吧
这个函数点进去看也比较复杂,还是使用OD动态调试吧:
首先这个函数有5个参数,除去this指针,堆栈中有4个

可见Src就是刚刚从文件读取出来的数据,v16是申请出来的空间



v18是读文件的实际字节数,这里是0x10000,也就是要对这么多个字节进行操作。
这个函数调用过后,在申请的空间中出现了一个PE文件,所以这个函数就是对文件数据的一个解密操作。

我们可以将这段数据保存出来,到一个文件中查看其信息:


ExeInfo查看其是一个无壳的DLL文件:

使用LordPE查看其导出表发现有一个导出函数:

那么回过头我们可以小结一下sub_4014A6()函数就是解密t.wnry
文件

看到这里可以猜测一下这个函数就是载入刚刚释放的DLL文件,然后获取其函数用的。


下面还有很多函数,就不需要一一去分析了,我们直接跳到最后看一下返回值是什么:

这个v22就是保存PE文件和内存信息的结构体呀:

那么我们可以在OD里运行一下这个函数,看看它申请的60个字节的空间里装了什么:

-
第一个地址装了个DOS头
1 |

|
-
第二个地址是DLL的默认加载基址(0x10000000
)
-
第三个地址是导出表信息
1 |

|
-
第四个是导出函数个数(6)
-
最后5个是函数指针
所以小结一下sub_4021BD就是载入了刚刚释放的DLL文件。
继续往下看,发现了一个函数名TaskStart
:
这个不就是刚才那个DLL文件的导出函数嘛?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课