AntiDebug三篇已完结,以下是链接
窗口相关AntiDebug及Od反AntiDebug:http://bbs.pediy.com/showthread.php?t=206168
NTQ相关AntiDebug及Od反AntiDebug:http://bbs.pediy.com/showthread.php?t=206118
PEB相关AntiDebug及Od反AntiDebug:
http://bbs.pediy.com/showthread.php?t=206117
记得前面好像有篇关于1.x的教程,而OllyDbg2.x插件编写教程整个网络几乎没有(PS:可能我搜索方式不对),所以,我来试试看
#define PLUGINNAME L"Tennn"
#define MY_PLUGIN L"1.0"
t_table g_Tennn={0};
extc INT __cdecl ODBG2_Pluginquery(int ollydbgversion,ulong *features,
wchar_t pluginname[SHORTNAME],
wchar_t pluginversion[SHORTNAME])
{
//检查Olldbg版本
if (ollydbgversion<201)
{
return 0;
}
//设置Olldbg插件名称与版本
StringCchCopy(pluginname,SHORTNAME,PLUGINNAME);//设置插件名称
StringCchCopy(pluginversion,SHORTNAME,MY_PLUGIN);//设置插件版本
//返回需要的API版本
return PLUGIN_VERSION;
}
extc int __cdecl ODBG2_Plugininit(void)
{
MessageBox(0,L"Hello Pediy",0,0);
HWND hParent=GetActiveWindow();
LPCWSTR lpDlgID=MAKEINTRESOURCE(IDD_DIALOG1);
g_hwnd=CreateDialog(g_hModule,lpDlgID,hParent,(DLGPROC)RightClickMenu1);
return 0;
}
extc void __cdecl ODBG2_Pluginreset(void)
{
Deletesorteddatarange(&(g_Tennn.sorted),0,0xFFFFFFFF);
}
extc int __cdecl ODBG2_Pluginclose(void)
{
Writetoini(NULL,PLUGINNAME,L"Restore",L"%i",g_Tennn.hw!=NULL);
return 0;
}
extc void __cdecl ODBG2_Plugindestroy(void)
{
Destroysorteddata(&(g_Tennn.sorted));
}
static t_menu g_stcMainMenu[]={
{
L"主菜单1",
L"主菜单11111111111111111",
K_NONE,MenuFun1,NULL,0
},
{
L"主菜单2",
L"主菜单22222222222222222",
K_NONE,MenuFun2,NULL,1
},
{
NULL,NULL,K_NONE,NULL,NULL,0
}
}
static t_menu g_stcRightClickMenu[]={
{
L"右键菜单1111",
L"右键11111111111111111",
KK_DIRECT | KK_CTRL | 'A',RightClickMenu1,NULL,0},
{
L"右键菜单2222",
L"右键222222222222222222",
KK_DIRECT | KK_CTRL | 'C',RightClickMenu2,NULL,1},
{
NULL,NULL,K_NONE,NULL,NULL,0
}
};
static int MenuFun1(t_table *pt,wchar_t *name,ulong index,int mode)
{
if (mode==MENU_VERIFY)
{
// MessageBox(0,L"MENU_NORMAL11111",0,0);
return MENU_NORMAL;
}
if (mode==MENU_EXECUTE)
{
MessageBox(0,L"MENU_NOREDRAW11111",0,0);
return MENU_NOREDRAW;
}
return MENU_ABSENT;
}
static int RightClickMenu1(t_table *pt,wchar_t *name,ulong index,int mode)
{
//第一次调用 执行初始化操作
if (mode==MENU_VERIFY)
{
// MessageBox(0,L"MENU_NORMAL11111",0,0);
return MENU_NORMAL;
}
//第二次调用 执行菜单逻辑操作
if (mode==MENU_EXECUTE)
{
MessageBox(0,L"MENU_NOREDRAW11111",0,0);
ShowWindow(g_hwnd,SW_SHOW);
return MENU_NOREDRAW;
}
return MENU_ABSENT;
}
INT_PTR CALLBACK RightClickMenu1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
{
//点击按钮
case IDC_BUTTON1:
MessageBox(0,0,0,0);
EndDialog(hDlg, LOWORD(wParam));
}
break;
}
return (INT_PTR)FALSE;
}
- VS建立一个DLL工程
- 取得OllyDbg指定版本的SDK
- 在C/C++编译选项-命令行添加“/J” 说明工程中的char均为 UNSIGNED类型
- 定义如下全局变量与宏定义
VS建立一个DLL工程
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!