陷阱"技術探秘──動態漢化Windows技術的分析
四通利方(RichWin)、中文之星(CStar)是大家廣為熟知的漢化Windows產品,"陷阱"技術即動態修改Windows代碼,一直是其對外宣稱的過人技術。本文從Windows的模塊調用機制與重定位概念著手,介紹了"陷阱"技術的實現,並給出了采用"陷阱"技術動態修改Windows代碼的示例源程序。
一、發現了什麼?
筆者多年來一直從事Windows下的開發工作,經歷了Windows 2.0 、 3.0 、3.1 ,直至Windows 95、NT的成長過程,也遍歷了長青窗口、長城窗口、DBWin、CStar、RichWin等多個Windows漢化產品。從現在看來,影響最大也最為成功的,當推四通利方的RichWin;此外,中文之星CStar與RichWin師出一門,其核心技術自然也差不多。其對外宣傳采用獨特的"陷阱" 技術即動態修改Windows代碼,一直是筆者感興趣的地方。
EXEHDR是Microsoft Visual C++開發工具中很有用的一個程序,它可以檢查NE(New-Exe cutable)格式文件,用它來分析RichWin的WSENGINE.DLL或CStar的CHINESE.DLL,就會發現與眾不同的兩點(以CStar 1.20為例):
C:\CSTAR>exehdr chinese.dll /v
..................................
s
6 type offset target
BASE 060a seg 2 offset 0000
PTR 047e imp GDI.GETCHARABCWIDTHS
PTR 059b imp GDI.ENUMFONTFAMILIES
PTR 0451 imp DISPLAY.14 ( EXTTEXTOUT )
PTR 0415 imp KEYBOARD.4 ( TOASCII )
PTR 04ba imp KEYBOARD.5 ( ANSITOOEM )
PTR 04c9 imp KEYBOARD.6 ( OEMTOANSI )
PTR 04d8 imp KEYBOARD.134( ANSITOOEMBUFF )
PTR 05f5 imp USER.430 ( LSTRCMP )
PTR 04e7 imp KEYBOARD.135( OEMTOANSIBUFF )
PTR 0514 imp USER.431 ( ANSIUPPER )
PTR 0523 imp USER.432 ( ANSILOWER )
PTR 05aa imp GDI.56 ( CREATEFONT )
PTR 056e imp USER.433 ( ISCHARALPHA )
PTR 05b9 imp GDI.57 ( CREATEFONTINDIRECT )
PTR 057d imp USER.434 ( ISCHARALPHANUMERIC )
PTR 049c imp USER.179 ( GETSYSTEMMETRICS )
PTR 0550 imp USER.435 ( ISCHARUPPER )
PTR 055f imp USER.436 ( ISCHARLOWER )
PTR 0532 imp USER.437 ( ANSIUPPERBUFF )
PTR 0541 imp USER.438 ( ANSILOWERBUFF )
PTR 05c8 imp GDI.69 ( DELETEOBJECT )
PTR 058c imp GDI.70 ( ENUMFONTS )
PTR 04ab imp KERNEL.ISDBCSLEADBYTE
PTR 05d7 imp GDI.82 ( GETOBJECT )
PTR 048d imp KERNEL.74 ( OPENFILE )
PTR 0460 imp GDI.91 ( GETTEXTEXTENT )
PTR 05e6 imp GDI.92 ( GETTEXTFACE )
PTR 046f imp GDI.350 ( GETCHARWIDTH )
PTR 0442 imp GDI.351 ( EXTTEXTOUT )
PTR 0604 imp USER.471 ( LSTRCMPI )
PTR 04f6 imp USER.472 ( ANSINEXT )
PTR 0505 imp USER.473 ( ANSIPREV )
PTR 0424 imp USER.108 ( GETMESSAGE )
PTR 0433 imp USER.109 ( PEEKMESSAGE )
35 relocation