首页
社区
课程
招聘
[求助]书中3.2节search_opcode.cpp,找esp代码始终报错
2014-12-10 23:36 13163

[求助]书中3.2节search_opcode.cpp,找esp代码始终报错

2014-12-10 23:36
13163
运行这段代码在电脑中始终会报错。 搜到的结果 说产生了越界,但是不确定这个原因。
报错的内容如下:

”chapter3_VS_shellcode.exe 中的 0x00af1442 处有未经处理的异常: 0xC0000005: 读取位置 0x76251000 时发生访问冲突“

另外找到的参考:http://blog.sina.com.cn/s/blog_4a082449010115wq.html
但是这个理由貌似解释不通。

附上源代码:

#include <windows.h>
#include <stdio.h>
#define DLL_NAME "user32.dll"
main()
{
	BYTE* ptr;
	int position,address;
	HINSTANCE handle;
	BOOL done_flag = FALSE;

	handle=LoadLibrary(DLL_NAME);

	if(!handle)
	{
		printf(" load dll erro !");
		exit(0);
	}

	ptr = (BYTE*)handle;
	
	for(position = 0; !done_flag; position++)
	{
		try
		{
			if(ptr[position] == 0xFF && ptr[position+1] == 0xE4)
			{
				//0xFFE4 is the opcode of jmp esp
				int address = (int)ptr + position;
				printf("OPCODE found at 0x%x\n",address);
			}
		}
		catch(...)
		{
			int address = (int)ptr + position;
			printf("END OF 0x%x\n", address);
			done_flag = true;
		}
	}
}


我发现这个问题之前就有了。但是始终没有发现有解决。

http://bbs.pediy.com/showthread.php?t=63496&page=3

#32 和#42都有提到。

还望大家不吝赐教~ 万分感谢!

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (3)
雪    币: 261
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuchengton 2014-12-11 12:02
2
0
默认设置C++异常是不捕获CPU异常的
用__try,__except吧
雪    币: 5920
活跃值: (1656)
能力值: ( LV7,RANK:150 )
在线值:
发帖
回帖
粉丝
二当家a 2 2014-12-11 17:40
3
0
非常感谢你的解答。
在VS中改正之后,确实可以捕获到异常了。但是却无法搜索到jmp esp指令。
确切的说,在搜索了 0x1000个字节之后,就停止搜索了。 这是为什么呢?
之后的内存都是受到保护了么?
那么这段代码岂不是始终无效的。  因为我用OD插件找到的 jmp esp 指令的位置在好后面。
其他的kernel32.dll 也是一样的。

搜索的区间:
start at 0x76ef0000
END of 0x76ef1000

用插件找到的位置:
JMP ESP at 0x76f8ae4f     Module:  C:\Windows\syswow64\USER32.dll

非常感谢!
雪    币: 261
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuchengton 2014-12-11 22:47
4
0
我没试过大范围的搜索,说一下个人的想法
先现获得dll在内存中的image大小,遍历到结尾,不需要遇到异常就跳出循环
游客
登录 | 注册 方可回帖
返回