SHELLCODE调用方法

UE4实用类PawnSensingComponent简介 PawnSensingComponent是涉及AI编程时候的常用类,实现了很多强大的功能,对于AI感知帮助很大。 主要功能有 1.AI的视觉,是一个锥形感知体。 2.AI的听觉,主要与距离和声音大小有关,与遮挡物也有关。首先介绍一下AI的视觉方面吧,PawnSensingComponent的初始化很简单,在类内声明一个PawnSensingComponent字段,之后this->sensing 阅读详情
EDITER:asm_c
给菜鸟看的,高手和爱说闲话的别看_:)

  一直以来,都在看别人写的SHELLCODE,大概的程序我举例如下;
char sc[]=
"/x99/x52/x58/x52/xbf/xb7/x97/x39/x34/x01/xff/x57/xbf/x97/x17/xb1"
"/x34/x01/xff/x47/x57/x89/xe3/x52/x53/x89/xe1/xb0/x63/x2c/x58/x81"
"/xef/x62/xae/x61/x69/x57/xff/xd4";

int main()
{
    int (*f)() = (int (*)())sc;
    f();
}
声明不是我写的,我也写不出这样的东西来,这个是一个俄国安全人员写的40字节的SHELLCODE,我要说的是这里:
int (*f)() = (int (*)())sc;我当初看它,怎么也看不懂,其实很简单的:
摘抄:
函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢?

  如果我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。

  定义一个指向函数的指针用如下的形式,以上面的test()为例:

int (*fp)(int a);//这里就定义了一个指向函数的指针

  函数指针不能绝对不能指向不同类型,或者是带不同形参的函数,在定义函数指针的时候我们很容易犯如下的错误。

int *fp(int a);//这里是错误的,因为按照结合性和优先级来看就是先和()结合,然后变成了一个返回整形指针的函数了,而不是函数指针,这一点尤其需要注意!

  下面我们来看一个具体的例子:

#include <iostream>  
#include <string>  
using namespace std;  
  
int test(int a);  
  
void main(int argc,char* argv[])    
{  
    cout<<test<<endl;//显示函数地址  
    int (*fp)(int a);  
    fp=test;//将函数test的地址赋给函数学指针fp  
    cout<<fp(5)<<"|"<<(*fp)(10)<<endl;  
//上面的输出fp(5),这是标准c++的写法,(*fp)(10)这是兼容c语言的标准写法,两种同意,但注意区分,避免写的程序产生移植性问题!  
    cin.get();  
}  
  
int test(int a)  
{  
    return a;  
}
  typedef定义可以简化函数指针的定义,在定义一个的时候感觉不出来,但定义多了就知道方便了,上面的代码改写成如下的形式:

#include <iostream>  
#include <string>  
using namespace std;  
  
int test(int a);  
  
void main(int argc,char* argv[])    
{  
    cout<<test<<endl;  
    typedef int (*fp)(int a);//注意,这里不是生命函数指针,而是定义一个函数指针的类型,这个类型是自己定义的,类型名为fp  
    fp fpi;//这里利用自己定义的类型名fp定义了一个fpi的函数指针!  
    fpi=test;  
    cout<<fpi(5)<<"|"<<(*fpi)(10)<<endl;  
    cin.get();  
}  
  
int test(int a)  
{  
    return a;  
}
函数指针同样是可以作为参数传递给函数的,下面我们看个例子,仔细阅读你将会发现它的用处,稍加推理可以很方便我们进行一些复杂的编程工作。

//-------------------该例以上一个例子作为基础稍加了修改-----------------------------  
#include <iostream>    
#include <string>    
using namespace std;    
    
int test(int);    
  
int test2(int (*ra)(int),int);  
  
void main(int argc,char* argv[])      
{    
    cout<<test<<endl;  
    typedef int (*fp)(int);    
    fp fpi;  
    fpi=test;//fpi赋予test 函数的内存地址  
  
    cout<<test2(fpi,1)<<endl;//这里调用test2函数的时候,这里把fpi所存储的函数地址(test的函数地址)传递了给test2的第一个形参  
    cin.get();  
}    
    
int test(int a)  
{    
    return a-1;  
}  
  
int test2(int (*ra)(int),int b)//这里定义了一个名字为ra的函数指针  
{  
    int c=ra(10)+b;//在调用之后,ra已经指向fpi所指向的函数地址即test函数  
    return c;  
}
  利用函数指针,我们可以构成指针数组,更明确点的说法是构成指向函数的指针数组,这么说可能就容易理解的多了。

#include <iostream>    
#include <string>    
using namespace std;  
  
void t1(){cout<<"test1";}  
void t2(){cout<<"test2";}  
void t3(){cout<<"test3";}  
void main(int argc,char* argv[])      
{  
    void* a[]={t1,t2,t3};  
    cout<<"比较t1()的内存地址和数组a[0]所存储的地址是否一致"<<t1<<"|"<<a[0]<<endl;  
  
    cout<<a[0]();//错误!指针数组是不能利用数组下标操作调用函数的  
  
    typedef void (*fp)();//自定义一个函数指针类型  
    fp b[]={t1,t2,t3}; //利用自定义类型fp把b[]定义趁一个指向函数的指针数组  
    b[0]();//现在利用指向函数的指针数组进行下标操作就可以进行函数的间接调用了;  
    cin.get();  
}
  仔细看上面的例子可能不用我多说大家也会知道是怎么一会事情了,最后我们做一个重点小结,只要记住这一点,对于理解利用函数指针构成数组进行函数间接调用就很容易了!

void* a[]={t1,t2,t3};
cout<<"比较t1()的内存地址和数组a[0]所存储的地址是否一致"<<t1<<"|"<<a[0]<<endl;

cout<<a[0]();//错误!指针数组是不能利用数组下标操作调用函数的
  上面的这一小段中的错误行,为什么不能这么调用呢?

  前一篇教程我们已经说的很清楚了,不过在这里我们还是复习一下概念,指针数组元素所保存的只是一个内存地址,既然只是个内存地址就不可能进行a[0]()这样地址带括号的操作,而函数指针不同它是一个例外,函数指针只所以这么叫它就是因为它是指向函数指向内存的代码区的指针,它被系统授予允许与()括号操作的权利,进行间接的函数调用,既然函数指针允许这么操作,那么被定义成函数指针的数组就一定是可以一样的操作.
     看到这里菜鸟朋友是不是明白了许多,以后可以自己测试SHELLCODE了...
五种实战免杀Shellcode生成方法:从MSF编码到直接系统调用 在网络安全攻防领域,恶意代码检测与规避是核心对抗场景。杀毒软件和EDR系统通过静态特征码、启发式行为分析和内存扫描等多层防线识别威胁。为绕过检测,安全研究人员需深入理解系统调用、进程内存管理等底层原理。通过编码混淆、自定义加密等技术可对抗静态扫描,而分离加载、进程注入等策略则能规避行为分析。直接系统调用技术通过绕过用户态钩子,直接与内核交互,实现更高阶的隐蔽性。这些技术对于红队渗透测试和防御策略研究具有重要价值,能有效提升载荷在对抗环境中的生存能力。本文以Metasploit和Cobalt Strike为例 阅读详情

相关推荐

以jmp esp 为跳板的shellcode开发

0x00 Shellcode概述 Shellcode与exploit 1) shellcode:缓冲区攻击中植入进程的代码。进行删改文件、窃取数据、上传木马并运行、格式话硬盘等。用汇编语言编写,并转换成二进制机器码,内容和长度受到苛刻限制。 2) exploit: 漏洞利用程序,用于生成攻击性的网络数据包或其他形式的攻击性输入。exploit的核心是淹没返回地址,劫持进程控制权,跳去执行shel

## 1万+

UE4 简单AI

UE4中Pawn是马甲,Controller是驱动马甲的大脑。 Controller和Pawn相对独立,不一定谁必须有谁。一个Controller至多能控制一个Pawn,一个Pawn至多能被一个Controller控制。

qq_37195273的博客 1904

【网络安全】红蓝攻防:shellcode的分析

在做红蓝攻防时,常常要用到cs、msf等工具,使用工具生成shellcode或可执行程序,那么小小的shellcode为何能做这么多事情,拿到shellcode后又该怎么分析。希望这篇文章能给大家带来答案,文章中不正确的地方请及时指出。

HBohan的博客 4370

AUV路径跟踪视线法(Line Of Sight)制导原理

针对路径跟踪问题,为调整 AUV 趋向且收敛至期望路径,本文对视线角(Line Of Sight)导航的方法原理进行介绍。就水平面视线法原理进行具体介绍,垂直面上与之类似。

dooglocool的博客 9595

每日一个小病毒(C++)EnumChildWindows+shellcode

技术说明利用回调机制执行内存中的 Shellcode优点比直接调用 Shellcode 更隐蔽检测方法监控异常回调地址、可执行内存分配防御措施CFG、ACG、EDR 行为监控这种技术常用于 恶意软件、C2 植入、进程注入,安全研究人员和红队人员需要了解其原理,以便检测和防御。

啊渊的专栏 1903

顺序功能图基本结构

顺序功能图(Sequential Function Chart,SFC)是一种用于描述工业控制系统中顺序控制流程的图形化编程语言,广泛应用于PLC(可编程逻辑控制器)编程。其核心思想是将复杂的控制流程分解为多个有序的步骤,通过逻辑条件实现步骤间的切换。顺序功能图通过图形化的方式简化了复杂控制逻辑的设计,尤其适用于需要严格顺序控制的工业自动化场景。[初始步] → 转换条件1 → [步1] → 转换条件2 → [步2] → ...[步X] → → [步B] → 转换条件B → → [合并步]

ayingqin1的博客 1227

ShellCode的几种调用方法

ShellCode是一种漏洞代码,中文名也叫填充数据,一般是用C语言或者汇编编写。在研究的过程中,自己也学到了一些东西,发现其中也有许多坑,所以贴出来,如果大家有碰到的,可以参考一下。 以启动电脑上的计算器为例,编写ShellCode其实就是两部分,一是获取ShellCode字节码,二是调用它。 获取方式一般是观察代码反汇编和内存相结合: VOID Test() { H...

weixin_30326515的博客 500

Unity采样器过多导致URP默认的Lit.Shader报错(shader error in ‘universal render pipeline/lit’: maximum ps_4_0 samp)

Shader中多个Sample Texture2D,Sample Texture3D或者类似节点的使用,该类节点都需要一个采样器,如果Shader使用超过了16个纹理采样器,如多个Base Color,Normal Map等,就容易超出。是因为每种Shader Model和GPU都有一个对纹理采样器数量的限制,是因为每个采样器都需要在显卡占用一个独立的寄存器,而寄存器的数量是有限的,当超过限制,显卡无法分配更多的寄存器给新的采样器,因此会导致编译错误。2.什么原因导致纹理采样器超出16个?

qq_41884036的博客 4235

C/C++ 通用ShellCode的编写与调用

首先,我们的ShellCode代码需要自定位,因为我们的代码并不是一个完整的EXE可执行程序,他没有导入表无法定位到当前系统中每个函数的虚拟地址,所以我们直接获取到Kernel32.dll的基地址,里面的GetProcAddr这个函数,获取的方式有很多,第一种是暴力搜索,第二种通过遍历进程的TEB结构来实现,我们使用第二种方式尝试,一旦获取到该函数,就可以动态的调用任何想要的函数了。

微软技术分享 1万+

SRRC型号核准的模块豁免规则解析——如何利用完整型模块简化设备认证流程

本文详细解析了SRRC型号核准中模块豁免规则的应用,重点介绍了完整型模块的技术定义、豁免条件及实际应用场景。通过合理利用完整型模块,企业可显著简化设备认证流程,缩短上市周期并降低成本。文章还提供了模块选型指南和常见问题解决方案,帮助工程师高效应对SRRC认证挑战。

weixin_29306011的博客 934

GD32F470实战:如何用EXMC+SDRAM搞定LVGL大内存需求(附完整代码)

本文详细介绍了如何在GD32F470微控制器上通过EXMC接口驱动外部SDRAM,以满足LVGL图形库的大内存需求。内容涵盖硬件连接、EXMC时序配置、轻量级内存管理器实现,以及将LVGL帧缓冲和资源无缝集成到SDRAM的实战方法,并提供了完整的代码示例和调试技巧,帮助开发者构建稳定可靠的嵌入式GUI系统。

k9l0m1的博客 443

XSS漏洞利用的构造方法,变形方式,Shellcode的调用

XSS的四种构造方法 1.利用 <> 构造HTML/JS 可以利用 <> 构造 HTML 标签和 <script> 标签 在测试页面提交参数 <h1 style='color:red'>利用 <> 构造 HTML/JS </h1> 提交 <script> alert(/xss/) </script> 2.伪协议 可以使用 jacasc...

weixin_47306547的博客 2530

基于FPGA的心电信号实时处理与智能诊断系统实现【附源码解析】

本文详细介绍了基于FPGA的心电信号实时处理与智能诊断系统的设计与实现。系统通过高精度采集电路和FPGA数字滤波技术处理微弱心电信号,采用自适应算法准确检测QRS波群,实现心率计算和心律异常诊断。附源码解析展示了FIR滤波器、中值滤波器和诊断逻辑的Verilog实现,为心电监护系统开发提供实用参考。

g8f9d0s1a2的博客 771

c语言调用linux脚本,C语言执行shellcode的五种方法

//C语言执行shellcode的五种方法#include #include //data段可读写#pragma comment(linker, "/section:.data,RWE")//不显示窗口#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")#pragma comment(linker, "...

weixin_39607620的博客 348

Qt:一个强大而灵活的跨平台应用程序开发框架

代码示例中的源代码是简单的示例,用于演示Qt框架的一些基本特性。实际应用中,开发人员可以根据自己的需求和项目要求,使用Qt框架提供的丰富功能和组件进行开发。在Qt的官方文档和示例代码中,您可以找到更多详细的教程和示例,以帮助您更好地理解和使用Qt框架。它提供了丰富的工具和功能,支持跨多个平台进行开发,并具有高度的可定制性和灵活性。它提供了丰富的工具和功能,使得开发人员能够创建高性能、可扩展和易于维护的应用程序。下面将详细介绍Qt框架的优点,并提供一些相关的源代码示例。

CodeVorter的博客 868

IEC 104电力规约详细解读(五) - 遥控

主站下发遥控选择命令,子站进行遥控选择返校,若成功则回答遥控选择成功报文,若失败则回答失败报文。主站下发取消遥控命令或者遥控执行命令行。子站皆以报文的镜像确认。遥控命令用来实现对一个可操作设备状态的改变。在配电自动化中,包括单点命令和双点命令。通常,单点命令用于控制单点信息对象;双点命令用于控制双点信息对象。

张二狗的博客 7353

C调用shellcode方法总结

1、shellcode 定义: shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名。shellcode常常使用机器语言编写。 可在暂存器eip溢出后,塞入一段可让CPU执行的shellcode机器码,让电脑可以执行攻击者的任意指令。 2、可以将dll转成shellcode的c源码(https://blog.csdn...

司徒荆的博客 3576

Tiktok/抖音旋转验证码

主要记录一下旋转验证码的逆向思路

记录一些web逆向的过程 5978

【XSS漏洞04】XSS漏洞对shellcode的调用方法

1. shellcode可以存储在远程文件、URL、HTTP头、其他网页中; 2. 通过多种方式利用XSS漏铜触发shellcode执行; 3. 利用XSS下载器与http头信息的方法还需要加强。

Fighting_hawk的博客 3298

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

xss的shellcode调用

sshellcode 首先,我们来认识一下shellcode,所谓的shellcode就是指利用一个漏洞的时候所执行的脚本,在xss跨站脚本中,是指由Javascript等脚本编写的xss利用代码。 一、动态远程调用JavaScript 假设某个页面中由xss漏洞,所以我们可以把JavaScript代码放到目标网站的参数中。,但是这种方式有一个缺点,那就是容易被用户发现。所以为了方便起见,我们可以...

weixin_43803070的博客 432

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

linux编写shellcode

1、shellcode需要用到系统调用的调用号,可以通过unistd.h查看,具体某个系统调用的用法可以通过man syscall来查看 2、在现在的指令集中引入了syscall指令,但是原来的int 0x80调用正常可以使用。int 0x80调用将系统调用号放在eax, 参数依次放在ebx, ecx, edx, esi, edi;超过5个的将参数放在内存中,并将内存地址放在ebx寄存器中。 (

duangduang2020的博客 1229

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SeedLab——Shellcode Development Lab

通常情况下,为了将这个字符串推入堆栈,我们需要使字符串的长度为 4 的倍数,所以我们会将字符串转换为 /bin////bash。然而,对于此任务,我们不能向字符串中添加任何多余的 /,也就是说,命令的长度必须是 9 个字节(/bin/bash)。将args的地址加载到ecx寄存器,envs的地址加载到edx寄存器,path的地址已经存在ebx寄存器中了。ebx寄存器为传递的参数一即path的地址,ecx寄存器为传递的参数二即args的地址,edx寄存器为传递的参数三即envs的地址。然后传递envs参数。

Aft3rGl0w的博客 2296

ShellWasp 2.0:革命性的系统调用Shellcode生成工具

ShellWasp 2.0:革命性的系统调用Shellcode生成工具 项目介绍 ShellWasp 2.0 是一款革命性的工具,旨在简化利用系统调用(syscalls)创建Shellcode的过程。该工具于2022年8月12日在DEF CON 30上首次发布,并在2023年4月19日推出了重大更新的2.0版本。ShellWasp 2.0不仅在技术上进行了大幅改进,还引入了多种新颖的系统调用调用方...

gitblog_00205的博客 463

网络攻防技术—shellcode编写实验

shellcode广泛用于许多涉及代码注入的攻击中。编写shellcode是相当有挑战性的。虽然我们可以很容易地从互联网上找到现有的shellcode,但是能够从头开始编写我们自己的shellcode总是令人兴奋的。shellcode中涉及到几种有趣的技术。本实验的目的是帮助学生理解这些技术,以便他们能够编写自己的shellcode。编写shellcode有几个挑战,一个是确保二进制文件中没有0x00,另一个是找出命令中使用的数据的地址。第一个挑战不是很难解决,有几种方法可以解决它。

wion03的博客 2251

ret2shellcode

简单介绍常见的ret2shellcode

m0_62280492的博客 1461

shellcode技术探讨续一

shellcode技术探讨续一发布日期: 2000-1-25 内容:-------------------------------------------------------------------------------- 来源:概述:    本文旨在验证前文几个问题所在,当时我在一旁加了注解,    可能有朋友觉得理解有点问题,看了这篇就没问题了。    还有就是针对以前有人问过的,如何得

修养生息,以得佳境 1612
上一篇: gloomy的介绍int 2e的文章
下一篇: MGF病毒最新版本的源代码(V1.30)
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值