首页
社区
课程
招聘
[旧帖] [原创][邀请码已发]:幫忙解決求助問題區一個OCX控件彈出對話框的詳細過程 0.00雪花
2010-12-22 02:22 3959

[旧帖] [原创][邀请码已发]:幫忙解決求助問題區一個OCX控件彈出對話框的詳細過程 0.00雪花

2010-12-22 02:22
3959
【原创】【邀请码已发】:幫忙解決求助問題區一個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虚拟机自动化脱壳的方法

收藏
点赞6
打赏
分享
最新回复 (14)
雪    币: 147
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
ninymay 2 2010-12-22 14:38
2
0
因為之前發表的文章不夠,無法上傳圖片,這兩天努力的發文後,今天終於可以上傳附件了

1. ThumbPlus.ocx 惹人討厭的 About 視窗是長這樣的啦


2. 下 BPX CreateWindowExA IF *(*(ESP+0xC)) == 'Abou'  斷點後
    在 第一次運行範例程式 VB6Sample.exe SoftICE攔下的畫面

    畫面很清楚的告訴我們是因為CreateWindowExA這個API被叫用而攔下的
    注意下方綠色的那行,目前是在user32.dll的領空!!

3. 按一下F12鍵,就會看到我們已經回到msvbvm60.dll 的領空

    很清楚看到msvbvm60.dll 去呼叫了 user32.dll中的CreateWindowExA

4.現在再按9下 F12鍵, 程式就離開 msvbvm60的領空了

這裡不要按F12以免程式跑飛

5.按6下F10單步執行之後又再次進入msvbvm60領空,
   再按一次F12後, 討人厭的 About 視窗就出現了
   現在按下視窗右上角的x,把視窗關掉,SoftICE會再彈起來,
   這次我們終於到了 ThumbPlus的領空了

第一行看到的CALL [ECX+000002B0] 就是叫出 About 視窗的凶手

6.解決掉第一次出現的 About視窗, 主程式的畫面終於出現了


7.但是高興不了多久, About視窗又跳出來搗蛋了,好在我們SoftICE斷點沒清,
   程式再度被攔了下來,用同樣的解法,再次回到 ThumbPlus的領空

   光標的上一行看到的CALL [ECX+000002B0] 就是定時叫出 About 視窗的凶手

8. 這是我在VM中的整個工作桌面截圖


最後附上改好的成品 ThumbPlus crack.rar

終於完成了,謝謝大家耐心觀看
上传的附件:
雪    币: 147
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
ninymay 2 2010-12-26 15:47
3
0
今天原先發表求助的樓主usrvp終於回來結帖了,我也拿到賞金了喔!真的很開心,
謝謝樓主,也謝謝所有看過這篇帖子的朋友們,目前原先的求助帖已移到『经典问答』
http://bbs.pediy.com/showthread.php?t=126797
雪    币: 317
活跃值: (13)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
RAsmDbg 1 2010-12-29 14:16
4
0
好久没看到有人用SoftICE了,怀念一个~
好似我见过的台湾人刚来看雪的时候都用这老古董~
雪    币: 322
活跃值: (113)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
高军 2010-12-29 23:43
5
0
听过这个工具,没有用过,学习了
雪    币: 147
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
ninymay 2 2010-12-30 02:09
6
0
不好意思,讓大大見笑了我是來自台灣的廣東人啦
因為手上有低階核心程式要弄,不想再多用一個WinDBG,所以就延用至今了,因為它是Ring0層級的調試程式,對有殼的程式不用脫殼就可以用API下斷攔下分析,剛好適合懶惰的我

倒是初學的雪友脫殼時不想被一堆機碼搞暈,不妨用SoftICE入門,不過它安裝是有點麻煩就是了啦
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Acalanatha 2010-12-30 09:16
7
0
没全看懂,不过还是谢谢您的大力支持
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whypro 2010-12-30 14:16
8
0
还念,softice楼主在来几篇。
雪    币: 147
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
ninymay 2 2010-12-30 18:31
9
0
好,沒問題應觀眾要求,我會寫個給初學者看的SoftICE專篇^^
雪    币: 147
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
ninymay 2 2010-12-31 05:18
10
0
先來一篇 "獻給新手(一)--不用脱壳就能调试加壳软件(SoftICE懷舊之旅)"
http://bbs.pediy.com/showthread.php?p=909736#post909736

請多指教
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
玩玩可以 2010-12-31 10:28
11
0
谢谢楼主分享。
雪    币: 147
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
ninymay 2 2011-1-5 02:26
12
0
"献給新手(一)--不用脱壳就能调试加壳软件(SoftICE还旧之旅)"移到『伴你成长』区了:
http://bbs.pediy.com/showthread.php?t=127562
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gumuliu 2011-6-11 19:24
13
0
受教了,多謝
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
livexg 2011-6-11 20:27
14
0
呵呵不错呀。
雪    币: 504
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
crackdung 2011-6-13 10:53
15
0
一個這麼簡單的,搞到這麼複雜,,哎
游客
登录 | 注册 方可回帖
返回