newbing 发表于 2011-8-10 09:04

Ollydbg 2.01 alpha 4 不支持舊版插件的原因

簡略的閱讀了插件頭文件plugin和插件例子Bookmark之後,不支持舊版插件的原因如下:
一.Ollydbg 2.01版僅支持UNICODE編譯的插件.
以vc++ 6.0為例,在工程-設置-C/C++窗口預處理程序定義中刪除_MBCS,並且添加上UNICODE和_UNICODE,否則編譯過程中會出現如下錯誤:
"This version must be compiled with UNICODE on"
二.Plugin輸出接口的改變.
開發過OD插件的朋友都知道,在OD舊版插件中我們必須導出一下幾個函數:

extc int_export cdecl ODBG_Plugindata(char shortname);
extc int_export cdecl ODBG_Plugininit(int ollydbgversion,HWND hw,
                        ulong *features);
extc void _export cdecl ODBG_Pluginmainloop(DEBUG_EVENT *debugevent);
在Ollydbg 2.01版不支持舊版的最大原因就是接口的改變,這些以ODBG_為前綴的關鍵函數改變為ODBG2_:

pentry (int)   ODBG2_Pluginquery(int ollydbgversion,
                   wchar_t pluginname,
                   wchar_t pluginversion);
pentry (void)    ODBG2_Pluginanalyse(t_module *pmod);
#ifdef DEBUG_EVENT                     // Requires <winnt.h>
pentry (void)    ODBG2_Pluginmainloop(DEBUG_EVENT *debugevent);
#endif
初始化函數從原來的ODBG_Plugininit改變為ODBG2_Pluginquery,反彙編查看舊版插件你就會發現這些函數名的字節大都在一起的,如果想直接修改函數名來達到新版比較麻煩,比如新版Script插件的函數名如下:

.rdata:10033213 a_odbg_pausedex db '_ODBG_Pausedex',0   ; DATA XREF: .rdata:off_1003319Co
.rdata:10033222 a_odbg_pluginac db '_ODBG_Pluginaction',0 ; DATA XREF: .rdata:off_1003319Co
.rdata:10033235 a_odbg_plugincl db '_ODBG_Pluginclose',0 ; DATA XREF: .rdata:off_1003319Co
.rdata:10033247 a_odbg_plugincm db '_ODBG_Plugincmd',0; DATA XREF: .rdata:off_1003319Co
.rdata:10033257 a_odbg_pluginda db '_ODBG_Plugindata',0 ; DATA XREF: .rdata:off_1003319Co
.rdata:10033268 a_odbg_pluginde db '_ODBG_Plugindestroy',0 ; DATA XREF: .rdata:off_1003319Co
.rdata:1003327C a_odbg_pluginin db '_ODBG_Plugininit',0 ; DATA XREF: .rdata:off_1003319Co
.rdata:1003328D a_odbg_pluginma db '_ODBG_Pluginmainloop',0
.rdata:1003328D                                       ; DATA XREF: .rdata:off_1003319Co
.rdata:100332A2 a_odbg_pluginme db '_ODBG_Pluginmenu',0 ; DATA XREF: .rdata:off_1003319Co
.rdata:100332B3 a_odbg_pluginre db '_ODBG_Pluginreset',0 ; DATA XREF: .rdata:off_1003319Co
.rdata:100332C5 a_odbg_pluginsh db '_ODBG_Pluginshortcut',0
直接修改前綴_ODBG到_ODBG2字節數增加,原本空間不夠,不過還是還是有修改的辦法,修改輸出函數名得偏移量,增大空間使得夠字節修改這些函數名.
這兩個原因是新版OD不支持舊版插件的主要原因,當然還有其他,比如插件版本號升級到"2.00.00" 等等,這個還需要你進行發掘.

原帖地址:http://0mblogger.blogspot.com/2011/08/ollydbg-201-alpha-4_09.html

xylguagua 发表于 2011-8-10 09:49

顶一个、最新的OD.如果是我就下

panti 发表于 2011-9-6 14:24

这才明白为啥原因谢谢指导

milian520 发表于 2011-9-6 16:53

大牛说的就是看不懂

sausasasa 发表于 2011-9-19 11:16

楼主辛苦。。。这个要支持。。。

lanble 发表于 2012-3-18 09:52

楼主辛苦。。。这个要支持。。。
页: [1]
查看完整版本: Ollydbg 2.01 alpha 4 不支持舊版插件的原因