「SharpC2学习」EXE载荷生成流程

简介: 「SharpC2学习」EXE载荷生成流程

SharpC2中EXE格式的Payload生成学习记录,shellcode的也差不多,多使用了个donut,记个笔记,写的较潦草



在MAC中的VS启动Teamserver,使用其自带的swagger进行调试(好方便)

在调试处发起请求,在PayloadsController这个Controller中对应的处理action是GetPayload,在这下断点

39行首先获取Profile,跟过去看到是从这里取配置设置的TeamServer.Models.C2Profile

接着payload为exe格式,自然进入ExePayload()方法处理

payload类型

进入到TeamServer.Models.ExePayload中的Generate()

第一步,进入GetDroneModuleDef,调用TeamServer.Utilities中的GetEmbeddedResource

GetEmbeddedResource方法如下

大致就是获取TeamServer中的资源文件读取到内存。

然后调用.net第三方库dnlib

语句:ModuleDefMD.Load(drone);,读取模块,(只能读取.net的模块这个库)

接着对模块进行一系列操作

通过这个库给这个EXE的payload根据profile写一些设置,

这里的EmbedHandler()复杂的一笔,猜测是对应Handler的,但代码真没看懂,还望师傅赐教,

private void EmbedHandler(ModuleDef module)
        {
            // get handlers (not including the abstract)
            var handlers = module.Types
                .Where(t => t.FullName.Contains("Drone.Handlers", StringComparison.OrdinalIgnoreCase))
                .Where(t => !t.FullName.Equals("Drone.Handlers.Handler", StringComparison.OrdinalIgnoreCase));
            // match the one that matches the abstract name
            // it's actually set in the ctor of all places
            TypeDef targetHandler = null;
            foreach (var handler in handlers)
            {
                var ctor = handler.Methods.GetConstructor();
                if (ctor is null) continue;
                var instructions = ctor.Body.Instructions.Where(i => i.OpCode == OpCodes.Ldstr);
                foreach (var instruction in instructions)
                {
                    if (instruction.Operand is null) continue;
                    var operand = (string) instruction.Operand;
                    if (!operand.Equals(Handler.Name, StringComparison.OrdinalIgnoreCase)) continue;
                    targetHandler = handler;
                    break;
                }
            }
            if (targetHandler is null) throw new Exception("Could not find matching Handler");
            if (Handler.Parameters is not null)
            {
                foreach (var handlerParameter in Handler.Parameters)
                {
                    // get matching method in handler
                    var method = targetHandler.Methods.GetMethod(handlerParameter.Name);
                    var instruction = method?.Body.Instructions.FirstOrDefault(i => i.OpCode == OpCodes.Ldstr);
                    if (instruction is null) continue;
                    instruction.Operand = handlerParameter.Value;
                }
            }
            // finally, ensure that the drone is creating an instance of the correct handler
            var droneType = module.Types.GetType("Drone");
            var getHandler = droneType.Methods.GetMethod("get_GetHandler");
            getHandler.Body.Instructions[0].Operand = targetHandler.Methods.GetConstructor();
        }

最后使用AutoMapper,转换类型并响应这个请求,这个东西开始在controller构造函数中也注入进来了

转换这个对象为bytes类型并响应

为base64,解开之后是PE



   看了一下他的生成payload流程,没想到不是那种patch的方式,而是使用的dnlib这个库操作.net模块,如果二开的话使用c++编写植入体的话EXE这里的流程也都要修改不少,md。

   比较潦草,时间紧,因为我要早睡了,88,还不来一起早睡?

相关文章
|
3天前
LabVIEW为可执行文件构建安装程序时找不到运行引擎
LabVIEW为可执行文件构建安装程序时找不到运行引擎
|
3月前
|
数据可视化 前端开发 JavaScript
利用千帆大模型写一个vbs的图形化win11简便操作项目(未成功)
利用千帆大模型写一个vbs的图形化win11简便操作项目(未成功)
14 0
|
4月前
|
NoSQL 开发工具 数据库
基于Python开发的学生信息管理系统控制台程序(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
基于Python开发的学生信息管理系统控制台程序(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
|
10月前
|
测试技术 C++
VC与CppUnit使用的全过程(为了作业所写,所以绝对详细)
VC与CppUnit使用的全过程(为了作业所写,所以绝对详细)
150 0
|
安全 IDE 开发工具
VS2010调试X64项目工程时,报错提示VS调试监视器(MSVSMON.EXE)未能启动,解决方案。
VS2010调试X64项目工程时,报错提示VS调试监视器(MSVSMON.EXE)未能启动,解决方案。
445 0
CLion中创建多个.c文件不能运行问题及报错问题
CLion中创建多个.c文件不能运行问题及报错问题
CLion中创建多个.c文件不能运行问题及报错问题
小工具随手记:使用Pyinstaller将多个.py程序及其关联资源打包成exe
小工具随手记:使用Pyinstaller将多个.py程序及其关联资源打包成exe
小工具随手记:使用Pyinstaller将多个.py程序及其关联资源打包成exe
|
Windows
Qt程序打包生成exe详细步骤
Qt程序打包生成exe详细步骤
Qt程序打包生成exe详细步骤
|
Windows
【解决方案】VS2013外部工具中添加ildasm.exe
【解决方案】VS2013外部工具中添加ildasm.exe
154 0
【解决方案】VS2013外部工具中添加ildasm.exe