一.概述

病毒伪装为NirSoft公司的软件NirCmd并加了MPRESS壳,脱壳后是一个混淆过的PE程序,运行时会用到类似PE映像切换的方式来释放出实际的恶意代码,恶意代码主要对文件进行加密。

二.行为分析

母体解密

指定地址跳转。通过函数返回地址+函数第一个参数来确定跳转到的地址,这里主要用于免杀和增加逆向分析难度。

释放恶意代码。多次跳转后到达PE解密的地方,首先从第一个区段中获取到用于PE替换的数据。接着修改PE加载地址的内存保护属性,然后利用获取到的数据对PE进行替换修改。

执行加密代码。PE数据替换完毕后,通过汇编指令jmp和retn实现指定地址的跳转,这里跳转到加密勒索处。

加密初始化

获取后续操作所需的函数。通过对硬编码的数据进行解密,获取到后续加密操作所需的函数地址。

生成个人ID和防多开。在用户的temp目录下生成PPP.KEY和BBB.KEY文件,把UuidCreate函数生成的UUID写入PPP.KEY里,把内存中的数据写入BBB.KEY中。PPP.KEY保存的UUID作为勒索时的个人ID,BBB.KEY用来防止程序多开,程序检查存在BBB.KEY就不会进行加密过程

远程服务器获取AES加密密钥。连接远程服务器91.121.74.154:443,如果成功连接就发送数据包括当前计算机的系统类型,安全标识符的信息等。成功发送数据后,会尝试接收远程服务器的数据并保存到内存空间中,这里接收到的数据用于后面生成AES加密密钥

加密勒索

加密过程使用了256位AES密钥进行加密,如果加密过程中连接到了远程服务器并获取到AES加密密钥,那么加密的文件需要作者手上的AES密钥才可以进行解密。如果加密过程中连接不了远程服务器,那么加密后的文件可以恢复。

AES密钥生成。调用相关加密函数进行加密初始化,这里会导入256位的AES密钥,AES密钥的生成存在两种情况。1.如果连接不了前面的远程服务器,就使用硬编码的数据运算后生成AES密钥。2.如果成功连接远程服务器并接收到数据,就使用接收到的数据作为AES密钥

遍历文件。字母D到Z间遍历存在的本地磁盘和磁盘里的文件,加密指定后缀的文件,这里指定加密的文件类型达到901种。

文件属性设置。匹配到指定文件后,首先获取文件属性,如果是FILE_ATTRIBUTE_NORMAL属性则直接进行加密,如果不是则进行修改。病毒这里编程出现了一点问题,并没有直接把文件属性修改为FILE_ATTRIBUTE_NORMAL,这就导致了病毒只会加密一小部分的文件。

加密流程。首先判断文件大小是否小于20M,接着读取文件内容到内存空间中并删除原文件,使用前面生成的256位AES密钥对文件数据进行加密,然后重新生成文件。生成文件时首先写入固定的硬编码数据,再写入加密后的文件数据

生成警告信息。对本地磁盘遍历过程中,会在每个目录下生成3个内容相同的勒索信息文件:README.txt,README.html,README.bmp。

发送个人ID。所有加密操作完成后,会把计算机的UUID发送到远程服务器上,UUID用于解密时的个人ID

三.IOC

MD5

28065780B3C664F24328957EDE185B4B

域名

http://xijymvzq4zkyubfe.onion

http://xijymvzq4zkyubfe.onion.to

http://xijymvzq4zkyubfe.onion.city

C2

91.121.74.154:443

最新文章

  1. Java表单中关于JavaScript的非空必输验证,你的程序和大牛有多少差距╮( ̄▽ ̄")╭
  2. 14. 星际争霸之php设计模式--状态模式
  3. 一次简单的MySQL数据库导入备份
  4. java环境变量配置(转)
  5. 在 Visual Studio 2013 中使用 Grunt, Bower 和 NPM
  6. GPU crash unmap page access
  7. iOS开发 .framework的Optional(弱引用)和Required(强引用)区别, 有错误 Library not found………………
  8. DB2 数据库绑定用户授权命令
  9. find the mincost route(最小环,最短路,floyd)
  10. mysql 的load data infile要使用
  11. sprintf函数使用
  12. c#: WebBrowser 禁止在新窗口打开链接
  13. [转帖]csdn windows 下载整理.
  14. 初探和实现websocket心跳重连(npm: websocket-heartbeat-js)
  15. PHP之伪类型与变量
  16. Python-requests设置请求的超时时间
  17. 巧用PHP双$功能兼容线上线下配置文件
  18. 【Java】 遍历HashMap
  19. 升级nodejs至最新
  20. 深入理解javascript作用域系列第五篇

热门文章

  1. 编写ROS程序--HelloROS
  2. 走进异步编程的世界 - 开始接触 async/await(转)
  3. 什么时候Python的List,Tuple最后一个Item后面要加上一个逗号
  4. Tensorflow笔记二
  5. JQuery插件:ScrollTo平滑滚动到页面指定位置
  6. systemctl: command not found
  7. 《剑指offer》和为S的连续正数序列
  8. webstorm 2019.1 注册教程
  9. filp_open/filp_close/vfs_read/vfs_write
  10. OPPO F9 Pro在哪里打开usb调试模式的完美方法