如何使用DotNet-MetaData识别.NET恶意软件源码文件元数据

关于DotNet-MetaData

DotNet-MetaData是一款针对.NET恶意软件的安全分析工具,该工具专为蓝队研究人员设计,可以帮助广大研究人员轻松识别.NET恶意软件二进制源代码文件中的元数据。

工具架构

当前版本的DotNet-MetaData主要由以下两个部分组成:

1、DotNetMetadata.yar:这是一个Yara规则文件,用于将源代码数据显示到终端;

2、DotNetMetadata.py:该脚本负责从.NET源代码文件中提取GUID、MVID、YTPELIB和程序集名称等信息;

工具下载

由于该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好最新版本的Python 3环境。

接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone https://github.com/bartblaze/DotNet-MetaData.git

工具使用

DotNetMetadata.yar

DotNetMetadata.yar可以将目标.NET源代码文件的相关数据显示到终端,使用方法如下:

yara64.exe DotNetMetadata.yar c:\fakepath\all_samples

Yara规则需要至少Yara v4.2.0版本以上,因此我们建议广大研究人员从【这里】获取最新的发布版本。

DotNetMetadata.py

DotNetMetadata.py脚本可以从.NET源代码文件中提取GUID、MVID、YTPELIB和程序集名称等信息,该脚本支持在Windows和Linux操作系统上运行,按理来说macOS也应该没有问题。

脚本使用样例如下:

python DotNetMetadata.py c:\fakepath\all_samples -c samples_output.csv

该脚本的正常运行需要使用到pythonnet库,安装命令如下:

pip install pythonnet

然后dnlib.dll文件也应该位于相同目录中。

针对类Linux系统,你还需要使用mono-complete安装Mono,在Ubuntu上可以使用下列命令安装:

sudo apt-get install mono-complete

然后从【这里】获取并编译dnlib,或直接从【这里】下载dnSpy-netframework.zip,然后从bin目录中获取dnlib.dll文件即可。这里建议使用最新版本的dnlib文件。

样本规则

项目提供的“sample rules”目录中包含了相关的检测样本规则,你可以根据自己的需求跟新和修改规则。

输出样例

下面给出的输出样例主要针对的是“Mpyiuepnw”单个文件,即PureLogStealer的其中一个版本,其SHA256哈希如下:

c201449a0845d659c32cc48f998b8cc95c20153bb1974e3a1ba80c53a90f1b27

使用Yara规则

$ yara64.exe DotNetMetadata.yar c:\fakepath\Mpyiuepnw.vir

Original Filename: Mpyiuepnw.exe

Internal Name: Mpyiuepnw.exe

Imphash (use with caution): f34d5f2d4577ed6d9ceec516c1f5a744

Compile timestamp (epoch): 1710224522

Module name: Mpyiuepnw.exe

Assembly name: Mpyiuepnw

Typelib: 856e9a70-148f-4705-9549-d69a57e669b0

# of GUIDs: 1

dotnet.guid: 0

 -> guid (MVID) = 9066ee39-87f9-4468-9d70-b57c25f29a67

# of streams: 5

# of resources is: 9

dotnet.resource: 0

 -> name = Rdfeunq.Properties.Resources.resources

 -> offset = 715528

 -> length = 2818774

dotnet.resource: 1

 -> name = Mpyiuepnw.Attributes.WrapperManager.resources

 -> offset = 3534306

 -> length = 180

dotnet.resource: 2

 -> name = Mpyiuepnw.Collections.ImporterHelperCollection.resources

 -> offset = 3534490

 -> length = 180

dotnet.resource: 3

 -> name = Mpyiuepnw.Roles.ConfigOrderRole.resources

 -> offset = 3534674

 -> length = 2932

dotnet.resource: 4

 -> name = Mpyiuepnw.Roles.CodeManager.resources

 -> offset = 3537610

 -> length = 2933

dotnet.resource: 5

 -> name = NAudio.Pages.TemplateAuthenticationPage.resources

 -> offset = 3540547

 -> length = 180

dotnet.resource: 6

 -> name = Mpyiuepnw.Roles.SchemaManager.resources

 -> offset = 3540731

 -> length = 2936

dotnet.resource: 7

 -> name = Mpyiuepnw.Polices.SingletonSingleton.resources

 -> offset = 3543671

 -> length = 180

dotnet.resource: 8

 -> name = NAudio.Common.PrototypeSingleton.resources

 -> offset = 3543855

 -> length = 180

# of module references: 7

# of strings: 710

使用Python脚本

单个文件

$ python DotNetMetadata.py c:\fakepath\Mpyiuepnw.vir

File: c:\fakepath\Mpyiuepnw.vir

  Assembly Name: Mpyiuepnw

  MVID: 9066ee39-87f9-4468-9d70-b57c25f29a67

  GUID: 856e9a70-148f-4705-9549-d69a57e669b0

目录

$  python DotNetMetadata.py c:\fakepath\quasar

File: c:\fakepath\quasar\02f0a7f184fcdaaa4d9a46ca29712c8daae0a46d2038bd362dc818025df8d553.vir

  Assembly Name: Client

  MVID: 60f5dce2-4de4-4c86-aa69-383ebe2f504c

  GUID: None

 

File: c:\fakepath\quasar\0790bb235f27fa3843f086dbdaac314c2c1b857e3b2b94c2777578765a7894a0.vir

  Assembly Name: spoolsv

  MVID: fb86b5ea-fecf-4314-9908-dfb44a648349

  GUID: ab37fd48-1226-4126-b12d-dea3361fb533

 

File: c:\fakepath\quasar\07f103ec9f4cf73a1ea534a7b1fed490045e8611c14cb66dfe8784f01ea63e5c.vir

  Assembly Name: Client

  MVID: 60f5dce2-4de4-4c86-aa69-383ebe2f504c

  GUID: None

 

File: c:\fakepath\quasar\0847a32772909b1685150473294dccd837d8ab3bf8d3a42fc75e8402c8fa9237.vir

  Assembly Name: Client

  MVID: 41eb6d08-2e57-46a1-826d-1b6049ebf6a6

  GUID: None

 

File: c:\fakepath\quasar\1332bb84dff1a55902b5eb2c76988f94a9edf4727d2c79871c47858b270f0856.vir

  Assembly Name: jkepkr

  MVID: da2e26cb-0ca3-474a-8fb6-08aa7ff3de20

  GUID: None

 

File: c:\fakepath\quasar\14b67f3273192e061b04c05bb81aea8794f58a856b762006fb2359f55230327c.vir

  Assembly Name: led注Sbm

  MVID: c4653540-cdba-4dba-965f-6b232d0313d8

  GUID: None

 

File: c:\fakepath\quasar\15931de8e192e8932d881c6d450d52090f92f9b5e9f0f0b903cc5ec033b58b54.vir

  Assembly Name: Client

  MVID: 60f5dce2-4de4-4c86-aa69-383ebe2f504c

  GUID: None

CSV输出样例

表格

文件名

程序集名称

GUID

MVID

c:\fakepath\quasar\02f0a7f184fcdaaa4d9a46ca29712c8daae0a46d2038bd362dc818025df8d553.vir

Client

None

60f5dce2-4de4-4c86-aa69-383ebe2f504c

c:\fakepath\quasar\0790bb235f27fa3843f086dbdaac314c2c1b857e3b2b94c2777578765a7894a0.vir

spoolsv

ab37fd48-1226-4126-b12d-dea3361fb533

fb86b5ea-fecf-4314-9908-dfb44a648349

c:\fakepath\quasar\07f103ec9f4cf73a1ea534a7b1fed490045e8611c14cb66dfe8784f01ea63e5c.vir

Client

None

60f5dce2-4de4-4c86-aa69-383ebe2f504c

c:\fakepath\quasar\0847a32772909b1685150473294dccd837d8ab3bf8d3a42fc75e8402c8fa9237.vir

Client

None

41eb6d08-2e57-46a1-826d-1b6049ebf6a6

c:\fakepath\quasar\1332bb84dff1a55902b5eb2c76988f94a9edf4727d2c79871c47858b270f0856.vir

jkepkr

None

da2e26cb-0ca3-474a-8fb6-08aa7ff3de20

c:\fakepath\quasar\14b67f3273192e061b04c05bb81aea8794f58a856b762006fb2359f55230327c.vir

led注Sbm

None

c4653540-cdba-4dba-965f-6b232d0313d8

c:\fakepath\quasar\15931de8e192e8932d881c6d450d52090f92f9b5e9f0f0b903cc5ec033b58b54.vir

Client

None

60f5dce2-4de4-4c86-aa69-383ebe2f504c

CSV

许可证协议

本项目的开发与发布遵循MIT开源许可协议。

项目地址

DotNet-MetaData:【GitHub传送门】

参考资料

Releases · VirusTotal/yara · GitHub

GitHub - 0xd4d/dnlib: Reads and writes .NET assemblies and modules

GitHub - dnSpyEx/dnSpy: Unofficial revival of the well known .NET debugger and assembly editor, dnSpy

恶意软件狩猎新途径:使用.NET元数据分析跟踪恶意软件 - FreeBuf网络安全行业门户

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

matlab 使用Otsu方法计算图像全局阈值

目录 一、概述1、算法概述2、主要函数3、参考文献二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述

Java----Maven详解

前言 Maven是Java项目的构建工具,通过项目对象模型(POM)管理项目配置信息,自动化构建、测试和部署过程。开发人员可定义项目结构、依赖和构建流程,提高开发效率和质量。本文介绍基本概念和用法,帮助您更好…

大工作量LUAD代谢重编程模型多组学(J Transl Med)

目录 1,单细胞早期、晚期和转移性 LUAD 的细胞动力学变化 2,细胞代谢重编程介导的LUAD驱动恶性转移的异质性 3,模型构建 S-MMR评分管线构建 4,S-MMR 模型的预后评估 5, 还开发了S-MMR 评分网络工具 6&#xff0c…

笔记89:LeetCode_135_分发糖果

前言: 注:代码随想录中没有很清楚的提起想出方法的思路,只是给出了解决这个问题的大致思路和代码;下面我将介绍一下我的思考过程,并贴出实现代码; a a a a 思考过程: 思路1:为了…

Hadoop3:HDFS中DataNode与NameNode的工作流程

一、DataNode中的数据情况 数据位置 /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-823420375-192.168.31.102-1714395693863/current/finalized/subdir0/subdir0块信息 每个块信息,由两个文件保存,xxx.meta保存的是数据长度、校验和、时间戳&am…

【halcon】set_part 实现平移和缩放 彻悟版

背景 之前写了一篇关于set_part 的文章 ,确实也实现了平移和缩放。平移是对的,但是缩放其实有畸变。这个问题一直都困扰着我,知道昨天连续测试了好几个小时,直到晚上11点终于完美解决。 坐标和高宽 坐标 再讲set_part 之前&am…

C语言实现三子棋游戏

目录 一.三子棋游戏分析和设计 二.文件结构设计 三.代码实现 1.先打印菜单,定义menu函数。 2.棋盘初始化 3.下棋 玩家下棋: 电脑下棋: 4判断输赢 判断平局: 四、完整代码 test.c game.h game.c 《三子棋》是一款古老…

【找出满足差值条件的下标 I】python

目录 暴力题解 优化:滑动窗口维护大小值 暴力题解 class Solution:def findIndices(self, nums: List[int], indexDifference: int, valueDifference: int) -> List[int]:nlen(nums)for i in range(n):for j in range(n-1,-1,-1):if abs(i-j)>indexDiffere…

python使用base加密解密

原理 base编码是一种加密解密措施,目前常用的有base16、base32和base64。其大致原理比较简单。 以base64为例,base64加密后共有64中字符。其加密过程是编码后将每3个字节作为一组,这样每组就有3*824位。将每6位作为一个单位进行编码&#xf…

Windows平台C#版RTSP转RTMP直播推送定制版

技术背景 前几年我们发布了C版的多路RTMP/RTSP转RTMP转发官方定制版。在秉承低延迟、灵活稳定、低资源占用的前提下,客户无需关注开发细节,只需图形化配置转发等各类参数,实现产品快速上线目的。 如监控类摄像机、NVR等,通过厂商…

经典链表题-链表回文结构

🎉🎉🎉欢迎莅临我的博客空间,我是池央,一个对C和数据结构怀有无限热忱的探索者。🙌 🌸🌸🌸这里是我分享C/C编程、数据结构应用的乐园✨ 🎈🎈&…

C#基础语言

​​​​ 目录 一个c# 程序主要包括以下部分:​​​​​​​ 标识符 C# 关键字 C# 数据类型 值类型(Value types) 引用类型(Reference types) 对象(Object)类型 动态(Dynam…

迅睿 CMS 中开启【ionCube 扩展】的方法

有时候我们想要某种功能时会到迅睿 CMS 插件市场中找现有的插件,但会有些担心插件是否适合自己的需求。于是迅睿 CMS 考虑到这一层推出了【申请试用】,可以让用户申请试用 30 天,不过试用是有条件的,条件如下: php 版…

03. Spring 事务管理

文章目录 1. Spring 事务管理简介2. Transactional 注解属性信息3. Transactional 简单使用4. Transactional 使用注意事项4.1 正确指定事务回滚的异常类型4.1.1 Java 异常继承体系 4.2 Transactional 注解应用在 public 方法或类上才有效4.3 正确设置 Transactional 的 propag…

解决vue3项目vite打包忽略.vue扩展名

项目打包时报could not relolve “...”,因为vite已不再默认忽略.vue扩展名。 解决方法如下: 在vite.config.js中配置vite使其忽略 .vue 扩展名(不建议忽略) 注意:即使忽略了.vue文件,在实际写的时候也要加…

【CTF Web】CTFShow web7 Writeup(SQL注入+PHP+进制转换)

web7 1 阿呆得到最高指示&#xff0c;如果还出问题&#xff0c;就卷铺盖滚蛋&#xff0c;阿呆心在流血。 解法 注意到&#xff1a; <!-- flag in id 1000 -->拦截很多种字符&#xff0c;连 select 也不给用了。 if(preg_match("/\|\"|or|\||\-|\\\|\/|\\*|\…

Spring MVC+mybatis 项目入门:旅游网(一)项目创建与准备

个人博客&#xff1a;Spring MVCmybatis 项目入门:旅游网&#xff08;一&#xff09;项目创建与准备 | iwtss blog 先看这个&#xff01; 这是18年的文章&#xff0c;回收站里恢复的&#xff0c;现阶段看基本是没有参考意义的&#xff0c;技术老旧脱离时代&#xff08;2024年辣…

使用不同的编译器编译 Skia,性能差距居然这么大

Skia 是一个开源的 2D 图形库&#xff0c;提供路径、文本、图像和渲染等图形处理功能。它最初由 Skia Inc. 开发&#xff0c;后来被 Google 收购&#xff0c;并用在多个 Google 的产品中&#xff0c;包括 Chrome 浏览器和 Android 操作系统中。从事 Android 系统开发的同学应该…

Science 基于尖峰时序编码的模拟神经触觉系统,可实现动态对象分类

快速处理和有效利用手与物体交互过程中产生的动态触觉信号&#xff08;例如触摸和抓握&#xff09;对于触觉探索和灵巧的物体操作至关重要。将电子皮肤&#xff08;e-skins&#xff09;推进到模仿自然触觉的水平&#xff0c;是恢复截肢者和瘫痪患者丧失的功能的可行解决方案&am…

北核论文完美复现:自适应t分布与动态边界策略改进的算术优化算法

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 原始算术优化算法 改进点1&#xff1a;引入…