样本基本信息
云沙箱跑一下
很明显是个病毒
样本逆向分析
拖进ida
1、sub_401225
我们注意到,DisplayName是没有声明的,也就是说它是一个全局变量。我们看一下在其他地方的调用(x)
第一个:
这里是把DisplayName变成宽字节,并写入到widecharstr中
第二处
开启一个服务然后关掉,如果没有DisplayName这个程序先运行在开服务
接下来我们进401225看看
所以此函数的作用是给传过来的参数位置填充字母和数字
接着向下看,是一堆if判断,进入判断后先看文件名最后是不是\,如果是换成0,然后进入下一个函数看看
2、sub_4010FD
先是Destination被拼接成了Software\\WanaCrypt0r,然后进入特定目录创建注册表的值,所以这第二个函数的作用应该是把自己写进注册表
3、sub_401DAB
先加载资源然后锁定资源,再跟一下sub_4075AD
先分配了一段内存,又进入了一个407527函数,是把str写进分配的内存。接着跟406b8e
先判断v5是不是/和\,如果不是,就和asc拼在一块
跟一下405bae
可以看到这里是返回文件偏移指针的一个地方
接着看405fe2
这里看着很烦,其实主要目的是分配内存空间,检查内存空间上是否正常,如果不正常则将内存初始化指针为-1。
回到4074a4,跟进407572
释放一些空间,回退到401dab
4075c4也是在分配内存,退出401dab
4、sub_401E9E
跟进401000
a2为1,以读写的方式打开str2,其中str2为c.wnry。在成功打开文件以后由于
a2=1,那么就是以读的方式将从 c.wnry 文件中向 DstBuf 中读取 780 个字节的数据。如果读
取成功那么返回 1,并关闭流文件。
退出到 sub_401E9E 函数中。进入到 if 函数中,将 source 中的随机一个复制到 Dest 中,之
后再次调用 sub_401000 函数,将数据从缓冲区写回 c.wnry 中。返回 result 的值。
退回主函数中(winmain)。
5、sub_401064
通过在 winmain 函数中点击此函数的第一个参数可以获得第一个参数传入值为:attrib +h .
即增加文件隐藏属性。此函数主要作用即为创建一个进程并将其隐藏。
下面又是一个相同的函数,但是传入的参数不同
通过此属性来赋予所有用户完全访问权限。
6、sub_40170A
此函数的主要作用即判断对 dll 函数是否具备,创建文件,写文件,读文件,移动文件,移
动外部文件,删除文件以及关闭句柄的功能,具体的 dll 文件为:kernel32.dll,使用
LoadLibraryA 函数进行调用。
如果判断对 kernel32.dll 函数具有以上功能那么则进入 if 函数中
7、sub_4012FD
前两个sub都是在初始化临界资源
此函数主要功能为初始化临街资源并将内存中指定的位置数据置 0
401437是在堆中分配内存,我们直接往下看
8、sub_4014A6
第八个函数主要作用是创建 t.wnry 文件并在堆内为其分配内存。
9、sub_4021BD
此函数主要作用即为调用进程虚地址空间并检索指定的 dl 输出函数位置,作为参数在函数
内部获取堆内存地址以及设定异常机制。
10、sub_402924
这里的作用是开启进程,string1为TaskStart
11、sub_40137A
释放全局内存块和临界资源