「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,还不来一起早睡?

相关文章
|
2月前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
136 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
10月前
|
人工智能 机器人 编译器
【C++】Windows端VS code中运行CMake工程(手把手教学)
【C++】Windows端VS code中运行CMake工程(手把手教学)
557 0
|
5月前
|
Linux 区块链 Python
Python实用记录(十三):python脚本打包exe文件并运行
这篇文章介绍了如何使用PyInstaller将Python脚本打包成可执行文件(exe),并提供了详细的步骤和注意事项。
198 1
Python实用记录(十三):python脚本打包exe文件并运行
|
5月前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
204 0
|
9月前
|
Python Windows
一步步教你将包含其他文件的 Python 脚本等打包成 EXE
最近我编写了一个Python脚本,该脚本需要依赖两个同级目录下的文件才能正常运行。然而,当我将脚本打包成EXE程序后,必须将这两个文件放在EXE文件的同级目录下才能正常执行。为了简化部署,我希望能将这两个文件一起打包到EXE文件中,这时候该怎么办呢?
|
10月前
|
数据可视化 前端开发 JavaScript
利用千帆大模型写一个vbs的图形化win11简便操作项目(未成功)
利用千帆大模型写一个vbs的图形化win11简便操作项目(未成功)
70 0
|
10月前
|
NoSQL 开发工具 数据库
基于Python开发的学生信息管理系统控制台程序(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
基于Python开发的学生信息管理系统控制台程序(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
116 0
|
安全 数据可视化 Windows
[笔记]Windows安全之《三》Shellcode 补充之 Get-InjectedThread脚本搭建环境及其使用
[笔记]Windows安全之《三》Shellcode 补充之 Get-InjectedThread脚本搭建环境及其使用
378 0
|
安全 IDE 开发工具
VS2010调试X64项目工程时,报错提示VS调试监视器(MSVSMON.EXE)未能启动,解决方案。
VS2010调试X64项目工程时,报错提示VS调试监视器(MSVSMON.EXE)未能启动,解决方案。
575 0
|
Windows
Qt程序打包生成exe详细步骤
Qt程序打包生成exe详细步骤