您现在的位置是:主页 > news > 哪些做直播卖食品的网站/工程建设数字化管理平台

哪些做直播卖食品的网站/工程建设数字化管理平台

admin2025/6/3 20:35:04news

简介哪些做直播卖食品的网站,工程建设数字化管理平台,浙江网站建设的要求,哪个网站音乐做的最好的看聊天记录,前几天自己写了一篇关于strcpy()函数溢出的文章,自己在网找了个例子实践然后写出来,当时的感觉是自己能够理解,但是写出来的逻辑却是乱七八糟。今天再往下看聊天记录发现后面老师竟然给出了例子,把例子运行…

哪些做直播卖食品的网站,工程建设数字化管理平台,浙江网站建设的要求,哪个网站音乐做的最好的看聊天记录,前几天自己写了一篇关于strcpy()函数溢出的文章,自己在网找了个例子实践然后写出来,当时的感觉是自己能够理解,但是写出来的逻辑却是乱七八糟。今天再往下看聊天记录发现后面老师竟然给出了例子,把例子运行…


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

1、代码示例:

// test0221.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include "string.h"<div class="blockcode"><blockquote>char *shellcode="\x64\x65\x66\x67\x68\x69\x70\x71\x05\x10\x40\x00";
//char *shellcode="abcd"; //不断地尝试abc...可以用来测试定位,哈哈,不过这个是一种笨方法啦void fun1(int a, int b)
{
printf("fun1 run!para a=%d,b=%d\n",a,b);
}
void fun2(int a)
{printf("fun2 run! para a=%d\n",a);
}
void fun3(int a,int b,int c)
{printf("fun3 run! para a=%d,b=%d,c=%d\n",a,b,c);
}
//主函数
int main(int argc, char* argv[])
{printf("begin\n");char a[4]={0};strcpy(a,shellcode);fun1(2,3);fun2(4);fun3(4,5,6);return 0;
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==uploading.4e448015.gif转存失败重新上传取消wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==



2、反汇编查看
注意观察的点:ebp的值,在每个main函数都会程序中做一系列保护栈的操作,尤其是在函数结束后(及花括号之后),开始平衡堆栈。让寄存器恢复执行前的状态。代码如下:

  1. 004011A1   cmp         ebp,esp    //比较ebp与esp的值
  2. 004011A3   call        __chkesp (00401250)  //检查堆栈函数
  3. 004011A8   mov         esp,ebp   //在程序正常平衡堆栈执行结束后,ebp是main()开始保护堆栈的值(即最开始mov ebp, esp的值)。
  4. 004011AA   pop         ebp         //
  5. 004011AB   ret   //相当于pop  eip
复制代码



(1)、代码溢出原理:
通过strcpy()进行溢出,将我们需要跳转的地址溢出到如下位置。
225244g4zhj9hzopabbpvc.pnguploading.4e448015.gif转存失败重新上传取消225244g4zhj9hzopabbpvc.pnguploading.4e448015.gif正在上传…重新上传取消225244g4zhj9hzopabbpvc.pnguploading.4e448015.gif正在上传…重新上传取消 

(2)、原理复现
首先,我们看在main()函数最开始实施保护堆栈操作 push ebp之后,ESP = 0012FF80,此时ESP指向的堆栈中的内容为刚刚push进去的ebp,为 0012FFC0。由于我们shellcode的位置为ebp入栈的前面位置,即 0012FF84.

230327euqe14chqkjk91ru.pnguploading.4e448015.gif正在上传…重新上传取消 

接下来观察char a[4] = { 0 } 入栈的位置,刚好在上一步 ebp 入栈位置的后面,即 0012FF7C,因此当我们用strcpy( a, shellcode )函数构造shellcode溢出时,我们利用构造shellcode比 a 多8位即可实现指定位置跳转。(8位 = 0012FF84 - 0012FF7C = 无用的代码(4位)+指定地址(4位))
231534geed3lplynr78wak.pnguploading.4e448015.gif正在上传…重新上传取消 

在此,我们这里用的是构造好的shellcode。

  1. char *shellcode="\x64\x65\x66\x67\x68\x69\x70\x71\x05\x10\x40\x00";
复制代码

接下来观察strcpy()函数溢出情况,可以发现shellcode跳转地址刚好在我们指定好的位置(即最后ret 中pop eip的值)。
233219npsh91sdz2qdjiz5.pnguploading.4e448015.gif转存失败重新上传取消 

后面的内容就是函数结束后跳转到我们指定的地址啦。