Windows優化大師的一點研究

作者:數據恢復
    以英文版v7.80.8.218來研究,這個應該是目前最新的公開發布的版本了。
    安裝程序是最新的Inno Setup 5.2.2製作的安裝程序,Inno Setup是用Delphi 2編譯的,因此與Delphi做的應用軟件是很配的,就如用C++做的程序喜歡用NSIS打包一樣。Inno Setup 5.2.2也是目前發佈的最新版本了,最近的幾次更新,Inno Setup也是一直在改進對於Vista系統的支持。Inno Setup還有一個優點,就是可以設置壓縮方式爲lzma/ultra,這樣可以生成最小的安裝包,節約用戶的下載時間。

    接下來就開始解剖安裝程序,請出Universal Extractor這個工具(當然直接用命令行工具innounp.exe也可以),解包完成,來看看解出來的文件。

    Setup.e32 真正的安裝執行文件,作用相當於Installshield的Engine了
    flist.bin   看起來像是script.bin的索引文件
    script.bin 腳本編譯後的二進制文件,重點來看看這個文件

    看到安裝開始就刪除了不少的中文的快捷方式,可能是方便那些測試人員,免得他們一會裝中文版,一會裝英文版,開始菜單和桌面上出現一堆重複的快捷方式。然後我看到了有一個網址:http://login.wopti.net/install.php?Ver=7.80.8.218.5,相信是用來記錄聯網用戶的軟件安裝情況的以便統計分析。接下來就是往系統複製文件了,其中{sys}/Iosubsys/Smartvsd.vxd是隻有在Win9x下才會安裝,{app}/WoptiDefrag.dll是在非Win9x和非Vista下才會安裝,{app}/WoptiDefragVista.dll是在Vista下才會安裝。{tmp}/WoptiInfo.dll其實原本叫SendInfoDLL的,其作用就是發出一個HTTP Request到之前我提到的那個網址。(因爲這是一個Delphi編譯的DLL,並且引用了WinInet這個單元)

    {sys}/Iosubsys/Smartvsd.vxd是支持SMART IOCTL接口的虛擬設備驅動程序,因爲Windows被設計爲應用程序不能直接訪問底層硬件,因此需要從設備驅動中獲取相關硬件信息。Win9x可以直接使用Smartvsd.vxd即可訪問硬盤信息;Windows NT及以後的操作系統,管理員是可以管理硬件設備的,因此可以用ATA/APAPI的IDENTIFY DEVICE來取得所需信息,但是考慮到用戶權限不一定是管理員,所以在WinNT/2K/XP下非管理員用戶可以用SCSI後門的方式讀取IDE硬盤信息(Vista下面這招就不靈了)。

    {app}下的所有執行文件和DLL都做了數字簽名,這應該是國際化的需要吧,畢竟國外更看重這一點。簽名是用的WoSign(深圳沃通)的證書,好像也不便宜,1年要1000多。不知爲什麼,WoptiDefragVista.dll沒有版本信息,WoptiUpdate.exe的描述竟然是中文,天吶,不會沒有專門做英文版的升級程序吧,看起來像是如此。版本信息裏的公司有的是SSN,有的是Wopti,版權信息也是不一致,有的產品名稱裏還是中文名稱。且有的[語言]是中文,有的[語言]是英文,這說明一點,發佈出去的產品的文件並不是全在同一臺機器上編譯的。

    LIGHTMAP.PNG應該是作爲Texture,與D3DX81ab.dll一起來完成圖形顯示(DirectX)性能的檢測。

    UpdateServer.ini是一個配置文件,定義了升級服務器地址,看得出這樣可以支持以後加入多臺升級服務器以滿足用戶數增長後的升級需求。

    PortsList.inf這個定義文件定義了常見服務的端口使用情況,可以不斷補充新的定義。

    ActiveXImmunity.ini (ActiveX插件免疫數據庫) 這個文件是收集的插件的CLSID,讓用戶可以有選擇的免疫插件以防中招。

    SelfRegChg.ini這個文件是原來存放自定義優化設置,默認帶2個設置,一個是支持Win2000使用超過137G大硬盤,另一個是取消磁盤容量警告的設置,應該是讓用戶將自己特殊的優化設置定義後在軟件中應用。

    Empty.ico 是用來隱藏快捷方式上的箭頭的透明圖標。

    WoptiHWDetect.sys 就是原來的gwiopm.sys,是用來在NT下做I/O端口操作的服務程序。

    WoptiHelp.chm 幫助文件,是用Help & Manual(專業的幫助製作工具,雖然安裝程序不到30M,可比起Adobe RoboHelp來說算是苗條多了)製作的,裏面沒有一副圖片,所以幫助文件才100多K。
    Big5.dat, Devs.Dat, JEDEC.dat, MonV.Dat 開始我還以爲是什麼加密格式,後來仔細一看,文件開頭的兩個字節"78 DA"(最大壓縮率), "78 9C"不是標準的ZLib壓縮格式的標誌嗎,顯然這裏的壓縮也起到了一定的加密效果(因爲沒有文件頭,所以壓縮工具都不能打開文件)。這些Dat文件會在運行後需要時自動解壓爲同名的.tmp臨時文件。MonV.Dat解壓生成MonV.tmp後,又迅速的被刪除了。
    Devs.tmp (芯片檢測數據庫) 臨時文件,打開是一個文本文件,裏面是設備ID與名稱的對照表。
    JEDEC.tmp (SPD 廠商數據庫) 臨時文件?
    [ 注:JEDEC = Joint Electron Device Engineering Council (電子元件工業聯合會) ]
    Big5.dat 應該是註冊驗證需要的東西吧。
    MonV.Dat 不知道幹什麼用的,也是註冊驗證需要的東西?

    Set.ini 運行後纔會生成,裏面是保存的用戶設置,看起來所有的外置工具都是存取的這個設置文件。

    Wopti.log 運行後纔會生成,是記錄的操作日誌。

    D3DX81ab.dll 這個文件被ASPack壓縮過,可其他的exe和dll都沒有被壓縮。

    WoptiDefrag.dll和WoptiDefragVista.dll (磁盤整理組件) 都是用VC的MIDL編譯的,而且還是ActiveX控件。裏面提供的是DefragControl Class。

    WoptiCDRomContmenu.dll 也是可以註冊的COM文件,但是是用Delphi開發的。作用是Context Menu Handler,就是利用Windows提供的接口做外殼擴展,爲所有文件類型的右鍵菜單上增加2個項目,分別是打開光驅和關閉光驅。但是我這裏選中菜單時下面的狀態欄上會出現亂碼(不知道是不是Delphi不支持Unicode的原因)。regsvr32 WoptiCDRomContmenu.dll 執行後則增加菜單,regsvr32 WoptiCDRomContmenu.dll /u 執行後則移除菜單。核心代碼當然是對winmm.dll的mciSendCommand, mciSendString的調用。

    Woptiglobe.dll 是用Delphi 7開發的,三個導出函數:WoptiChkFileIsOK,WoptiCtrlHomepage,WoptiSetMaxthon

    WoptiP2P.dll (進程功能庫) 是用Delphi 7開發的,也是三個導出函數:WomTerminateProFromName,WomTerminateProcess,GetPort2ProcessList

    WoptiUtils.dll 是用VC7開發的,只有一個導出函數:ClearTracksForVista

    WoptiMem.exe (內存整理) 是用Delphi 7開發的,可以看出整理內存還是採用的請求大內存迫使操作系統將不常用進程所佔用的內容轉移到虛擬內存,以達到整理內存碎片的作用。

    WoptiProcess.exe (進程管理器) 是用Delphi 7開發的,靜態鏈接了WoptiP2P.dll的GetPort2ProcessList函數。

    WoptiUpdate.exe (在線升級) 是用Delphi 7開發的,升級信息地址是:http://liveupdate.wopti.net/updatefilelist.zip,奇怪的是定義了.zip後綴,返回的卻是文本文件。這個文件只有中文信息,應該是放錯了版本。

    WoptiUtilities.exe (主程序) 是用Delphi 7開發的,靜態鏈接了WoptiP2P.dll的GetPort2ProcessList函數。所用第三方控件大概如下:

Fast Memory Manager 優秀的內存管理程序,使用其帶來的額外好處是可以很容易發現程序中代碼引起的內存泄漏
TRegExpr  Delphi下唯一有公開源代碼的正則表達式控件
SimpleTimer  輕量級的定時器,精度雖然與TTimer一樣,但是它是從TObject繼承下來的,而且多個實例可以共享同一句柄
MaxMem   內存深度整理
MiTeC System Information Component  系統信息檢測
CoolTrayIcon  托盤控件
ActivePorts  查看系統端口的使用情況
DhCheckFolder  可供選擇的系統目錄及磁盤查看控件
TMS Components  一套功能很全的界面功能控件
APNetscapeLabel  仿Netscape Communicator的性能對話框的標籤的控件,作標題欄用
mxOutlookBar Pro 左邊的欄目選擇組件
Virtual Treeview 功能強大的樹形控件,也可以當作表格用
FlatStyle  按鈕,輸入框等平面風格控件
Magenta Systems WMI and SMART Component  通過WMI,SMART,SCSI獲取更詳細準確的系統信息
IPInfo   利用IP Helper API獲取網絡配置以及適配器信息
DelphiX   DirectX的Delphi接口控件
ZLib   提供壓縮功能
Indy   網絡通訊控件
TeeChart  用來顯示餅圖等
md5,Blowfish,FGIntRSA,RC6 都是密碼學相關的算法實現單元,可以用到註冊驗證以及加密文件。

    有開發人員是用微軟拼音的,很容易就會把輸入框控件的ImeName自動設置成"中文 (簡體) - 微軟拼音"。

    可以肯定的是,註冊驗證一定是用到了RSA算法,沒有對主程序做加殼等保護處理,就是說不太可能被人分析代碼而寫出註冊機,但是被爆破還是難免的。曾經的敵人名單:-Arongsoft.com.htm,Keygen.exe,wom60_Keygen.exe依然在代碼中定義着。

    界面:

    窗體的Tab鍵也沒有設置按順序跳轉,ESC不能關閉對話框。APNetscapeLabel上實現的模擬標題欄的功能有點小問題:當在最大化雙擊恢復時會導致窗體位置被粘連。APNetscapeLabel沒有實現右鍵菜單,左上角的圖標沒有實現雙擊事件關閉,這與普通的窗體行爲不一致。

    下方的狀態欄是自畫Panel,實現了上下漸變效果。左邊的mxOutlookBar被修改了源代碼以實現項目與外部連成一體的效果以及圓角效果。VirtualStringTree被繼承實現TWomccVT。FlatButton修改成更加平面與實現圓角效果。


我自己根據其執行文件,寫了一個界面的演示(Source include):

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章