查看原文
其他

CryptoWall勒索病毒分析

与时尽现。 看雪学院 2019-05-24

前几天给的样本,分析完之后,感觉还是比较经典的,且网上并没有相关分析,所以跟大家分析一下我的思路


用PEID查看,并没有加壳,但是竟然有附加数据



用LoadPe查看导入表信息,明显很奇怪




用火绒剑分析进行行为分析,发现创建了一个跟自己同名的子进程



载入Od,在这个call里程序就跑飞了



跟踪进入,一脸懵*



全都是这样的代码,既然创建了进程,于是直接下API断点

CreateProcessW  CreateProcessA




栈回溯发现地址很小,明显是申请的堆空间,且这个进程是被挂起来的,经验告诉我,既然是挂起,肯定是要修改OEP,活者是写入一段shellcode等操作

继续下 WriteProcessMemory断点




和我想的不太一样,虽然写入了内存,但是发现是把所有的区段都给改了,包括PE头,多次写入,不用想这块内存肯定我们真实的病毒程序


经过分析这块内存是利用VirtualAlloc申请出来的,把内存中的数据复制过来并解密,然后写入挂起的线程


直接把这块内存dump出来




经过测试,dump出来的程序确实真正的病毒程序

下面开始分析病毒的行为


用火绒剑过滤的时候发现病毒会复制到

C:\Users\用户名\Documents\yfqgbh.exe

名字是六位数的随机字母

在CopyFileW上下断




栈回溯发现下面有创建新的进程,这个进程就是我们复制过去的病毒,往上看的话肯定是判断



往上走,发现有拼接字符串,下F2断,重新跑起来



发现在获取目得的路径



然后打开这个位置的病毒,很显然,这个位置并没有我们的程序,所以GetLastError会返回错误代码2




这样我们的跳转实现不了(实现不了则会复制文件到目标目录)为了分析方面我直接把这个jnz改成jmp分析

单步往下跟踪

发现先创建了一个互斥体,防止多开



到这里我们可以先用IDA静态分析,配合OD动态验证我们的猜想



在IDA里我们可以看到,在获取系统版本之后,下面有几个call


第一个call跟进去之后,发现明显是在提权



第二个call,发现看不到什么,回到OD,继续单步




发现返回值是CreateThread



继续单步,发现创建了一个线程,回调函数地址是我们传进来的参数a1



IDA反编译查看该线程的源码,发现是在枚举进程



经过动态分析这个线程



0217FF40   0217FF48  UNICODE "<"

0217FF44   00000000

0217FF48   0000003C

0217FF4C   00000040

0217FF50   00000000

0217FF54   005A3038  UNICODE "runas"

0217FF58   005A33E8  UNICODE "vssadmin.exe"

0217FF5C   005A3410  UNICODE " Delete Shadows /All /Quiet "


静默删除 影子 ?不知道是下要干什么


分析完线程,回到主函数,继续单步发现创建了很多线程,因为文章篇幅,我们直接以找到感染函数和加密函数 为目的分析(毕竟是勒索病毒,分析重点)


单步跟踪发现,有个设置线程优先级的,想象一下,把这个线程设置成了空闲状态




该线程回调函数地址地址为0x401710,IDA中跟随到该函数,发现里面在递归遍历磁盘,既然都遍历了,碰到合适的肯定要加密一下嘛,

进入递归函数,目录是肯定不会加密的,所以里面必不少的就是判断,目录,后缀名为我们需要加密的程序…等





设置属性,读取到内存,又写入,很有可能是在加密,在该函数位置下断

00401C85    E8 46000000    CALL <dump.sub_401CD0>   ; 感染函数



加密函数肯定是要加密我们的文本的,我在C:\backup放入一个txt文本

跑起来程序,发现这个位置确实放了我们的文件,F9运行



断到读取我们放入的文本时,继续单步跟进



发现要CreateFileW我们的文本了



读取到内存



先读取128个字节,并判断开头处是否为空,如果是则是已经加密过的,如果不是则会申请一段堆空间 



把读取的内容放到这个空间



往下单步跟踪发现又申请了一段堆空间,然后有两个可以函数,经过测试



这个位置的call是加密函数

00401FAE   E8 FD1A0000    CALL <dump.sub_403AB0>



最后就是设置文件指针,然后写入加密后的文本了



IDA里面还是比较清晰的



以下为加密函数



如果这个加密是可逆的,那么我们就可以恢复原始文件了。弹出来的框框显示的是RSA-4096不可逆,有兴趣的可以研究

根据这个样本的特征我推测是CryptoWall勒索病毒,具体版本就不知道了




加密前,加密后





- End -





看雪ID:与时尽现。      

https://bbs.pediy.com/user-830989.htm




本文由看雪论坛 与时尽现。 原创

转载请注明来自看雪社区


热门图书推荐

 立即购买!





热门文章阅读

1、从华为方舟编译器看一种JavatoC语言解释器的实现

2、某直播APP逆向TCP协议分析

3、某游戏DLL保护分析,以及偷学一点Unity代码保护思路

4、议题征集 | 2019看雪安全开发者峰会




公众号ID:ikanxue

官方微博:看雪安全

商务合作:wsc@kanxue.com



↙点击下方“阅读原文”,查看更多干货

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存