【原创】【邀请码已发】:幫忙解決求助問題區一個OCX控件彈出對話框的詳細過程
【作者】ninymay
【原先在求助问答区的位址】
http://bbs.pediy.com/showthread.php?p=905826&posted=1#post905826
【破解等級】入門級
【使用工具】SoftICE(Driver Studio V3.2), Blade API Monitor V3.5, HexEdit V3.2
【破解平台】VM6.04/XP SP2
【软件名称】Thumbnailer Activex Control(圖片縮圖OCX控件) V5.0
【下载地址】
http://www.icxr.com/actx/net/thmbplus.zip for VB.net開發平台
http://www.icxr.com/actx/thmbplus.zip for VB6.0開發平台
註:我個人是使用VB6.0的測試包
【软件简介】
This is a powerful activex control, with a fully customizable interface.
You can set the thumbnail's width and height, and the borders style for its body and label. The distance between the thumbnails can also be set.
這個OCX控件有完整的客製化界面.您可以設定縮圖的寬度和高度,也可以設定它的邊框風格,另外也可以設定每個縮圖之間的距離.
Infotips can be enabled for each thumbnail and the type of information that will be displayed is customizable.
每個縮圖還可以增加訊息提示,而提示框的風格也可以完全自訂.
【软件特性】
- More multimedia formats: Bitmaps, Icons or Metafiles, as well as enhanced metafiles, JPEG, DIB, RLE, PNG, TIFF
and animated or static GIF files.
- Thumbnails caching
- ListView implementation
- Multiple views
- Plethora of information
- Customized InfoTips
- Checkboxes
- Items repositioning
- Checkboxes
- Ten types of sorting
- New methods and events
- Hi quality 32 bit rendering
- Ultra fast processing
【软件大小】408KB
【保护方式】无。但試用版會一直彈出標題是 "About" 的視窗,樓主當初就是希望有人可以幫它拿 掉這擾人的視窗!!
【破解目的】研究OCX控件的破解方法
【破解声明】我是新人,一点心得愿与大家分享,如有違反版規的地方還請多多包涵
【破解内容】
说明:OCX的特色是不能直接執行,可以用Visual Studio中自帶的ActiveX Control Test Container來執行,也可以用VC,VB寫程式來叫用,
這個案例因為官網已經有VB寫的範例程式,所以只接使用比較快^^
扒文的話有些大大會建議大家用CoClassSyms.exe(
http://www.woodmann.com/collaborative/tools/index.php/CoClassSyms)
生成DBG調試符號給IDA Pro分析,在本例中IDA Pro是分析成功的, 如果有人不喜歡用動態分析的話, 也可以試試看IDA Pro的反組譯結果來破解.
我因為SoftICE用習慣了,所以不想繞圈子看它把字串運算來運算去,因此就用SoftICE直接對CreateWindow這個API下手...
因為惱人的About視窗一定要透過CreateWindow來創建視窗,攔它就對了.
但是CreateWindow有許多兄弟姐妹,有CreateWindowA, CreateWindowW, 還有CreateWindowExA, CreateWindowExW 而且參數的傳遞又不一樣,
所以有必要請出API SPY來看看, 我是用Blade API Monitor(
http://www.bladeapimonitor.com), 看過後確認是叫用 CreateWindowExA,
但是這個API被叫用了數十次,總不能每次都攔,要攔到什麼時候?所以必需要視窗的Title是 "About" 時才攔下, 所以先叫出MSDN, 再確認一下
CreateWindowEx的叫用法:
HWND CreateWindowEx(
DWORD dwExStyle, // extended window style
LPCTSTR lpClassName, // registered class name
LPCTSTR lpWindowName, // window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // menu handle or child identifier
HINSTANCE hInstance, // handle to application instance
LPVOID lpParam // window-creation data
);
雖然傳了十二個參數進去,但我們只要注意第三個參數: lpWindowName
於是在SoftICE中輸入 BPX CreateWindowExA IF *(*(ESP+0xC)) == 'Abou'
注意:SoftICE手冊上介紹的 *(ESP->OxC) 運算式語法不能用,會出現 Invalid dereference 的錯誤.
////////////////////////////////////////////////////////////////////////////////////////////////////////
下面的調試程序我有抓圖,但因目前權限不夠,無法上傳,等我升級後,再補傳上來,先跟看帖的朋友說聲抱歉 !!
////////////////////////////////////////////////////////////////////////////////////////////////////////
下好斷點後, 運行官網上的範例程式 VB6Sample.exe, 經過一小段時後, SoftICE彈出來了,(先別忙著取消斷點,日後有用)看一下下方綠色的那行,得知目前是在user32的領空中, 沒錯,因為 CreateWindowExA是 User32.dll中的API
按一下F12鍵,就會看到我們已經回到msvbvm60的領空, OCX所有的對外呼叫都是透過MSVBVM60.dll 的,這也是
為什麼不用LordPE去看ThumbPlus.ocx到底叫用哪些dll? 哪些 API?? 因為在 LordPE中看到的,只有一個DLL,就是MSVBVM60.dll !! 因此只能在執行階段用API SPY這類的軟體來檢測ThumbPlus.ocx到底叫用了哪些dll,哪些API囉!
現在再按9下 F12鍵, 程式就離開 msvbvm60的領空了,
這裡不要按F12以免程式跑飛,
按6下F10單步執行之後又再次進入msvbvm60領空,
再按一次F12後, 討人厭的 About 視窗就出現了
現在按下視窗右上角的x,把視窗關掉,SoftICE會再彈起來,
這次我們終於到了 ThumbPlus的領空了 (好不容易)
1B:1102FF86 FF91B0020000 CALL [ECX+000002B0] => 會叫出About視窗的元凶
1B:1102FF8C DBE2 FCLEX
1B:1102FF8E 3BC7 CMP EAX,EDI => 此時 EAX, EDI 都是0
1B:1102FF90 7D12 JGE 1102FFA4 會跳
. . .
. . .
. . .
-------------------------- ThumbPlus!.text+0002EF86 ---------------------------------
1B:1102FF86處就是元凶,這個CALL會透過MSVBVM60.dll叫用user32.dll中的CreateWindowExA建立About視窗!!!
用90 90 90 90 90 90 把它nop掉是不錯的方法,但不妥當,因為接下來的 1B:11F02FF8E 處
有一個 CMP EAX, EDI 指令, 1B:1102FF86處的 CALL正常執行後,EAX的傳回值為0,若冒然NOP掉,EAX的值我們無法掌握,
遇到檢查比較嚴格的程式,就會破解失敗,所以最好的方法,就是把 1B:1102FF86處,直接就改成
MOV EAX,0 即 B8 00 00 00 00 最後補一個 90 就好, 這樣可以確保之後的程序可以正常執行
把程式碼抄了用HexEdit修改之後,果然程式一開始就進入主畫面,不會看到 About的視窗,
但是高興不了多久,SoftICE又再彈出來了,沒錯,About視窗除了程序一開始會出現外,以後會間隔一小段時間又再出現,而且不是之前我們找的那個地方喔!?
用上面介紹過的手順,又再度到了 ThumbPlus的領空,這次是長這樣子的
1B:1102FDDF FF90B0020000 CALL [ECX+000002B0] => 會叫出About視窗的元凶
1B:1102FDE5 DBE2 FCLEX
1B:1102FDE7 8945B0 MOV [EBP-50],EAX => 此時 EAX,是0
1B:1102FDEA 837DB000 CMP DWORD PTR [EBP-50],00
1B:1102FDEE 7D1D JGE 1102FE0D 會跳
. . .
. . .
. . .
-------------------------- ThumbPlus!.text+0002EDC2 ---------------------------------
1B:1102FDDF處就是元凶,這個CALL也是會透過MSVBVM60.dll叫用user32.dll中的CreateWindowExA建立About視窗!!!
同樣用90 90 90 90 90 90 把它nop掉是不錯的方法,但不妥當,因為接下來的 1B:11F02FDEA 處有一個 CMP DWORD PTR [EBP-50],00 指令, 1B:1102FDDF處的 CALL正常執行後,EAX的傳回值為0,若冒然NOP掉,EAX的值我們無法掌握,遇到檢查比較嚴格的程式,就會破解失敗,所以最好的方法,就是把 1B:1102FDDF 處,直接就改成
MOV EAX,0 即 B8 00 00 00 00 最後補一個 90 就好, 這樣可以確保之後的程序可以正常執行
把程式碼抄了用HexEdit修改之後,果然程式進入主畫面,永遠也不會看到 About的視窗
至此破解完畢,整理一下開啟HexEdit後要改的地方是
1.修改ThumbPlus.ocx 第196486(十進位)個byte開始:
FF 91 B0 02 00 00 => B8 00 00 00 00 90
2. 位置196063開始:
FF 90 B0 02 00 00 => B8 00 00 00 00 90
這樣就OK了,雖然這是SoftICE不方便的地方,不能在調試中隨改隨存,但是它也有OllyDBG所不及的優點,反正黑貓白貓會抓老鼠就是好貓,還請各位使用OllyDBG的大大們見諒
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法