前辈们你们好我是萌新(•ᴗ•)
第一次尝试病毒分析,想挑一个资料多的来写(免得我找不着北...),于是决定分析之前非常出名的WannaCry
(过程中几次卡壳都从前辈们的报告里得到了思路,感谢每一位前辈!)
文章中问题肯定不少,就麻烦各位多多指正帮助了!
这个样本是我从B站一个测试病毒的视频里给的网址下的(叫1500个病毒啥的),拖进IDA之后直接到了WinMain,因为之前已经看过各大厂商写的分析报告,大概观察了一下于是得出结论:我的样本病毒是主程序生成的负责进行加密文件勒索用户的模块(主程序负责释放勒索模块和传播),不过我现在还在学习阶段,就先只研究一下病毒的恶意行为也是极好的 ⊙﹏⊙‖ ...
文件名称:wcry.exe
MD5:84C82835a5d21bbcf75a61706d8ab549
文件类型:EXE
出品公司:MicrosoftCorporation
壳或编译器信息: MicrosoftVisualC++6.0
首先样本向注册表写入了两个键值:
RegCreateKeyW
然后使用内置的解压软件,以WNcry@2ol7为解压密码,释放了b、c、r、s、t.wnry文件,u.wnry、taskdl/se.exe是PE32文件,一个多国语言支持包...
果然 “制作恶意程序的人往往也是出色的开发者” 一点儿没错...
解压缩资源文件的代码,Str是压缩密码。
上面几个函数里面实在是复杂,看的眼睛都瞎了...大体上都是循环解压的函数。
释放的文件的字节码:
b.wnry字节码:查资料之后得知是BMP文件。
c.wnry字节码:查资料之后得知上面的比特币钱包地址,下面的像是木马的下载地址
r.wnry字节码:这个就很明显了,是勒索窗口里显示的文字。
s.wnry字节码:查资料后得知PK是zip文件头,解压之后是TaskData(这么乱果然是代码...ヾ( ̄▽ ̄)~)
t.wnry字节码:看不出来是什么,这么乱应该也是代码吧
接下来到这里:三个字符串是比特币钱包。但是之后这里我没看懂,从c.wnry里读取了30C字节数据,然后好像也没往里写什么呀?
就又写回去了,函数的第二参数为1是读文件,0是写文件
把程序所在目录的文件属性设为了隐藏。但是我没找到对应代码......
接下来:无窗口创建进程,命令行参数: attrib +h .
无窗口创建进程,命令行参数:icacls . /grant Everyone:F /T /C /Q
然后获得要用的API
这里是导入一个密钥,程序里的加密操作使用Crypt系列函数做的。
(密钥相关的知识我现在力所不能及...等以后有时间了再好好研究一下吧)
然后到了主体中最重要的部分:动态加载t.wnry作为dll并调用其中的TaskStart函数 (注:这是整理的时候加上的)
可以看到打开t.wnry,ReadFile。
现在我可以确定文件里的东西很重要...应该就是代码
下面又到了一处:解密了t.wnry之后把数据映射到了内存中,可以看到PE头。
因此得出结论:t.wnry是一个dll文件,并且病毒自己实现了LoadLibrary,里面应该才是核心代码。
节区信息
终于做完了准备工作,要到关键函数了:
FindTaskStart函数:
这里因为看过报告...所以知道是密钥相关的文件
释放密钥文件之后函数去t.wnry里搜索导出函数,可以看到里面只有一个函数:TaskStart。
t.wnry的导出表:
到这里勒索模块主体的静态分析就结束了,于是我试着把释放出来的Dll dump下来继续分析,但是这里因为内存的类型是Private,OllyDump和LordPE都无法访问内存ヾ(゚∀゚ゞ)
纠结了一阵子之后悟出方法如下:内存窗口打开这块内存,全选二进制复制,WinHex新建文件,粘贴进去选择ASC Hex
(作为萌新,我猜除了我一定还有其他人以前没想到这么简单也可以dump的吧…(⊙_⊙;)…)
于是愉快的继续分析,IDA打开可以看到代码比之前清楚得多,应该是因为准备工作都做好了吧
首先创建了一个互斥体
获得PC的SID(安全标识符,用于标识用户,组和计算机帐户)
这段代码是:查找文件对象的所有者,取得该对象的所有权来更改文件对象(查资料得知的,没太理解)
获得文件属性,但是GetLastError说文件不存在,直接返回了
于是我猜了一下:这个文件应该是交了钱之后装着密钥的,如果存在就会开始解密了而不是加密文件。于是就跳过了一个超复杂的函数
(确认后的确是这样,猜对了就很开心...ヽ(✿゚▽゚)ノ)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2018-6-11 12:43
被theme_编辑
,原因: