首页
社区
课程
招聘
[讨论]想实现一个OD插件,不知道如何下手
发表于: 2008-5-15 10:06 4805

[讨论]想实现一个OD插件,不知道如何下手

2008-5-15 10:06
4805
最近想写一个OD插件,用于实现下面的功能:
1)可以对动态地对代码段或者其他段“设置内存写入断点”和“移走内存断点”;
2)当某个指令对内存不可写的段所在的内存写入时,会中断在执行的指令处,如何提取此指令所在的地址,以及正在违规修改的是受保护的内存中的什么地址?
3)当出现此中断后,移走内存断点,如何恢复程序的执行即让程序继续从引起中断的那个指令开始执行?
谢谢

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
解决了第一个问题:使用VirtualProtectEx API函数设置内存的读写等属性。
以下是设置内存不可写的部分代码:
	DWORD dwPID = 0;
	dwPID = Plugingetvalue(VAL_PROCESSID);		
	if (dwPID == 0)
	{
		Addtolist(0, 1, "[SetWriteAccess] Failed to get process id");
		return 1;
	}
	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, dwPID);
	if (!hProcess) 
	{
		Addtolist(0, 1, "[SetWriteAccess] Failed to OpenProcess");
		return 1;
	}

	DWORD dwOldFlag = 0;
	BOOL bRst = VirtualProtectEx(hProcess, ea1, mem_len, PAGE_EXECUTE_READWRITE, &dwOldFlag);
	if (!bRst) 
	{
		Addtolist(0, 1, "[SetWriteAccess] Failed to disable write access");
		return 1;
	}

解决第二个问题,我是通过extc void _export cdecl ODBG_Pluginmainloop(DEBUG_EVENT *debugevent) 来做的,里面有个while循环等待异常,可惜没有成功,最终放弃了。原因是:启动OD,完全死掉了一样,唉
哪位给点意见吧,谢谢了
2008-5-15 16:02
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
自己顶
是不是太简单了
2008-5-16 15:48
0
雪    币: 1946
活跃值: (243)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
4
参考 odbgscript source
2008-5-16 22:58
0
游客
登录 | 注册 方可回帖
返回
//