码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 一例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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

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

    ~CMyPCMDApp_409A10
    GetMessageMap_4093FA
    InitInstance_4096C6
    
    • 1
    • 2
    • 3

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

    ~CMyPCMDDlg_40A050
    GetMessageMap_409C56
    OnInitDialog_409C66
    
    • 1
    • 2
    • 3

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

    CMyPCMDApp::InitInstance_4096C6

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

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

    将病毒自身拷贝为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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    遍历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.Dat
    
    X:\目录名+169个空格+'.exe'
    
    互斥量 Hello_ss
    
    网络
    fecure.info:443
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    总结

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

    参考资料

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

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

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

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

  • 相关阅读:
    vue+elementUi——实现层叠轮播图——技能提升
    【编程】Rust语言入门第4篇 字符串
    分享一个基于SpringBoot+Vue的招生宣传管理系统源码 招生计划管理系统代码
    『Android』Toolbar+DrawerLayout+NavigationView实现类似QQ侧边栏效果
    Vu3.x如何给v-for循环出来的输入框绑定v-mode的值,以及实现父子组件传值、双向绑定
    请求传参.
    Spring Boot企业级开发教程课后习题——第2章Spring Boot核心配置与注解
    安装 MinGW
    Android 四大组件 -- Activity
    Redis分布式锁实现Redisson 15问
  • 原文地址:https://blog.csdn.net/a854596855/article/details/138083330
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号