Icebird

Delphi/C# - My favorite programming language

My Links

Blog Stats

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):
   
http://www.cnblogs.com/Files/Icebird/WoptiUtilitiesDemo.rar

posted on 2008-03-09 18:13 Icebird 阅读(...) 评论(...) 编辑 收藏