我试着写我自己的功绩。想法很简单-重写返回地址到操作码为“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中看到了:
这就是我的问题:为什么记忆看起来不同?看起来有一行被删除了。但为什么呢?有趣的是,如果我只改变一个字节(0x77
到0x41
),内存就会被正确的值覆盖。在
第二个问题是我的一些字节被转换成不同的值——例如0x8b
到{
有人能告诉我为什么会这样吗?也许这是一种保护?是我的操作系统有问题吗?我使用Windows 8.1 x64。在
目前没有回答
相关问题 更多 >
编程相关推荐