一.概述

病毒伪装为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

CrypMic分析报告的更多相关文章

  1. Alpha阶段事后分析报告

    每个团队编写一个事后分析报告,对于团队在Alpha阶段的工作做一个总结. 请在2016年11月24日上课之前根据下述博客中的模板总结前一阶段的工作,发表在团队博客上,并在课上的事后分析会上进行汇报,并 ...

  2. 《奥威Power-BI智能分析报告制作方法 》精彩回顾

     上次课我们简单介绍了奥威Power-BI的智能分析报告,并展示了报告与图表相结合的应用场景.图文分析报表的意义不只在于美观,更重要的是固定框架下的灵活性和追根究底的动态分析,有着很强的实用性.上节课 ...

  3. 12月07日《奥威Power-BI智能分析报告制作方法 》腾讯课堂开课啦

            前几天跟我一个做报表的哥们聊天,听着他一茬一茬地诉苦:“每天做报表做到想吐,老板看报表时还是不给一个好脸色.”我也只能搬出那一套“过程大于结果”的内心疗程赠与他,没想到他反而怒了:“做 ...

  4. M1事后分析报告(Postmortem Report)

    M1事后分析报告(Postmortem Report) 设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们项目组所开发的软件为一个基于Andro ...

  5. websphere OSGi应用环境下服务调用saaj包加载问题分析报告

    websphere OSGi应用环境下服务调用saaj包加载问题分析报告 作者:bingjava 版权声明:本文为博主原创文章,转载请说明出处:http://www.cnblogs.com/bingj ...

  6. Google发布SSLv3漏洞简要分析报告

    今天上午,Google发布了一份关于SSLv3漏洞的简要分析报告.根据Google的说法,该漏洞贯穿于所有的SSLv3版本中,利用该漏洞,黑客可以通过中间人攻击等类似的方式(只要劫持到的数据加密两端均 ...

  7. 推荐一个利用 python 生成 pptx 分析报告的工具包:reportgen

    reportgen v0.1.8 更新介绍 这段时间,我对 reportgen 进行了大工程量的修改和更新.将之前在各个文章中出现的函数进行了封装,同时也对现有工具包的一些逻辑进行了调整. 1.rep ...

  8. python 生成 pptx 分析报告的工具包:reportgen

    python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...

  9. 使用AES加密的勒索类软件分析报告

    报告名称:  某勒索类软件分析报告    作者:        李东 报告更新日期: 样本发现日期: 样本类型: 样本文件大小/被感染文件变化长度: 样本文件MD5 校验值: da4ab5e31793 ...

随机推荐

  1. Spring Cloud 2-Zuul 网关服务(六)

    Spring Cloud  Zuul  1.pom.xml 2.application.yml Application.java 1.pom.xml <!-- zuul 网关服务 --> ...

  2. SQL总结 连表查询

    连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要. 只有真正了解它们之间的区别,才能正确使用. 1.Union UNION 操作符用于合并两个或多个 SELECT ...

  3. 手把手教你写vue插件并发布(二)

    前记:上一篇 https://www.cnblogs.com/adouwt/p/9211003.html, 说到了一个完整的vue插件开发.发布的流程,总结下来就讲了这么一个事,如何注入vue, 如果 ...

  4. Python爬虫基础之正则表达式

    一.Python正则表达式的基本使用 Python 3 使用re模块可以实现大部分的正则表达式情况. 1.re.compile(pattern, flags=0) re.compile构建匹配规则并返 ...

  5. 【原创】大叔经验分享(49)hue访问hdfs报错/hue访问oozie editor页面卡住

    hue中使用hue用户(hue admin)访问hdfs报错: Cannot access: /. Note: you are a Hue admin but not a HDFS superuser ...

  6. JAVA 三元运算符 求最大值

    package Code428; import java.util.Scanner; public class CodeScannerMax { public static void main(Str ...

  7. 【微信小程序canvas】实现小程序手写板用户签名(附代码)

    工作中公司业务需要的微信小程序用户签字功能 先看效果图: wxml: <view class="wrapper"> <view class="handB ...

  8. Linux Centos7.5从docker的安装到容器的部署运行

    环境: Win10 内的 VMware workstation(Centos7 64位) 所有命令皆为 root 用户, 非 root 用户应在命令前加 sudo 查看系统版本命令: cat /etc ...

  9. Python网络编程之黏包问题

    二.解决黏包问题 2.1 解决黏包方法1 计算消息实体的大小 服务端接受两次,一次时消息大小,二次是消息实体,解决消息实体黏包 客户端发送两次,一次是消息大小,一次是消息实体 在两次收发之间加入一次多 ...

  10. java 的 try parse

    Integer myInt = Ints.tryParse(a); if (myInt != null) { result.add(Long.parseLong(a)); }