"陷阱"技术探秘──动态汉化Windows技术的分析 "N|gU;~W
l_`DQ8L`
四通利方(RichWin)、中文之星(CStar)是大家广为熟知的汉化Windows产品,"陷阱"技术即动态修改Windows代码,一直是其对外宣称的过人技术。本文从Windows的模块调用机制与重定位概念着手,介绍了"陷阱"技术的实现,并给出了采用"陷阱"技术动态修改Windows代码的示例源程序。 $u`v
k|\R
4z$}e-
一、发现了什么? yhBf %m
笔者多年来一直从事Windows下的软件开发工作,经历了Windows 2.0 、 3.0 、3.1 ,直至Windows 95、NT的成长过程,也遍历了长青窗口、长城窗口、DBWin、CStar、RichWin等多个Windows汉化产品。从现在看来,影响最大也最为成功的,当推四通利方的RichWin;此外,中文之星CStar与RichWin师出一门,其核心技术自然也差不多。其对外宣传采用独特的"陷阱" 技术即动态修改Windows代码,一直是笔者感兴趣的地方。 a/(IvOy#6
EXEHDR是Microsoft Visual C++开发工具中很有用的一个程序,它可以检查NE(New-Exe cutable)格式文件,用它来分析RichWin的WSENGINE.DLL或CStar的CHINESE.DLL,就会发现与众不同的两点(以CStar 1.20为例): @aX$}
@&7|Laa
C:\CSTAR>exehdr chinese.dll /v U<|h4'(@L
.................................. P<1ZpL
;g
M$%!&
6 type offset target BRu/pyxG
BASE 060a seg 2 offset 0000 mF|7:zSo
PTR 047e imp GDI.GETCHARABCWIDTHS [nBdq"K
PTR 059b imp GDI.ENUMFONTFAMILIES !x, ;&
PTR 0451 imp DISPLAY.14 ( EXTTEXTOUT )
pjh o#yP
PTR 0415 imp KEYBOARD.4 ( TOASCII ) Tn'_{@E;
PTR 04ba imp KEYBOARD.5 ( ANSITOOEM ) Gxj3/&]^Y
PTR 04c9 imp KEYBOARD.6 ( OEMTOANSI ) 13X0LN
PTR 04d8 imp KEYBOARD.134( ANSITOOEMBUFF ) 3Xun>ZQ-
PTR 05f5 imp USER.430 ( LSTRCMP ) s?j` _B
PTR 04e7 imp KEYBOARD.135( OEMTOANSIBUFF ) C6-71`C0
PTR 0514 imp USER.431 ( ANSIUPPER ) .%iJin"
PTR 0523 imp USER.432 ( ANSILOWER ) ~gjREl,+D#
PTR 05aa imp GDI.56 ( CREATEFONT ) H /kSFf{
PTR 056e imp USER.433 ( ISCHARALPHA ) T==(Pw7R7
PTR 05b9 imp GDI.57 ( CREATEFONTINDIRECT ) 5,pKv
PTR 057d imp USER.434 ( ISCHARALPHANUMERIC ) :Ur=}@Dj
PTR 049c imp USER.179 ( GETSYSTEMMETRICS ) ]nEZQ+F
PTR 0550 imp USER.435 ( ISCHARUPPER ) ?\eq!bu
PTR 055f imp USER.436 ( ISCHARLOWER ) vXio /m
PTR 0532 imp USER.437 ( ANSIUPPERBUFF ) 6axDuwQ
PTR 0541 imp USER.438 ( ANSILOWERBUFF ) Ckelr
PTR 05c8 imp GDI.69 ( DELETEOBJECT ) 7i,Z c]
PTR 058c imp GDI.70 ( ENUMFONTS ) kCq]#e~wq
PTR 04ab imp KERNEL.ISDBCSLEADBYTE 2L'vB1`
PTR 05d7 imp GDI.82 ( GETOBJECT ) wGXnS"L!
PTR 048d imp KERNEL.74 ( OPENFILE ) 8\85Wk{b
PTR 0460 imp GDI.91 ( GETTEXTEXTENT ) [ NSsT>C
PTR 05e6 imp GDI.92 ( GETTEXTFACE ) c2,1d`
PTR 046f imp GDI.350 ( GETCHARWIDTH ) ^YpA@`n
PTR 0442 imp GDI.351 ( EXTTEXTOUT ) bg8<}~zg
PTR 0604 imp USER.471 ( LSTRCMPI ) `?X=@
PTR 04f6 imp USER.472 ( ANSINEXT ) )AX0x1I|E
PTR 0505 imp USER.473 ( ANSIPREV ) 6"d^4L?
PTR 0424 imp USER.108 ( GETMESSAGE ) H|uvc vf
PTR 0433 imp USER.109 ( PEEKMESSAGE ) -RSPYQjz
<NLor55.]
35 relocations T2nbU6H
7H1 ii
(括号内为笔者加上的对应Windows API函数。) b`4R`mo
第一,在数据段中,发现了重定位信息。 gD[Fkq$]
第二,这些重定位信息提示的函数,全都与文字显示输出和键盘、字符串有关。也就是说汉化Windows,必须修改这些函数。 }P5zf$
在这非常特殊的地方,隐藏着什么呢?毋庸置疑,这与众不同的两点,对打开"陷阱"技术之门而言,不是金钥匙,也是敲门砖。
_>G=v!
4|&