CrypMic分析报告
2024-10-19 07:36:38
一.概述
病毒伪装为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
最新文章
- Java表单中关于JavaScript的非空必输验证,你的程序和大牛有多少差距╮( ̄▽ ̄";)╭
- 14. 星际争霸之php设计模式--状态模式
- 一次简单的MySQL数据库导入备份
- java环境变量配置(转)
- 在 Visual Studio 2013 中使用 Grunt, Bower 和 NPM
- GPU crash unmap page access
- iOS开发 .framework的Optional(弱引用)和Required(强引用)区别, 有错误 Library not found………………
- DB2 数据库绑定用户授权命令
- find the mincost route(最小环,最短路,floyd)
- mysql 的load data infile要使用
- sprintf函数使用
- c#: WebBrowser 禁止在新窗口打开链接
- [转帖]csdn windows 下载整理.
- 初探和实现websocket心跳重连(npm: websocket-heartbeat-js)
- PHP之伪类型与变量
- Python-requests设置请求的超时时间
- 巧用PHP双$功能兼容线上线下配置文件
- 【Java】 遍历HashMap
- 升级nodejs至最新
- 深入理解javascript作用域系列第五篇
热门文章
- 编写ROS程序--HelloROS
- 走进异步编程的世界 - 开始接触 async/await(转)
- 什么时候Python的List,Tuple最后一个Item后面要加上一个逗号
- Tensorflow笔记二
- JQuery插件:ScrollTo平滑滚动到页面指定位置
- systemctl: command not found
- 《剑指offer》和为S的连续正数序列
- webstorm 2019.1 注册教程
- filp_open/filp_close/vfs_read/vfs_write
- OPPO F9 Pro在哪里打开usb调试模式的完美方法