strcpy构造二进制字符串小问题

c++程序调用shell脚本,并向shell传入参数,shell脚本利用ffmpeg批量切割视频文件 任务:在linux平台下多次调用ffmpeg来切割多个视频 思考与难点:既然需要多次调用命令行命令ffmpeg,自然而然想到需要写一个shell脚本在c++程序中调用这个脚本就行了,但是问题并没有这么简单。c++程序中如何调用shell脚本?该怎么向shell脚本传入参数呢?shell脚本又是怎样来接受参数的 1、c++程序中如何调用shell脚本? c++程序中调用shell脚本的三种方式 ... 阅读详情

在缓冲区溢出攻击程序设计中,用Strcpy()构造攻击字符串是很常见的,这两天在做一个小例子的调试过程中,没想到还出了点问题。
以前调试溢出程序时,拿的都是网上的攻击代码,很多时候只要将跳转地址处理好就行,一直没注意这样的小问题,现在认真看了下后,把它给弄明白了。

例子:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

// jmp esp address
#define jmpesp "/x12/x45/xfa/x7f"  

//jmp to shellcode
#define jmpcode "/xEB/xEE"

char shellcode[] ="/x90/x90/x90/x90/x90/x90/x90/x90";

void overflow()
{ 
 char name[8];
 char Buff[20];
 memset(Buff, 0x90, sizeof(Buff)-1);

 strcpy(Buff, shellcode);
     strcpy(Buff+12, jmpesp);   
 strcpy(Buff+16,jmpcode);
 strcpy(name,Buff);
 return;
}

void main()
{
 printf("begin overflow!!");
 overflow();
 printf("ok,end!!");
 return;
}

关于上面这个溢出小例子的原意是这样的:
在overflow()中首先为name分配了八字节的空间,先将Buff空间全设置为0x90,然后用来保存超常字符串,当执行strcpy(name,Buff)时导致溢出发生,用jmp esp地址覆盖返回地址,然后执行jmpcode指令,再次跳转至shellcode处执行相应代码。从设计思路以及具体实现上来看,这个程序完全可以达到预期效果,但实际调试中,程序并没有按照预期设想执行,竟能够打印出“ok,end!!”字符串,这是怎么回事?

在跟踪调试的过程中,发现返回地址没有被覆盖,于是查看执行完strcpy(name,Buff)后name所指地址空间的内容,竟然是
"/x90/x90/x90/x90/x90/x90/x90/x90/x00",
竟然有个结束符,把字符串给截断了,只导致EBP被改写,而返回地址并没有改变,使得流程按正常情况执行。

跟踪strcpy执行流程发现,它以四字节在源串与目标串之间拷贝数据,之后对末尾部分处理,本例执行
strcpy(Buff, shellcode)时,
当拷贝完八字节后,比较源串数据后执行如下语句
mov byte ptr [edi],dl
此时edi指向Buff+8,dl值为/x00,因此在strcpy(name,Buff)时就将八字节的/x90和一字节的/x00写入Buff地址,只改写了EBP的一个字节,没有改写到返回地址。

如果如此定义:
char shellcode[] ="/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90";
那么拷贝时产生的末尾/x00字节,将被strcpy(Buff+12, jmpesp)语句拷贝的内容覆盖,成为一个完整的字符串,程序正常溢出,跳转。
ok!

C语言字符串函数安全剖析:从strcpy漏洞到缓冲区溢出防御 在C语言编程中,字符串处理是基础且频繁的操作,其底层实现依赖于以空字符'\0'结尾的字符数组。这一设计原理追求高效,但将边界检查责任完全交给了程序员,从而埋下了安全隐患。当程序缺乏对输入数据的有效验证时,就可能触发缓冲区溢出等内存安全漏洞,这类漏洞具有极高的技术价值,常被用于实现任意代码执行,危害系统安全。在应用场景上,无论是网络服务、系统软件还是嵌入式开发,只要涉及不可信数据的处理,都可能面临此类风险。本文聚焦于strcpy、strcmp、strlen等经典函数的漏洞机制,深入拆解其如何成为缓冲区溢出和逻 阅读详情

相关推荐

别再傻傻分不清了!C语言里strcpy、memcpy、strncpy、memmove到底怎么选?附避坑指南

本文深度解析C语言中strcpy、memcpy、strncpy和memmove四大内存复制函数的核心差异与适用场景,提供实战避坑指南。通过数据类型处理、长度控制机制和内存重叠处理等维度对比,帮助开发者正确选择函数,避免缓冲区溢出和终止符缺失等常见问题,提升代码安全性和性能。

weixin_30279315的博客 247

strcpy为何不安全

文章目录引言函数调用约定(32位)程序编译运行攻击的思路填充数据jum esp地址编写shellcode完整攻击代码攻击效果公众号 引言 在刚刚开始学校C语言的时候,很多人都用过strcpy这个函数。简单说是一个内存复制的函数。这个函数确实非常方便,但是这个函数是非常不安全,由与这个函数而产生的缓冲区溢出漏洞在很多文章中都有所介绍。我们应该摒弃strcpy的使用,而是用strncpy进行代替。 原型声明:char *strcpy(char* dest, const char *src); 头文件:#incl

helloworlddm的博客 8709

C语言字符串处理:10个核心函数原理与安全实践指南

在C语言编程中,字符串处理是基础且关键的技术环节。字符串本质是以空字符'\0'结尾的字符数组,这一设计决定了内存操作和边界管理的重要性。理解字符串的底层原理有助于编写健壮高效的代码,避免缓冲区溢出等常见漏洞。从技术价值看,掌握字符串处理函数能提升程序安全性和性能,是系统编程、嵌入式开发等领域的必备技能。应用场景涵盖用户输入处理、文件解析、网络通信等。本文聚焦strlen、strcpy、strcmp等核心函数,深入剖析其工作原理与安全实践,特别强调strncpy和snprintf等安全替代方案,帮助开发者规避

weixin_30887919的博客 460

Strcpy()函数缓冲区溢出之精确定位地址(二)

看聊天记录,前几天自己写了一篇关于strcpy()函数溢出的文章,自己在网找了个例子实践然后写出来,当时的感觉是自己能够理解,但是写出来的逻辑却是乱七八糟。今天再往下看聊天记录发现后面老师竟然给出了例子,把例子运行了一篇,哇,竟然好熟悉的味道啊!看着老师在后面做的相应的讲解,只能说有人引导的感觉真的很好! 哈哈,扯皮了,回归正题啦。 1、代码示例: // test0221.cpp : ...

Xor0ne 1698

C++之string字符串类再探究

  string是C++中处理字符串的类,是对C语言中字符串的数据和行为的包装。使字符串的处理,更简单易用。 string的初始化方式 例1: 运行结果: 附例1代码: //小问学编程 #include<iostream> #include<string> using namespace std; int main() { string s1="China"; cout<<s1<<endl; string s2; s2

小勇博客 525

ansys workbench 静力结构分析 高阶教程

ansys workbench 静力结构分析 高阶教程 目录ansys workbench 静力结构分析 高阶教程新建工程模型导入设置材料模型简化: 主要内容: 材料设置、模型简化、网格细化、约束分析、接触设置、求解设置、报错处理、结果分析 基础教程: ansys workbench 静力结构分析 基础操作流程(入门) ansys版本: 19.0(16.0及以上均可) 参考资料: 推荐教学视频《有限元分析 张晔》(超详细 ???? )、ansys workbench 超级学习手册(查阅用) 说明:一些基

weixin_43434624的博客 5万+

strcpy()函数溢出应用(三)之层层变形

今天写的是之前一直漏掉的一个strcpy()函数的例子,本来以为和我之前找到的那个是一样的,但是今天单步调试后发现还是差别很大,所以打算记录一下,内容原理比较简单,大佬请疯狂鄙视我吧。 今天主要对例子进行讲解,对于strcpy(0函数溢出的原理请参见上一篇文章 strcpy()函数。 1、前景回顾 首先一张图片简单回顾一下strcpy()函数的原理啦(请不是很熟悉的同学看上一篇文章): 2、层层...

Xor0ne 523

给跨代引用记一本账:Java GC 的分配路径、卡表写屏障与收集器版图快速回顾

本文把 Java GC 的零散名词串成一条推理链路:从 TLAB 指针碰撞分配、逃逸分析,到 Eden、Survivor 与晋升的四条路,重点拆解卡表与写屏障如何为老年代指向新生代的引用记账,及 Minor GC 如何只扫脏卡。基于 JDK 8 实测:分散写使 Young GC 停顿涨 10~15 倍,条件卡标记消除卡表伪共享,计数循环让 System.gc 等待 2.7 秒,Survivor 过小使晋升量增加约 400 倍。文末梳理 JDK 8 到 27 的收集器演进、选型路径与排查顺序。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 17万+

strcpy 一个二进程文件的字节会怎样?

展示一下二进制文件内部是什么: 本质上就是一个个字符。通过一定的文件格式,标准(我觉得就像一些程序)写入到文件中,我们可以通过系统软件去解读它(就像序列化和反序列化) 可执行文件ELF格式(至于ELF究竟是什么,去翻《程序员的自我修养》吧,书上极其详细,而我觉得我这部分看过来却只是一知半解) 图片:pdf 视频:mp4 int fd=open("a.txt",O_RDONLY); int fd2=open("b.txt",O_WRONLY|O_APPEND); read(fd,buf,BUFSIZ

adlatereturn的博客 291

卫朋:IPD流程落地——产品计划阶段拆解

IPD计划阶段拆解

产品线负责人 956

使用ggplot2包中的双Y轴功能在R语言中可视化时间序列数据,并在时序数据末尾添加数值标签是一种有效的数据展示方式

使用ggplot2包中的双Y轴功能在R语言中可视化时间序列数据,并在时序数据末尾添加数值标签是一种有效的数据展示方式。通过这种方式,我们可以同时展示两个变量的趋势,并在时序数据末尾添加数值标签,使得数据更加直观和易于理解。假设我们有一个包含两个变量的时间序列数据集,一个是时间变量,另一个是对应的数值变量。现在,我们可以使用ggplot2包来创建一个基本的时间序列图,其中包含两个数值变量。接下来,我们将添加一个双Y轴,并在时序数据末尾添加数值标签。函数在数值1的每个数据点上添加数值标签。

Orion_O的博客 269

CTF二进制漏洞实战:栈溢出与格式化字符串攻防解析

二进制漏洞是计算机安全领域的核心概念,指程序在底层运行时因逻辑缺陷导致的安全问题。其原理源于内存管理机制,如函数调用时栈帧的布局不当,可能被恶意数据覆盖关键控制信息。这类漏洞的技术价值在于揭示了软件安全的根本挑战,即信任边界与输入验证的缺失。在应用场景上,CTF竞赛提供了合法且系统的演练环境,参赛者通过分析、利用漏洞完成夺旗任务。本文聚焦栈溢出和格式化字符串两种经典漏洞,结合pwntools等工具链,详解从信息泄露到ROP链构建的完整利用过程,帮助读者掌握二进制安全的实战技能。

weixin_33701564的博客 437

102、栅极驱动芯片选型与设计

文章摘要 本文分享了栅极驱动芯片选型与设计的实战经验。通过一次因驱动芯片选型不当导致的炸管事故,作者总结了栅极驱动芯片选型的五个关键参数:峰值驱动电流、驱动电压范围、传播延迟匹配、欠压锁定和隔离等级。文章详细分析了自举电路设计中的常见陷阱,以及栅极电阻对开关特性的影响,并强调了PCB布局布线的重要性。最后,作者提供了七条实用建议,包括避免通用型驱动芯片、关注CMTI参数、使用插件电阻等。核心观点是:栅极驱动设计需要综合考虑参数匹配、电路布局和实际调试,示波器实测波形是验证设计的唯一标准。

2401_88858637的博客 44

C & C++ 关于 字符串 的复制函数

正确做法:使用。

island1314的博客 1438

【深度学习新浪潮】气候预测模型的研发进展一览(2025年版)

模型类型核心优势适用场景不足ARIMA(统计模型)简单高效、可解释性强短期单变量预测非线性、长时依赖建模差随机森林(机器学习)多特征融合、抗噪声中短期多因素预测空间相关性、时序趋势捕捉弱LSTM(深度学习)长时依赖建模、端到端中长期时序预测物理一致性差、数据需求量大物理知情AI物理规律约束、高可靠性极端天气、长期气候变化模型复杂、计算成本高。

专注:太空算力、AI infra、异构调度、大模型成本工程 528

CesiumJS【Basic】- #002 加载在线瓦片地图数据

cesiumjs 加载各类在线地图数据

AlanL的专栏 952

C++中字符串两种表示形式——C风格字符串和string类

std::string类简介

Star_ID的博客 1744

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Angr实例分析——strcpy_find

本博客由闲散白帽子胖胖鹏鹏胖胖鹏潜力所写,仅仅作为个人技术交流分享,不得用做商业用途。转载请注明出处,未经许可禁止将本博客内所有内容转载、商用。0x00 题目介绍      前面做了两个简单的例子,今天我们还是简单地例子(饭要一口一口的吃,步子要一步一步地走,步子太大,容易出bug。不爽你打我啊)。这次的例子是strcpy_find,代码链接:https://github.com/angr/ang...

zhuzhuzhu22的博客 884

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

栈溢出暗渡陈仓:BUUCTF ciscn_2019_ne_5的strcpy漏洞与sh字符串劫持实录

栈溢出暗渡陈仓:BUUCTF ciscn_2019_ne_5的strcpy漏洞与sh字符串劫持实录

2301_76794844的博客 1301

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

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

C语言字符串函数深度剖析:从strcpy到memmove的模拟实现与安全实践

在C语言编程中,字符串处理是基础且核心的操作,涉及内存管理、指针运算和程序安全等关键概念。字符串函数如strcpy、strlen等通过直接操作内存实现高效处理,其设计哲学体现了效率与风险的平衡。理解这些函数的底层原理,不仅能提升代码的健壮性,更是防范缓冲区溢出等安全漏洞的关键。通过模拟实现这些库函数,开发者可以深入掌握指针操作、边界检查及内存重叠处理等底层机制。本文聚焦于strcpy、strncpy、memcpy和memmove等核心函数,结合缓冲区溢出和内存重叠等高频问题,解析其实现细节、常见陷阱及安全编

weixin_29597551的博客 244

strcpy函数处理溢出的建议

C 中大多数缓冲区溢出问题可以直接追溯到标准 C 库。最有害的罪魁祸首是不进行自变量检查的、有问题的字符串操作(strcpy、strcat、sprintf 和 gets)。一般来讲,象“避免使用 strcpy()”和“永远不使用 gets()”这样严格的规则接近于这个要求。 今天,编写的程序仍然利用这些调用,因为从来没有人教开发人员避免使用它们。某些人从各处获得某个提示,但即使是优秀的开发人

xiezhongtian的专栏 8140

C语言字符串处理函数深度解析:从原理到实战避坑指南

字符串处理是编程中的基础操作,尤其在C语言这类系统级编程中,对内存和性能的控制至关重要。其核心原理在于通过字符数组和终止符'\0'来管理文本数据,这直接关系到程序的健壮性与安全性。理解字符串函数的底层行为,能有效避免缓冲区溢出、内存泄漏等常见问题,提升代码质量。在嵌入式开发、系统编程等场景中,高效的字符串操作是保障程序稳定运行的关键。本文聚焦于C语言标准库中的字符串处理函数,深入剖析strcpy、strncpy、strcat等常用但易错函数的实现细节与使用陷阱,并结合strtok、strerror等函数,提

weixin_33676492的博客 450

从CTF逆向题到实战能力:Linux二进制分析的活教材思维

二进制分析是网络安全与软件安全领域的核心技术,涉及对可执行文件的结构、指令和行为的深入理解。其核心原理在于通过静态与动态分析技术,解析程序的逻辑、算法和运行时状态,从而发现潜在漏洞、逆向工程算法或分析恶意代码。这项技术的价值在于构建可迁移的实战能力,广泛应用于恶意软件分析、漏洞挖掘、软件逆向工程和IoT设备安全等场景。在CTF竞赛中,逆向工程题目常作为浓缩的实战案例,其中反调试技术和ELF文件格式分析是常见的热点。通过将CTF逆向题视为活教材,安全研究者可以系统性地锻炼从基础算法还原到高级对抗的完整技能链,

weixin_34236869的博客 416

从pwn-authenticate入门栈溢出:二进制安全攻防实战解析

栈溢出是二进制安全领域的核心漏洞类型,其原理源于程序对内存边界检查的缺失。当函数使用不安全的字符串操作函数(如gets、strcpy)时,超出缓冲区的输入会覆盖相邻内存,从而可能篡改关键变量或劫持程序控制流。这项技术的工程价值在于,它揭示了软件底层内存管理缺陷与高级安全威胁之间的直接关联,是理解现代漏洞利用与防护体系的基础。在CTF竞赛与安全研究中,栈溢出常出现在身份验证、数据解析等场景,攻击者通过精心构造的输入绕过认证或执行任意代码。本文以经典的pwn-authenticate场景为例,结合pwntool

靓靓软件工作室 381

栈溢出漏洞利用入门:pwn1_sctf_2016实战分析

栈溢出是二进制安全领域的经典漏洞类型,其原理是通过越界写入覆盖函数返回地址,从而劫持程序控制流。在32位系统中,由于参数通过栈传递且缺乏现代防护机制(如ASLR),这类漏洞往往更容易利用。通过分析SCTF 2016的pwn1_sctf_2016题目,可以学习到如何结合GDB调试与ROP技术绕过NX保护。实战中需要掌握cyclic pattern计算偏移、PLT表定位系统函数、以及pwntools脚本编写等核心技能。这类基础题目不仅适合CTF入门训练,更能帮助开发者理解安全编程的重要性,避免在实际开发中使用s

weixin_34239592的博客 706
上一篇: 批处理文件给文件夹下文件批量改名
下一篇: LUEVELSMEYER的PE文件格式
Docoocoo
博客等级 码龄21年 3粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值