ShellCode详解一

首先,感谢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.hqwc.cn/news/688231.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos7下安装配置nginx

1、下载nginx安装包 wget http://nginx.org/download/nginx-1.8.0.tar.gz 2、安装nginx所需依赖 yum -y install pcre pcre-devel yum -y install zlib zlib-devel yum -y install openssl openssl-devel 3、进入到nginx安装包目录下,解压tar.gz包 cd /home/soft t…

物联网概述定义体系架构、与云计算关系

物联网概述 物联网综述 所谓物联网是指把所有物品通过射频识别等信息传感设备与互联网连接起来,从而实现智能化识别和管理,是继计算机、互联网和移动通信之后的又一次信息产业的革命性发展。 以信息感知为特征的物联网被称为世界信息产业的第三次浪潮…

Python 全栈系列243 S2S flask_celery

说明 按现有的几个架构部件,构建数据流。 S Redis Stream。这个可以作为缓冲队列和简单任务队列,速度非常快,至少是万条/秒的速度。 Q RabbitMQ。这个作为任务队列,消息也主要是元数据。读速比较慢,但有一些特性&a…

如何获得临时谷歌邮箱?

什么是临时谷歌邮箱? 临时谷歌邮箱,也称为一次性谷歌邮箱或匿名谷歌邮箱,可以用来作为你的个人临时谷歌邮箱账户,而不需要亲自注册谷歌账户就可以使用。这些邮箱在一定时间后自动销毁,期间无需用户进行任何操作。它们…

使用 Express 框架构建的 Node.js web 应用程序

使用 Express 框架构建的 Node.js web 应用程序 ├── config │ └── config.js ├── middlewares │ └── errorHandler.js ├── routes │ ├── index.js │ ├── postRoutes.js │ └── userRoutes.js ├── .env ├── .gitignore ├── app.js ├…

c++ 获取机器码

看到网上代码代码都没什么好的&#xff0c;自己备用一个 #include <iostream> #include <string> #include <sstream> #include <iomanip> #include <Windows.h> #include <iphlpapi.h> // 包含这个头文件以获取 PIP_ADAPTER_INFO #inclu…

java项目之相亲网站的设计与实现源码(springboot+mysql+vue)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的相亲网站的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 相亲网站的设计与实…

计算机毕业设计 | vue+springboot调查问卷管理系统(附源码)

1&#xff0c;研究目的 在进入21世纪以后&#xff0c;互联网得到了蓬勃的发展&#xff0c;电子问卷调查也开始逐渐流行起来。传统纸质问卷和电子问卷相比较后&#xff0c;传统问卷还存在很多弊端&#xff1a; 问卷分发起来比较困难&#xff0c;并且分发试卷耗费大量的金钱和时…

【区块链】智能合约简介

智能合约起源 智能合约这个术语至少可以追溯到1995年&#xff0c;是由多产的跨领域法律学者尼克萨博&#xff08;NickSzabo&#xff09;提出来的。他在发表在自己的网站的几篇文章中提到了智能合约的理念。他的定义如下&#xff1a;“一个智能合约是一套以数字形式定义的承诺&a…

三国杀背后的图形化编程 变量跟踪与吐槽的故事

在周末的公司里&#xff0c;卧龙凤雏等几位员工终于结束了加班任务&#xff0c;他们每个人都显现出些许疲惫之态&#xff0c;但心情还算较为轻松愉悦。突然&#xff0c;有人提议玩上几局三国杀&#xff0c;以此来让大家放松一下身心。于是乎&#xff0c;几人纷纷掏出手机&#…

AcwingWeb应用课学习笔记

VSCode自动格式化 选中Format On Save不起作用 在设置中搜索default formatter&#xff0c;修改成Prettier-Code formatter meta标签 HTML 元素表示那些不能由其它 HTML 元相关&#xff08;meta-related&#xff09;元素&#xff08;(、,

【计算机网络】因特网概述

&#x1f6a9;本文已收录至专栏&#xff1a;计算机网络学习之旅 一.发展的三个阶段 二.ISP介绍 因特网服务提供者&#xff08;Internet Service Provider&#xff09;&#xff0c;简称ISP&#xff0c;普通用户是通过 ISP 接入到因特网的&#xff0c;ISP 可以从因特网管理机构…