调试.net样本反射加载dll并动态Invoke函数

C# 调用dll以及内置dll到exe内部      包含以下几块,如果没你需要的东西,可以继续赶路了      1: C# 对的dll的两种调用      2: dll包含到exe中      3:dll的函数原型获取     最近听闻人到中年的比尔盖茨收购了github并免费了私有的代码仓库,不由的给他点了一波赞,然后嘛就顺手把一个小项目用C#重写了一下,毕竟自从net开源了mono和.net core后,以后做gui也可以用C... 阅读详情

一个.net写的木马样本,内嵌了两个资源,分别是:

  • LAN_Core (.net dll程序,用于解密png中的assembly)
  • ESgFXCQfRbAmmGdIaVSZ.png (用图片隐写技术嵌入了另一个.net程序)

主程序通过调用LAN_Core的f20方法,将自身资源png图片传入
在这里插入图片描述
这里的MyProperty 其实就是ESgFXCQfRbAmmGdIaVSZ.png的资源名
在这里插入图片描述
在这里插入图片描述

再来看看LAN_Core.f20函数做了什么?
1.获取参数传入的资源名称对应的Bitmap对象
2.将Bitmap对象作为参数传给了x3241243213213函数,这个函数从png图片中提取加密的数据,返回byte[]数组
3.将bytes数组传给f13函数,这个函数用来异或解密数组中的数据
在这里插入图片描述

现在想拿到解密出来的assembly数据,有两种方式:

方式一:自己新建一个c#项目,将png添加到资源,然后把LAN_CORE中的相关函数拷贝进来,按照f20函数的调用过程实现,如下demo所示

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Drawing;
using System.Reflection;
using System.Resources;


namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            byte[] rawAssembly = f13(x3241243213213(f15("ESgFXCQfRbAmmGdIaVSZ")));
            Assembly assembly = AppDomain.CurrentDomain.Load(rawAssembly);


            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        // Token: 0x0600000B RID: 11 RVA: 0x00002A00 File Offset: 0x00000C00
        public static Bitmap f15(string f16)
        {
            ResourceManager resourceManager = new ResourceManager("WindowsFormsApplication1.Properties.Resources", Assembly.GetEntryAssembly());
            return (Bitmap)resourceManager.GetObject(f16);
        }

        private static byte[] f13(byte[] ghet32412424124)
        {
            checked
            {
                byte[] array = new byte[ghet32412424124.Length - 16 - 1 + 1];
                Array.Copy(ghet32412424124, 16, array, 0, array.Length);
                int num = array.Length - 1;
                for (int i = 0; i <= num; i++)
                {
                    byte[] array2 = array;
                    int num2 = i;
                    array2[num2] ^= ghet32412424124[i % 16];
                }
                return array;
            }
        }

        // Token: 0x0600000D RID: 13 RVA: 0x00002A94 File Offset: 0x00000C94
        private static byte[] x3241243213213(Bitmap t2341234124312)
        {
            List<byte> list = new List<byte>();
            checked
            {
                int num = t2341234124312.Width - 1;
                for (int i = 0; i <= num; i++)
                {
                    int num2 = t2341234124312.Height - 1;
                    for (int j = 0; j <= num2; j++)
                    {
                        Color pixel = t2341234124312.GetPixel(i, j);
                        Color color = Color.FromArgb(0, 0, 0, 0);
                        bool flag = !pixel.Equals(color);
                        if (flag)
                        {
                            list.InsertRange(list.Count, new byte[]
							{
								pixel.R,
								pixel.G,
								pixel.B
							});
                        }
                    }
                }
                return list.ToArray();
            }
        }

    }
}

方法二: 直接在主exe程序中单步进Invoke函数
在这里插入图片描述

接着单步进入

在这里插入图片描述
继续步入
在这里插入图片描述

到Invoke实现函数里面,下面红框的地方下断 让程序跑起来
在这里插入图片描述
命中其中一个断点后,步入
在这里插入图片描述
继续步入

在这里插入图片描述

此时就到了LAN_CORE这个DLL的F20函数中了
在这里插入图片描述
经过解密函数,我们将解密后的rawAssembly内容,通过内存窗口查看
在这里插入图片描述
可以看到是个PE文件,默认是选中所有rawAssembly数据的,直接右键保存选中即可
在这里插入图片描述

样本md5:E10BC1816979208BB89BF14AE2281174

Cobalt Strike无文件上线:Invoke-SharpLoader与自定义C#加载器实战 在网络安全领域,进程注入与内存执行是规避终端检测与响应(EDR)和防病毒(AV)软件的关键技术。其核心原理在于避免恶意代码以文件形式落盘,转而通过反射加载、内存模块等纯内存操作来执行载荷,从而绕过基于文件特征的静态扫描。这项技术的核心价值在于显著提升了攻击的隐蔽性和持久性,广泛应用于红队评估、渗透测试的后渗透阶段,用于建立稳定的指挥控制(C2)通道。本文聚焦于利用PowerShell脚本Invoke-SharpLoader与自定义C#加载器,实现Cobalt Strike Beacon的无文件代理上线,详细 阅读详情

相关推荐

动态委托替代MethodInfo.Invoke提升.NET插件调用性能

在.NET插件化、热更新和规则引擎等场景中,动态程序集调用常因反射机制(如MethodInfo.Invoke)引发显著性能瓶颈——涉及元数据解析、参数装箱/拆箱、安全检查与JIT校验四重开销。动态生成的委托(如Expression.Compile或Delegate.CreateDelegate)通过一次性元数据绑定与本地机器码跳转,将调用从微秒级降至纳秒级,彻底规避运行时反射开销,并消除GC压力。该技术不改变业务结构,仅替换脆弱的Invoke调用,即可实现25倍以上性能提升,特别适用于高频调用、低延迟要求的

diedangxiang4092的博客 363

使用 Dll Invoke,重新分配内存资源

public class MemoryManagement { [DllImportAttribute("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)] private static extern int SetProcessWorkingSetSize(IntPtr process, int minimu.

君子居易 324

.NET接口驱动的动态加载:从插件化到知识可运营

动态加载是现代软件系统实现热扩展与低耦合的关键能力,其本质在于运行时按需加载并调用外部程序集。核心原理依赖类型反射与契约抽象——通过定义清晰的接口(如ICalculator、IFormatter)作为编译期约定,结合Assembly.LoadFrom与安全类型转换,将不确定性隔离在插件边界内。该技术显著提升系统可维护性与交付敏捷性,广泛应用于报表插件、规则引擎、微服务网关等场景。本文聚焦.NET平台,详解如何以接口为锚点、配置为纽带、工厂为枢纽,构建稳定、可观测、易运维的动态加载体系,真正实现‘记录点滴收获

aobai7842的博客 475

C#调用C++ DLL方法之P/Invoke

Platform Invoke (P/Invoke) 是 .NET 提供的一种服务,允许托管代码(如 C#)调用非托管代码(如 C/C++ 编写的 DLL 函数)。通过 P/Invoke,可以在 .NET 应用程序中使用现有的非托管代码库,而无需重写这些库的功能。记得将C++编译好的dll放入C#启动exe目录下。

qq_36651243的博客 951

避坑指南:在.NET 8中使用Native AOT编译DLL时常见的5个错误及解决方法

本文详细解析了在.NET 8中使用Native AOT编译DLL时常见的5个错误及解决方法,包括无效引用、反射功能失效、P/Invoke兼容性问题等。通过具体代码示例和配置建议,帮助开发者高效解决技术障碍,优化开发项目中的Native AOT应用。

weixin_29248611的博客 327

Unity插件化开发实战:基于反射的动态模块加载与架构设计

在软件工程中,模块化设计是提升代码可维护性和可扩展性的核心思想,其原理在于将系统拆分为高内聚、低耦合的独立单元。通过C#反射机制,程序能够在运行时动态发现和加载这些模块,这一技术价值在于实现了功能的即插即用与热更新能力,极大地提升了项目的迭代效率和团队协作的灵活性。在Unity游戏开发场景中,面对日益增长的功能需求,采用插件化架构可以有效管理代码膨胀问题,例如将天气系统、成就系统等独立功能封装为插件。本文聚焦于Unity中的模块化插件加载实践,详细阐述了如何通过反射机制和接口契约设计,构建一个稳健的插件管理

weixin_30615767的博客 361

.Net中C#的DllImport的用法

【转帖】.Net中C#的DllImport的用法 在 C# 中通过 P/Invoke 调用Win32 DLL  http://msdn.microsoft.com/zh-cn/library/aa686045.aspx   大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如 Windows中的一些功能,C++中已经编写

1105

在C#中使用P/Invoke调用C++ DLL函数实战指南

简介:本教程详细介绍了.NET框架中C#如何调用C++编写的DLL类库方法,并涵盖了相关的关键技术要点。通过使用P/Invoke和CLR封送机制,C#可以访问C++ DLL中的函数。教程将指导如何创建C++ DLL,如何在C#中使用DllImport属性引用这些函数,以及如何处理封送、调用约定、线程安全等关键问题。最后,通过示例代码演示了整个调用过程。

weixin_30765637的博客 1221

.NET元数据解析与安全动态加载实战

元数据是.NET程序运行时类型发现与动态行为绑定的基础机制,其本质是遵循ECMA-335规范的二进制结构(如#~流、TypeDef/TypeRef表)。理解元数据访问原理,可突破传统反射的性能瓶颈与安全限制,实现不加载DLL的静态扫描、跨上下文隔离加载及AOT友好调用。技术价值体现在构建高可靠插件系统、SaaS多租户规则引擎、CI/CD合规审计等场景。本文聚焦System.Reflection.Metadata与AssemblyLoadContext协同实践,深入解析MetadataReader底层读取逻辑

369

C#调用医保DLL实战指南:P/Invoke封装与排查技巧

在Windows平台开发中,通过P/Invoke调用非托管DLL是连接业务系统与底层组件的常用技术,尤其在医疗信息化领域,HIS系统对接医保接口时几乎都会遇到。其核心原理是基于CLR的封送机制,将C#数据类型映射为C/C++原生类型,并正确处理调用约定、字符串编码与内存布局。理解这一技术价值在于,开发者无需深入C++细节就能复用成熟的功能模块,广泛应用于医院挂号、医保结算、自助终端等场景。实际工程中,DLL的位数匹配、依赖项缺失、函数导出名错误以及字符集混乱是最高频的故障点。本文从拿到医保DLL开始,详细拆

weixin_34062469的博客 514

万能动态库调用工具IDMA(InvokeDllMethodsAdvance)

InvokeDllMethodsAdvance简称IDMA,是一个万能的动态库调用工具,不用编写任何代码,就可以调用符合WINAPI标准的任意动态库文件(WINAPI标准即__stdcall调用约定)。 此工具非常适合上位机软件开发或测试人员,可以省去编写demo的时间,直接使用此工具进行调试,有助于开发人员将更多的时间集中在功能开发上。

.NET元数据加载与反射机制深度解析

元数据是.NET运行时的核心基础设施,它并非代码注释,而是嵌入PE文件中的结构化只读数据库,支撑类型解析、泛型绑定、特性读取等关键能力。其加载过程遵循严格的三级流水线:程序集定位→元数据导入→RuntimeType构建,任一环节失败均导致TypeLoadException或BadImageFormatException。理解元数据表(TypeDef/MethodDef/CustomAttribute)与Token引用机制,是排查‘找不到程序集’‘类型加载静默失败’等高频问题的根本前提。结合AssemblyL

chuji3953的博客 454

服务器测试之GPU基础汇总

GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。一个专门的图形核心处理器。GPU是显示卡的“大脑”,决定了该显卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。可以形象的理解为90%的ALU(运算单元),5%的Control(控制单元)、5%的Cache(缓存单元)GPU的设计原理——总结为大量的简单运算。

qq_41897488的博客 2万+

.NET动态委托优化:告别MethodInfo.Invoke性能瓶颈

在.NET中,动态执行用户输入的表达式(如数学公式)是常见需求,但直接使用反射调用MethodInfo.Invoke会导致严重性能损耗——99%以上耗时消耗在元数据查找与安全检查上。其本质是动态性与高性能的矛盾。通过动态生成强类型委托(如Func<double, double>),可将编译开销一次性完成,运行时获得接近原生方法的调用性能(约3纳秒)。该方案兼顾安全性、IDE智能提示与内存可控性,适用于教育绘图、金融风控、工业PLC等高频计算场景,是比Expression.Compile和Roslyn Scr

dejz8829的专栏 409

边缘智能新篇章:RK3588上YOLOv8姿态估计的轻量化部署与性能优化实战

本文详细介绍了在RK3588平台上部署和优化YOLOv8姿态估计模型的完整流程。通过模型转换、ONNX中间表示和性能优化策略,实现在边缘设备上的高效实时推理,为嵌入式AI应用提供可行的轻量化解决方案。

ik6789012的博客 151

IS-IS协议深度解析(二):LSDB同步机制与骨干网实战部署

本文深度解析IS-IS协议的LSDB同步机制与骨干网实战部署。详细阐述了DIS角色如何通过CSNP/PSNP报文高效管理链路状态数据库同步,并与OSPF DR机制进行对比。重点介绍了Level-2骨干网作为逻辑高速公路系统的工作原理,以及通过ATT比特位实现跨区域路由的自动化。最后提供了高可靠性骨干网的实战配置要点与验证方法。

kite3的博客 644

如何通过C#的Invoke( )函数转入DLL文件代码

主要涉及到GetMethods( )和Invoke( )两个函数 第一步: F11进入GetMethods( ) F10跳出GetMethods( ) 第二步: F11进入Invoke( ) F11继续进入 执行到652行UnsafeInvokeInternal( )函数处,F11再进入 再F11进入InvokeMethod( )函数,就进入到dll文件中的函数了 ...

yellow的博客 613

FlowDroid高级技巧:从基础配置到精准Android静态污点分析实战

静态污点分析是软件安全领域的核心技术,通过追踪数据在程序中的流动路径,识别潜在的隐私泄露与安全漏洞。其原理基于控制流与数据流分析,构建程序执行模型,模拟敏感信息从源头到汇聚点的传播过程。这项技术的核心价值在于能在不运行代码的情况下,系统性地发现隐蔽的数据流问题,为应用安全提供前置保障。在Android应用安全审计、合规检测等场景中,静态污点分析工具如FlowDroid已成为发现数据泄露、硬编码密钥等问题的标准手段。本文聚焦于FlowDroid的高级实战应用,深入探讨如何通过优化配置、调参策略及结果分析,将这

weixin_29324401的博客 367

.NET动态委托生成:解决程序集反射调用性能瓶颈

在.NET中,动态加载程序集后通过MethodInfo.Invoke进行反射调用存在显著性能开销,根源在于元数据解析、JIT编译和类型验证等运行时成本。动态委托生成技术(基于Expression Trees或Reflection.Emit)可将反射调用降级为近乎原生的强类型函数调用,规避装箱拆箱与查表开销,实现百倍级性能提升。该方案兼顾灵活性与执行效率,适用于插件化架构、热更新系统及低延迟中间件等场景,是平衡动态性与高性能的关键工程实践。

dingguayi7025的博客 457

ROS2 DDS中间件(图文并茂+超详细)

DDS 的目标场景在端上,致力于使端上的应用可以更容易的进行通信,由于它的完全分布式架构,可以方便的将端上的应用拆分为多进程架构,从而提高端的容错能力。从产品定位角度来讲,它和 Chromium 中的 mojo 都是端上的通信中间件,只不过 mojo 不强调分布式,内部集成了更多的特定于端上的机制,比如句柄的传输,消息的缓存等。但由于 mojo 生于 Chromium,目前官方并没有把它独立出来,所以用起来比较不方便。而 DDS 或许可以在简单的场景下作为 mojo 的替代品。

weixin_39939185的博客 5282

基于WebRTC的现代在线视频会议系统设计与实现

本文详细介绍了如何使用Java和WebRTC技术构建一个完整的在线视频会议系统。我们将从WebRTC的基础原理讲起,逐步深入到信令服务器设计、媒体服务器配置、前后端实现以及高级功能的开发。文章包含大量代码示例和架构图,旨在为开发者提供一套完整的视频会议解决方案。关键词:WebRTC、视频会议、Java、Spring Boot、信令服务器、STUN/TURN、媒体服务器:获取摄像头和麦克风访问权限:处理点对点连接和流传输:实现浏览器之间的任意数据交换。

2201_76125393的博客 187

【.Net】P/Invoke:托管与非托管代码的无缝桥梁

摘要:P/Invoke是.NET框架中托管代码调用非托管DLL函数的机制,通过DllImport声明外部函数并处理数据类型映射(如int、char*对应C#类型)。使用时需注意字符串编码、调用约定和结构体布局,避免常见错误。推荐使用.NET 7+的LibraryImport提升性能,或封装为安全API。调试时可捕获Win32错误码,确保与原生库的安全交互。P/Invoke是连接.NET与底层系统的关键手段,需掌握其规则以实现高效开发。

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 1231

“守望先锋”网络同步分析

守望先锋”(Overwatch)是一款由暴雪娱乐开发的团队基础第一人称射击游戏(FPS),于2016年正式发布。游戏以其独特的角色设计、丰富的游戏模式和高度的团队合作性而受到广泛欢迎。类型:第一人称射击(FPS)/多人在线战斗竞技场(MOBA元素)平台玩家人数:每场比赛由两个六人队伍组成,共12名玩家。客户端/服务器模型:在这种模型中,客户端负责处理用户输入和表现逻辑,而服务器则负责游戏的核心逻辑和状态管理。客户端与服务器之间通过网络进行通信,确保游戏状态的一致性。强同步机制。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 426

.NET动态委托生成:绕过反射提升插件调用性能

在.NET插件化架构中,动态加载程序集后的首次方法调用常因JIT延迟、反射开销和安全检查导致严重性能断崖。其本质是运行时需解析IL、验证类型、触发JIT并走泛型反射路径,而传统优化手段如Expression.Compile存在编译耗时高、缓存难管理等问题。动态委托生成通过Delegate.CreateDelegate直接构建强类型调用桩,跳过反射层与装箱拆箱,在毫秒级完成预热,实现纳秒级稳定调用。该技术显著降低动态程序集调用延迟,适用于游戏Mod、金融策略引擎、IoT固件热更新等高频低延迟场景。

diedangxiang4092的博客 406

[Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

分类(Classification)属于有监督学习(Supervised Learning)中的一类,它是数据挖掘、机器学习和数据科学中一个重要的研究领域。分类模型类似于人类学习的方式,通过对历史数据或训练集的学习得到一个目标函数,再用该目标函数预测新数据集的未知属性。本章主要讲述分类算法基础概念,并结合决策树、KNN、SVM分类算法案例分析各类数据集,从而让读者学会使用Python分类算法分析自己的数据集,研究自己领域的知识,从而创造价值。 19.1 分类 19.1.1 分类模型 与前面讲述的聚类模型类似

杨秀璋的专栏 2万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: bt汇编指令和_bittest
下一篇: javascript shellcode to c shellcode
FFE4
博客等级 码龄9年 234粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值