好友
阅读权限40
听众
最后登录1970-1-1
|
本帖最后由 zapline 于 2010-2-19 12:46 编辑
功能:自动快捷的对ESP所指地址,下四字节的硬件访问断点,运行程序,断下后删除该硬件断点。支持快捷键。
对于写OD插件,一般来说,我们还需要:plugin sdk ,OllyDbg Plugin API v1.10
这里,提供plugin sdk for VC以及OllyDbg Plugin API手册中英文版本:
plugin sdk vc.rar
(34.61 KB, 下载次数: 87)
API手册.rar
(310.4 KB, 下载次数: 147)
新建一个dll:
将Plugin.h和Ollydbg.lib添加到工程目录
加上 /J 设置(工程--设置):
包含库文件:
两个OD插件必须的回调函数:
extc int _export cdecl ODBG_Plugindata(char *shortname)
{
strcpy(shortname,"OdEsp");
return PLUGIN_VERSION;
}
extc int _export cdecl ODBG_Plugininit(int ollydbgversion,HWND hw,ulong *features)
{
mHWND = hw;
return 0;
}
添加菜单和菜单消息响应的代码:
extc int _export cdecl ODBG_Pluginmenu(int origin,char data[4096],void *item)
{
if (origin == PM_MAIN)
{
strcpy(data,"0 &ESP Once\tAlt+num9|1 &About");
return 1;
}
return 0;
}
extc void _export cdecl ODBG_Pluginaction(int origin,int action,void *item)
{
if (origin == PM_MAIN)
{
switch (action)
{
case 0:
EspOnce();
break;
case 1:
MessageBox(mHWND,"Author: zapline[DFJG]","About",MB_OK);
break;
}
}
}
ESP定律功能实现的代码:
void EspOnce()
{
t_thread* pcputhread = Findthread(Getcputhreadid());
EspAddr = pcputhread->reg.r[4];
Sethardwarebreakpoint(EspAddr, 4, HB_ACCESS);
Go(0,0,STEP_RUN,0,0);
}
extc void _export cdecl ODBG_Pluginmainloop(DEBUG_EVENT *debugevent)
{
t_status status = Getstatus();
if (status == STAT_EVENT || status == STAT_STOPPED)
{
Deletehardwarebreakbyaddr(EspAddr);
}
}
实现快捷键功能的代码:
extc int _export cdecl ODBG_Pluginshortcut(int origin,int ctrl,int alt,int shift,int key,void *item)
{
if (ctrl==0 && alt==1 && shift==0 && key==VK_NUMPAD9)
{
EspOnce();
return 1;
}
return 0;
}
注:strongOD太霸道了,找不到没被使用的快捷键。可以自行修改
下面是生成的插件dll和插件源码:
OdEsp dll.rar
(13.93 KB, 下载次数: 220)
OdEsp.rar
(44.98 KB, 下载次数: 181)
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|