首页
社区
课程
招聘
[原创][开源]OllyDbg 2.x插件编写教程
发表于: 2015-11-30 18:46 13468

[原创][开源]OllyDbg 2.x插件编写教程

2015-11-30 18:46
13468
AntiDebug三篇已完结,以下是链接
窗口相关AntiDebug及Od反AntiDebughttp://bbs.pediy.com/showthread.php?t=206168

NTQ相关AntiDebug及Od反AntiDebughttp://bbs.pediy.com/showthread.php?t=206118

PEB相关AntiDebug及Od反AntiDebug
http://bbs.pediy.com/showthread.php?t=206117

记得前面好像有篇关于1.x的教程,而OllyDbg2.x插件编写教程整个网络几乎没有(PS:可能我搜索方式不对),所以,我来试试看


  • VS建立一个DLL工程

  • 取得OllyDbg指定版本的SDK

  • 在C/C++编译选项-命令行添加“/J”  说明工程中的char均为 UNSIGNED类型

  • 定义如下全局变量与宏定义
  • #define PLUGINNAME L"Tennn"
    #define MY_PLUGIN L"1.0"
    t_table g_Tennn={0};
    




  • 插件信息查询函数

  • 此函数是必须存在的函数 也是OllyDbg第一个调用的函数 此函数负责检查当前
    的OllyDbg是否可运行此插件。
    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;
    }
    



  • 插件初始化函数

  • 此函数是可选函数 也是OllyDbg第二个调用的函数 负责初始化插件的资源
    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;
    }
    



  • 插件重置函数

  • 此函数是可选函数 当OllyDbg重新加载程序或打开新的程序时被调用
    extc void __cdecl ODBG2_Pluginreset(void)
    {
      Deletesorteddatarange(&(g_Tennn.sorted),0,0xFFFFFFFF);
    }
    



  • 插件关闭函数

  • 此函数是可选函数 当用户关闭OllyDbg时被调用
    extc int __cdecl ODBG2_Pluginclose(void)
    {
      Writetoini(NULL,PLUGINNAME,L"Restore",L"%i",g_Tennn.hw!=NULL);
      return 0;
    }
    



  • 插件销毁函数

  • 此函数是可选函数 当用户关闭OllyDbg时被调用,此时由插件创建的所有MDI窗口都已经被销毁
    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;
    }
    



  • 对话框

  • 响应右键菜单RightClickMenu1
    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;
    }
    



  • 效果图

  • 第一次初始化(打开OD):

    主菜单:

    右键菜单:



  • 我想做一个成熟插件出来,如何调试?

  • 很简单 右键项目属性-配置属性-调试-命令-添加OD目录


    完。

    ------------------------
    源码:
    Odb2插件.rar

    [课程]FART 脱壳王!加量不加价!FART作者讲授!

    上传的附件:
    收藏
    免费 3
    支持
    分享
    最新回复 (15)
    雪    币: 1844
    活跃值: (35)
    能力值: ( LV3,RANK:30 )
    在线值:
    发帖
    回帖
    粉丝
    2
    2出来M久了,就是插件没跟上

    我看到满世界人都还是用 1.1
    2015-11-30 19:17
    0
    雪    币: 54
    活跃值: (75)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    3
    od2.01确实不错,不过刚需插件跟不上,目前还是只能用1.1
    2015-11-30 20:18
    0
    雪    币: 10
    活跃值: (10)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    4
    听说od作者源码卖出去了?
    2015-11-30 20:53
    0
    雪    币: 1176
    活跃值: (1234)
    能力值: ( LV12,RANK:380 )
    在线值:
    发帖
    回帖
    粉丝
    5
    这个不清楚。。
    2015-11-30 21:10
    0
    雪    币: 10910
    活跃值: (3279)
    能力值: ( LV3,RANK:20 )
    在线值:
    发帖
    回帖
    粉丝
    6
    谢谢楼主分享,改天研究一下。
    2015-11-30 21:16
    0
    雪    币: 12037
    活跃值: (4758)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    7
    速度来学习啦
    2015-11-30 23:11
    0
    雪    币: 171
    活跃值: (509)
    能力值: ( LV4,RANK:50 )
    在线值:
    发帖
    回帖
    粉丝
    8
    老早的事情了,Immunity Debuger都出来这么久了。
    2015-12-1 10:31
    0
    雪    币: 2
    活跃值: (10)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    9
    支持撸主
    2015-12-1 22:29
    0
    雪    币: 11
    活跃值: (11)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    10
    右键菜单这个好,一直也没找到相关资料
    2015-12-2 15:11
    0
    雪    币: 4580
    活跃值: (992)
    能力值: ( LV4,RANK:50 )
    在线值:
    发帖
    回帖
    粉丝
    11
    都x64时代了od2有点跟不上了
    2015-12-3 09:25
    0
    雪    币: 269
    活跃值: (906)
    能力值: ( LV12,RANK:345 )
    在线值:
    发帖
    回帖
    粉丝
    12
    围观一下吧,哪位程序员开发一个类似IDA 的图形模块插件,或许用的就更多了
    2015-12-10 10:04
    0
    雪    币: 6
    活跃值: (10)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    13
    资源共享,MARK了
    2015-12-10 20:25
    0
    雪    币: 43
    活跃值: (35)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    14
    很不错,赞一个
    2016-1-27 16:33
    0
    雪    币: 146
    活跃值: (1235)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    15
    感谢分享与指教
    2017-12-1 11:09
    0
    雪    币: 965
    活跃值: (89)
    能力值: ( LV2,RANK:10 )
    在线值:
    发帖
    回帖
    粉丝
    16
    感谢分享与指教
    2017-12-9 11:51
    0
    游客
    登录 | 注册 方可回帖
    返回
    //