当前位置: 首页 > news >正文

第15节 编写shellcode加载器

我最近在做一个关于shellcode入门和开发的专题课👩🏻‍💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考。

我的个人主页:https://imbyter.com

我们编写一个最简单的shellcode加载工具,应用于将本地的shellcode文件执行起来。

shellcode加载器基本功能:

  1. 通过传入的参数,读取shellcode文件内容;
  2. 申请与shellcode文件大小相同的内存空间;
  3. 修改申请的内存,使其具备可读可写可执行的属性;
  4. 将shellcode文件内容读取到该内存;
  5. 调用shellcode执行(跳转到该内存首地址并执行)。
#include <stdio.h>
#include <windows.h>int main(int argc, char* argv[])
{// 程序运行时必须传入一个目标shellcode文件路径的参数if (argc == 2){// 读取传入的shellcode文件路径HANDLE hSCFile = CreateFileA(argv[1], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);if (hSCFile == INVALID_HANDLE_VALUE){return 0;}DWORD dwHighSize = 0;// 获取shellcode文件大小DWORD dwFileSize = GetFileSize(hSCFile, &dwHighSize);DWORD flOldProtect;DWORD dwAlreadyRead = 0;DWORD dwReadSum = 0;// 分配堆空间LPVOID g_pShellcode = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwFileSize);// 将分配的内存设置为可读可写可执行的属性VirtualProtect(g_pShellcode, dwFileSize, PAGE_EXECUTE_READWRITE, &flOldProtect);// 读取shellcode文件内存到内存空间ReadFile(hSCFile, (char*)g_pShellcode, dwFileSize, &dwAlreadyRead, NULL);CloseHandle(hSCFile);/* 以下方式调用shellcode用仅支持x86版本_asm{pushadcall g_pShellcodepopad}*//* 以下方式调用shellcode能够x86和x64通用 */typedef void (*FN_Shellcode)();FN_Shellcode fn_Shellcode = (FN_Shellcode)g_pShellcode;// 执行shellcodefn_Shellcode();puts("the shellcode operation is successful!");system("pause");}else{puts("e.g: TestShellcode.exe <shellcode file path>");system("pause");}
}

两种运行方式:

  • 直接将目标shellcode文件拖到加载器exe中执行:

  • 通过cmd命令行方式:


 如果有任何问题,可以在我们的知识社群中提问和沟通交流:

图片​​

一个人走得再快,不如一群人走得更远!🤜🤛


http://www.lryc.cn/news/348744.html

相关文章:

  • JAVA学习-练习试用Java实现爬楼梯
  • [SWPUCTF 2021 新生赛]PseudoProtocols、[SWPUCTF 2022 新生赛]ez_ez_php
  • Hive-拉链表的设计与实现
  • AI应用案例:会议纪要自动生成
  • 基于光纤技术的新能源汽车电池安全监测--FOM²系统
  • 基于 LlaMA 3 + LangGraph 在windows本地部署大模型 (二)
  • Spring MVC(三) 参数传递
  • 常见加解密算法02 - RC4算法分析
  • 如何使用 ERNIE 千帆大模型基于 Flask 搭建智能英语能力评测对话网页机器人(详细教程)
  • Java全局异常处理,@ControllerAdvice异常拦截原理解析【简单易懂】
  • 代码随想录35期Day38-Java(Day37休息)
  • 力扣HOT100 - 739. 每日温度
  • 【爬虫之scrapy框架——尚硅谷(学习笔记one)--基本步骤和原理+爬取当当网(基本步骤)】
  • C++ QT设计模式:责任链模式
  • 基于springboot+mybatis+vue的项目实战之(后端+前后端联调)
  • 【教程向】从零开始创建浏览器插件(六)实战篇
  • 如何用 OceanBase做业务开发——【DBA从入门到实践】第六期
  • Element-UI快速入门
  • 【JavaWeb】网上蛋糕商城后台-商品管理
  • Django Admin后台管理:高效开发与实践
  • Centos7网卡启动失败(Failed to start LSB: Bring up/down)
  • 【NOIP2008普及组复赛】 题4:立体图
  • 【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 删除并获得点数(难度⭐⭐)(76)
  • Windows---CMD常用指令大全
  • 消息中间件是什么?有什么用?常见的消息中间件有哪些?
  • 富锂锰基材料极具发展潜力 我国产业化进程加速
  • 聚水潭和金蝶云星空单据接口对接
  • OpenAI深夜震撼发布最新模型GPT-4o,送上最快速便捷教程
  • 没有申请域名的情况下,用navicat远程连接我们的服务器的Mysql数据库
  • Hive中小文件过多的几种处理方式