一例MFC文件夹病毒的分析

概述

这是一个MFC写的文件夹病毒,通过感染USB设备传播,感染后,会向c2(fecure.info:443)请求指令来执行。

样本的基本信息

Verified:    Unsigned
Link date:    19:52 2007/7/5
MachineType:    32-bit
MD5:    4B463901E5858ADA9FED28FC5134A039
SHA1:    9F10D1E42AC628B1794DDA08EB6C9B7D7B5DBD55
SHA256:    2C2D947D62D352E8FC0AB8A9D69B8DCA0AEE73716CC02806BD79B473CDBB7B7B

这是一个MFC程序,不太好分析,首先先找到程序的入口

用ResHacker看一下它的资源,其中有一个对话框 ,title为MyPCMD,暂且将这个窗口命名为MyPCMD

在样本的.rdata节中找到了CMyPCMDApp和CMyPCMDDlg中的方法。
其中CMyPCMDApp类中用户自定义的函数有

~CMyPCMDApp_409A10
GetMessageMap_4093FA
InitInstance_4096C6

CMyPCMDDlg类中用户自定义的方法有

~CMyPCMDDlg_40A050
GetMessageMap_409C56
OnInitDialog_409C66

病毒的恶意操作肯定在这几个函数中,依次分析这些函数发现CMyPCMDApp::InitInstance_4096C6和CMyPCMDDlg::OnInitDialog_409C66这两个函数比较可疑。

CMyPCMDApp::InitInstance_4096C6

在注册表中创建开机启动项

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"winmcs"="c:\programdata\winmcs.exe"

将病毒自身拷贝为c:\programdata\winmcs.exe

打开与病毒文件同名的目录

若当前文件名不是c:\programdata\winmcs.exe,启动c:\programdata\winmcs.exe,然后退出。

创建互斥量Hello_ss,若存在同名的互斥量,退出。若不存在同名互斥量,创建一个窗口类CMyPCMDDialog,调用这个对话框的DoModal()方法。

CMyPCMDDlg::OnInitDialog_409C66

在这个函数中将对话框的标题设置空,隐藏窗口,创建又删除文件%temp%\Ie5TempFile.Dat,莫明其妙。之后创建了一个线程来执行恶意操作。


在这个线程中构造了一个非常复杂的类。然后连接fecure.info:443来获取指令,根据指令来执行不同的操作
根据字符串大致可以推断具有以下功能,这部分有点复杂,啃不动。

FileSend send file to romot, peer  
FileRecv recv file to romot, peer  
FileRun recv file to romot, peer and run 
sendfile Send file to the romote
getfile Get the romote file
cmdshell Get the remote cmdshell
mycmd Run the remote cmd
exec Run the remote exec

遍历D-X盘符,寻找U盘来感染。

判断U盘的方式有两种,一是调用GetDriveTypeA,二是通过DeviceIoControl来查询存储设备的属性来判断是否为USB设备(code为IOCTL_STORAGE_QUERY_PROPERTY 0x2D1400u)。

感染U盘的方式简单粗暴,直接将根目录下的原文件夹隐藏,将自身复制为目录名+169个空格+'.exe',感染后的症状如下图所示,由于exe文件名太长了,资源管理器显示不全,用户一般看不到后缀名,会误点击造成感染系统。

IOC

hash 
4B463901E5858ADA9FED28FC5134A039文件
c:\programdata\winmcs.exe
%temp%\Ie5TempFile.DatX:\目录名+169个空格+'.exe'互斥量 Hello_ss网络
fecure.info:443

总结

这个样本是分析的第一个MFC病毒,又重新把MFC学习了一篇,对于C++中的类的逆向有点费劲。

参考资料

  • 逆向MFC程序_mfc逆向-CSDN博客

  • VS2010/MFC编程入门教程之目录和总结-软件开发-鸡啄米 (jizhuomi.com)

  • [翻译]浅析MFC逆向(Basic MFC Reversing)-外文翻译-看雪-安全社区|安全招聘|kanxue.com

  • [原创]STORAGE_DEVICE_DESCRIPTOR 方式获取硬盘序列号-编程技术-看雪-安全社区|安全招聘|kanxue.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/316171.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在idea中连接mysql

IDE(集成开发环境)是一种软件应用程序,它为开发者提供编程语言的开发环境,通常集成了编码、编译、调试和运行程序的多种功能。一个好的IDE可以大幅提高开发效率,尤其是在进行大型项目开发时。IDE通常包括以下几个核心组…

AI系列:大语言模型的RAG(检索增强生成)技术(上)

前言 大型语言模型(LLM)虽然在生成文本方面表现出色,但仍然存在一些局限性:数据是静态的,而且缺乏垂直细分领域的知识。为了克服这些限制,有时候会进行进一步的模型训练和微调。在实际应用中,我…

leetcode 221 最大正方形面积

示例 3: 输入:matrix [["0"]] 输出:0 # 最大正方形面积 def max_square(matrix):m len(matrix)n len(matrix[0])if m 0 or n 0::return Nonemax_side 1dp [[0] * (n 1) for _ in range(m 1)]for i in range(1, m 1):fo…

Linux进程——进程的概念(PCB的理解)

前言:在了解完冯诺依曼体系结构和操作系统之后,我们进入了Linux的下一篇章Linux进程,但在学习Linux进程之前,一定要阅读理解上一篇内容,理解“先描述,再组织”才能更好的理解进程的含义。 Linux进程学习基…

Unity 数字字符串逗号千分位

使用InputField时处理输入的数字型字符串千分位自动添加逗号,且自动保留两位有效数字 输入:123 输出:123.00 输入:12345 输出:12,345.00 代码非常简单 using UnityEngine; using TMPro;public class …

Elcomsoft iOS Forensics Toolkit: iPhone/iPad/iPod 设备取证工具包

天津鸿萌科贸发展有限公司是 ElcomSoft 系列取证软件的授权代理商。 Elcomsoft iOS Forensics Toolkit 软件工具包适用于取证工作,对 iPhone、iPad 和 iPod Touch 设备执行完整文件系统和逻辑数据采集。对设备文件系统制作镜像,提取设备机密&#xff08…

Linux网络-文件传输协议之FTP服务(附带命令及截图)

目录 一.FTP简介 二.FTP的数据模式 1.主动模式 2.被动模式 3.两种模式比较 三.安装配置vsftpd 1.安装vsftpd 1.1.安装前关闭防火墙 1.2.安装vsftpd 1.3.查看 1.4.备份 2.配置 3.重启后生效 四.相关实验 1.以win为例 1.1.设置并测试测试连通性 1.2.在终端里创建…

(mac)Prometheus监控之Node_exporter(CPU、内存、磁盘、网络等)

完整步骤 1.启动 Prometheus 普罗米修斯 prometheus --config.file/usr/local/etc/prometheus.yml 浏览器访问 http://localhost:9090/targets 2.启动Node_exporter node_exporter 访问:http://localhost:9100 3.启动grafana brew services start grafana 访问…

Pulsar【部署 02】Pulsar可视化工具Manager安装使用

Pulsar Manager 是一个基于 web 的 GUI 管理和监视工具,可帮助管理员和用户管理和监视租户、命名空间、主题、订阅、代理、集群等,并支持对多个环境进行动态配置。 可视化工具Manager安装使用 1.Docker1.1 拉取镜像并启动1.2 设置用户名密码1.3 登录并添…

基于SpringBoot+Vue高校实习管理系统的设计与实现

项目介绍: 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统高校实习管理系统信息管理难度大&#xf…

阿里开源黑白图片上色算法DDColor的部署与测试并将模型转onnx后用c++推理

阿里开源黑白图片上色算法DDColor的部署与测试并将模型转onnx后用c推理 文章目录 阿里开源黑白图片上色算法DDColor的部署与测试并将模型转onnx后用c推理简介环境部署下载源码安装环境下载模型 测试一下看看效果模型转onnx测试一下生成的onnx模型看看效果C 推理 简介 DDColor是…

Java集合框架-Collection-List-vector(遗留类)

目录 一、vector层次结构图二、概述三、底层数据结构四、常用方法五、和ArrayList的对比 一、vector层次结构图 二、概述 Vector类是单列集合List接口的一个实现类。与ArrayList类似,Vector也实现了一个可以动态修改的数组,两者最本质的区别在于——Vec…

Swish和H-Swish激活函数:提升模型训练效率

文章目录 Swish激活函数H-Swish激活函数实现总结参考 在深度学习领域,激活函数是神经网络中的关键组成部分,它决定了网络的输出和性能。近年来,研究人员提出了许多新的激活函数,其中Swish激活函数因其独特的性能优势而备受关注。这…

gateway全局token过滤器

添加gateway依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>创建一个tokenFilter 实现全局过滤器GlobalFilter,并且实现fitler方法 Value("${…

基于SpringBoot的合家云社区物业管理平台 - 项目介绍

合家云社区物业管理平台 2.合家云需求&设计 2.1 项目概述 2.1.1 项目介绍 合家云社区物业管理平台是一个全新的 ”智慧物业解决方案“&#xff0c;是一款互联网的专业社区物业管理系统。平台通过社区资产管理、小区管理、访客管理、在线报修、意见投诉等多种功能模块&a…

[iOS]组件化开发

一、组件化开发基础 1.组件定义 在软件开发中&#xff0c;一个组件是指一个独立的、可替换的软件单元&#xff0c;它封装了一组相关的功能。组件通过定义的接口与外界交互&#xff0c;并且这些接口隔离了组件内部的实现细节。在Swift语言中&#xff0c;组件可以是一个模块、一…

基于arcpro3.0.2版的使用深度学习检测对象之椰子树

基于arcpro3.0.2版的使用深度学习检测对象之椰子树 GPU显卡Nivda 1080 训练模型图 (四)检测对象之椰子树 使用深度学习检测对象 打开 detect objects using deep learning,参数 输入栅格为要检测的影像 模型定位为上一步输出的.emd文件 cpu模式Max Overlap Ratio0.4 运行时间…

百面算法工程师 | 分类和聚类

目录 6.1 为什么正确率有时不能有效评估分类算法&#xff1f; 6.2 什么样的分类器最好&#xff1f; 6.3 什么是聚类&#xff0c;你知道哪些聚类算法&#xff1f; 6.4 K-Means聚类算法如何调优? 6.5 K-Means聚类算法如何选择初始点? 6.6 K-Means聚类聚的是特征还是样本 …

服务器数据恢复—StorNext文件系统下raid5阵列数据恢复案例

服务器数据恢复环境&#xff1a; 昆腾某型号存储&#xff0c;8个存放数据的存储柜1个存放元数据的存储柜。 元数据存储&#xff1a;8组RAID1阵列1组RAID10阵列4个全局热备硬盘。 数据存储&#xff1a;32组RAID5阵列&#xff0c;划分2个存储系统。 服务器故障&#xff1a; 数据…

c++初阶——类和对象(中)

大家好&#xff0c;我是小锋&#xff0c;我们今天继续来学习类和对象。 类的6个默认成员函数 我们想一想如果一个类什么都没有那它就是一个空类&#xff0c;但是空类真的什么都没有吗&#xff1f; 其实并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以…