ShellCode详解一

news2024/11/16 21:44:38

首先,感谢imbyter的教程,我也是从他的教程中一步一步的了解了shellcode的原理和各种知识。

原理

shellcode仅是一段可执行代码,不需要入口函数。理解shellcode加载原理之前需要理解PE文件在系统中的执行原理,即代码在内存中的执行方式。生成shellcode的方式有很多,但最终原理是一样的,均是使用二进制的汇编,将其加载到可执行程序中,最后系统调用此段汇编。

准备工作

由于shellcode可以加载到其他进程中,所以编写shellcode不能有任何的导入导出函数。当我们编写正常的程序时肯定会有一些导入函数(导出函数一般在dll中会有),所以这是我们需要避免的,以一个简单的例子来解释:
main.cpp

int main()
{
	return 0;
}

导入表

上边是一个简单的代码,下边看其生成的PE文件结构,主要是看其导入表:
在这里插入图片描述
可以看到代码什么功能都没有,但是导入表中依然会有许多系统库被导入,这就涉及到windows的原理了,即使什么也不做也会包含许多系统库,那么如何解决呢?请继续往下看:
1、首先,修改程序的入口函数
将入口函数"main"修改为自定义的函数。有两种方式修改,第一种代码如下:

#pragma comment(linker,"/entry:ShellCodeEntry")

int ShellCodeEntry()
{
	return 0;
}

在文件中添加"#pragma comment(linker,“/entry:ShellCodeEntry”)",即可修改入口函数。
第二种则是在项目属性中修改:
在这里插入图片描述
两种方式的效果是一样的,但是更建议使用第一种方式,不仅更直观,而且在可移植性方面会更好。
接下来我们再看看这样修改后的PE文件导入表情况:
在这里插入图片描述
从上图中可以看到,导入表中的库明显少了,那么剩下的这个库怎么去掉呢,别着急,我们继续往下走。
2、将安全检查关掉
在这里插入图片描述
好了,继续让我们看一下PE文件的导入表:
在这里插入图片描述
可以明显的发现生成的PE文件已经没有导入表了。

字符串优化

解决了导入表的问题,大家是不是就以为终于可以写shellcode代码了,no,no,no,天真了,其实生成的PE文件中还有一个问题,那就是在“.rdata”节中还会有一些无用的数据,看图:
在这里插入图片描述

可以看到,这个数据节中包含一些数据。
这些数据会导致什么问题呢,那就是当当我们的shellcode代码调用这些数据地址时,执行shellcode的进程若不是我们shellcode的进程则会出现一些无法预料错误,它是找不到这些数据的地址的。
怎么优化呢?只需要将生成清单文件和生成调试信息就好了,如下:
在这里插入图片描述
在这里插入图片描述
然后让我们再看一下设置之后的PE文件:
在这里插入图片描述
大功告成,现在已经没有那些杂乱的数据了,剩下的就可以不用管了,它并不影响我们的shellcode代码,接下来就到了我们的正题了(编写shellcode代码),哈哈哈,别着急,请听下回分解^ - ^

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1665488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构与算法学习笔记三---循环队列的表示和实现(C语言)

目录 前言 1.为啥要使用循环队列 2.队列的顺序表示和实现 1.定义 2.初始化 3.销毁 4.清空 5.空队列 6.队列长度 7.获取队头 8.入队 9.出队 10.遍历队列 11.完整代码 前言 本篇博客介绍栈和队列的表示和实现。 1.为啥要使用循环队列 上篇文章中我们知道了顺序队列…

docker安装时报错:Error: Nothing to do

安装docker时报以下错误 解决方法: 1.下载关于docker的相关依赖环境 yum -y install yum-utils device-mapper-persistent-data lvm22.设置下载Docker的镜像源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3…

分层存储无法拯救 Kafka

01 引言 Apache Kafka 自诞生之日起,就以其卓越的设计和强大的功能,成为了流处理领域的标杆。它不仅定义了现代流处理架构,更以其独特的分布式日志抽象,为实时数据流的处理和分析提供了前所未有的能力。Kafka 的成功&#xff0…

Docker搭建ctfd平台

安装docker和docker-compose (1)安装docker: curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun(2)安装 Docker Compose: yum install docker-compose安装失败参考下面文章 https:/…

【Linux】环境变量是什么?如何配置?详解

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

Electron学习笔记(四)

文章目录 相关笔记笔记说明 六、数据1、使用本地文件持久化数据(1) 用户数据目录(2) 读写本地文件(3) 第三方库 2、读写受限访问的 Cookie3、清空浏览器缓存 相关笔记 Electron学习笔记(一)Electron学习笔记(二)Electron学习笔记…

主机和ubuntu连接

在这里插入图片描述 提示:文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问: 本文目标: 一、背景 最近在hw使用Clion连接服务器,就想把自己的电脑配置好,翻出来正点原子的教程,【正点原子】…

Echart.js绘制时间线并绑定事件

<template><div id"app"><!-- 定义一个具有指定宽高的容器&#xff0c;用于渲染图表 --><div ref"timeline" style"width: 800px; height: 600px;"></div></div> </template><script> import *…

IP证书签发申请

IP证书签发申请 IP证书的全称是IP SSL证书&#xff0c;其主要的作用是为IP实现https访问&#xff0c;且IP SSL证书可以完美的解决企业对于IP地址实现https加密需求。 这种类型的证书特别适合于那些没有域名只有公网IP或者不方便使用域名的企业或个人。证书允许通过特定的IP地…

动手学深度学习16 Pytorch神经网络基础

动手学深度学习16 Pytorch神经网络基础 1. 模型构造2. 参数管理1. state_dict()2. normal_() zeros_()3. xavier初始化共享参数的好处 3. 自定义层4. 读写文件net.eval() 评估模式 QA 1. 模型构造 定义隐藏层–模型结构定义前向函数–模型结构的调用 import torch from torch…

电影院购票管理系统

文章目录 电影院购票管理系统一、项目演示二、项目介绍三、部分功能截图四、部分代码展示五、底部获取项目源码&#xff08;9.9&#xffe5;带走&#xff09; 电影院购票管理系统 一、项目演示 电影院售票管理系统 二、项目介绍 基于springbootvue的前后端分离电影院购票管理…

1.分布式-理论

目录 一、什么是分布式系统 二、CAP理论 1.一致性Consisency 2.可用性(Availability) 3.分区容错性(Partition tolrance) 三、BASE理论 1.Basically Available(基本可用) 2.Soft state&#xff08;软状态&#xff09; 3.Eventually consistent&#xff08;最终一致性&a…

天机学堂—学习辅助功能(含场景问答和作业)

我的课表 需求分析 原型图 管理后台 用户端 流程图 数据设计 接口设计 支付成功报名课程后, 加入到我的课表(MQ)分页查询我的课表查询我正在学习的课程根据id查询指定课程的学习状态删除课表中的某课程 代码实现 数据表设计 添加课程到课表&#xff08;非标准接口&#x…

ApiHug Official Website

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | MarketplaceApiHug-H…

OpenHarmony 实战开发——分布式硬件管理详解

前言 分布式硬件是 OpenHarmony 提供的一个分布式能力&#xff0c;能将多种设备组成一个“超级终端”&#xff0c;使用户根据现实需要和硬件能力&#xff0c;选择合适的硬件提供服务&#xff0c;灵活运用硬件进行资源分配和按需组合&#xff0c;充分发挥各类硬件设备的能力&am…

Jenkins android 自动打包安卓 centos8.5 运维系列五

1 新建项目android #cat android.sh #!/bin/bash rm -rf /data/.jenkins/workspace/android/app/build/outputs/apk/debug/* rm -rf /data/.jenkins/workspace/android/app/build/outputs/apk/release/* cd /data/.jenkins/workspace/android/app source /etc/profile g…

WEB前端复习——CSS

CSS:层叠样式表 将显示样式与内容分开 基本语法&#xff1a; 选择器{ 规则; } ①标签选择器&#xff1a;以HTML标签名为选择 <style>p{color: red;} </style> <body><p>你好</p> </body> ②id选择器&#xff1a;一次性的 以#号定义 &l…

在做题中学习(57):寻找数组的中心下标

724. 寻找数组的中心下标 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;前缀和后缀和 思路&#xff1a;要看一个数是不是中心下标&#xff0c;就看他前面数的和 与 后面数的和 相不相等。 1.i前面数的和&#xff0c;是[0,i-1] 的前缀和&#xff0c;i后面数的和&am…

音视频入门基础:像素格式专题(2)——不通过第三方库将RGB24格式视频转换为BMP格式图片

音视频入门基础&#xff1a;像素格式专题系列文章&#xff1a; 音视频入门基础&#xff1a;像素格式专题&#xff08;1&#xff09;——RGB简介 音视频入门基础&#xff1a;像素格式专题&#xff08;2&#xff09;——不通过第三方库将RGB24格式视频转换为BMP格式图片 一、引…

STM32-07-STM32_外部中断

文章目录 STM32 中断系统1. 中断2. NVIC3. EXTI4. AFIO5. 中断配置步骤6. 外部中断代码 STM32 中断系统 1. 中断 目的&#xff1a;中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。中断过程&#xff1a;当CPU正在处理某事件的时候外界发生了紧急事件请求 &#…