"陷阱"技術(shù)探秘
──動態(tài)漢化Windows技術(shù)的分析
四通利方(RichWin)、中文之星(CStar)是大家廣為熟知的漢化Windows產(chǎn)品,"陷阱"技術(shù)即動態(tài)修改Windows代碼,一直是其對外宣稱的過人技術(shù)。本文從Windows的模塊調(diào)用機制與重定位概念著手,介紹了"陷阱"技術(shù)的實現(xiàn),并給出了采用"陷阱"技術(shù)動態(tài)修改Windows代碼的示例源程序。
一、發(fā)現(xiàn)了什么?
筆者多年來一直從事Windows下的軟件開發(fā)工作,經(jīng)歷了Windows 2.0 、 3.0 、3.1 ,直至Windows 95、NT的成長過程,也遍歷了長青窗口、長城窗口、DBWin、CStar、RichWin等多個Windows漢化產(chǎn)品。從現(xiàn)在看來,影響也最為成功的,當推四通利方的RichWin;此外,中文之星CStar與RichWin師出一門,其核心技術(shù)自然也差不多。其對外宣傳采用獨特的"陷阱"
技術(shù)即動態(tài)修改Windows代碼,一直是筆者感興趣的地方。
EXEHDR是Microsoft Visual C++開發(fā)工具中很有用的一個程序,它可以檢查NE(New-Exe cutable)格式文件,用它來分析RichWin的WSENGINE.DLL或CStar的CHINESE.DLL,就會發(fā)現(xiàn)與眾不同的兩點(以CStar
1.20為例):
C:\CSTAR>exehdr chinese.dll /v
..................................
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 )
──動態(tài)漢化Windows技術(shù)的分析
四通利方(RichWin)、中文之星(CStar)是大家廣為熟知的漢化Windows產(chǎn)品,"陷阱"技術(shù)即動態(tài)修改Windows代碼,一直是其對外宣稱的過人技術(shù)。本文從Windows的模塊調(diào)用機制與重定位概念著手,介紹了"陷阱"技術(shù)的實現(xiàn),并給出了采用"陷阱"技術(shù)動態(tài)修改Windows代碼的示例源程序。
一、發(fā)現(xiàn)了什么?
筆者多年來一直從事Windows下的軟件開發(fā)工作,經(jīng)歷了Windows 2.0 、 3.0 、3.1 ,直至Windows 95、NT的成長過程,也遍歷了長青窗口、長城窗口、DBWin、CStar、RichWin等多個Windows漢化產(chǎn)品。從現(xiàn)在看來,影響也最為成功的,當推四通利方的RichWin;此外,中文之星CStar與RichWin師出一門,其核心技術(shù)自然也差不多。其對外宣傳采用獨特的"陷阱"
技術(shù)即動態(tài)修改Windows代碼,一直是筆者感興趣的地方。
EXEHDR是Microsoft Visual C++開發(fā)工具中很有用的一個程序,它可以檢查NE(New-Exe cutable)格式文件,用它來分析RichWin的WSENGINE.DLL或CStar的CHINESE.DLL,就會發(fā)現(xiàn)與眾不同的兩點(以CStar
1.20為例):
C:\CSTAR>exehdr chinese.dll /v
..................................
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 )