有时在我的一些字节中消失。为什么?

2024-10-02 22:37:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着写我自己的功绩。想法很简单-重写返回地址到操作码为“jmp esp”的位置。在esp中是我的外壳代码的地址。在

所以我有一个简单的程序:

#include <stdio.h>
#include <string.h> 

void do_something(char *Buffer)
{
    char MyVar[100];
    strcpy(MyVar,Buffer);
}

int main (int argc, char **argv)
{
    do_something(argv[1]);
    return 0;
}

我的漏洞是用python编写的。代码:(我认为我的外壳代码不起作用,但现在不重要了)

^{pr2}$

如果我为0x41414141设置了'jmp esp'操作码地址:(AAAA) 一切正常(当然0x41414141不是好地址,但我可以看到内存已被覆盖)

{1美元^

我的问题是如果我把正确的地址。我找到了0x7769E24D,所以我使用了这个值,然后在ollydbg中看到了:

ollydbg output2

这就是我的问题:为什么记忆看起来不同?看起来有一行被删除了。但为什么呢?有趣的是,如果我只改变一个字节(0x770x41),内存就会被正确的值覆盖。在

ollydbg output3

第二个问题是我的一些字节被转换成不同的值——例如0x8b到{}。在

有人能告诉我为什么会这样吗?也许这是一种保护?是我的操作系统有问题吗?我使用Windows 8.1 x64。在


Tags: 内存代码字节include地址buffer外壳do