2011年8月10日星期三

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

自從8月4日Ollydbg官網放出最新版的Ollydbg 2.01 alpha 4以來,沉迷多時的cracker界又要開始新一輪的調試器升級了,我們對OD升級到插件版歡呼雀躍之餘,卻也面對新的問題,新版OD不支持Ollydbg 1.01版得插件,看來除了升級我們的OD之外,還要繼續升級第三方插件了.

簡略的閱讀了插件頭文件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[32]);
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[SHORTNAME],
                   wchar_t pluginversion[SHORTNAME]);
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" 等等,這個還需要你進行發掘.


没有评论:

发表评论