陷阱技术探秘----动态汉化Windows技术的分析(6) 修改Windows代码,一直是作者感兴趣的地方。 EXEHDR是MicrosoftVisualC++开发工具中很有用的一个程 序,它可以检查NE(New_Executable)格式文件,用它来分析RichWin 的WSENGINE.DLL或CStar的CHINESE.DLL就会发现与众不同的两点: ( 以CStar 1.20 为 例) C:\CSTAR>exehdr chinese.dll /v .................................. 6 type offset target BASE060aseg 2 offset 0000 PTR 047eimp GDI.GETCHARABCWIDTHS PTR 059bimp GDI.ENUMFONTFAMILIES PTR 0451imp DISPLAY.14( EXTTEXTOUT ) PTR 0415imp KEYBOARD.4( TOASCII ) PTR 04baimp KEYBOARD.5( ANSITOOEM ) PTR 04c9imp KEYBOARD.6( OEMTOANSI ) PTR 04d8imp KEYBOARD.134( ANSITOOEMBUFF) PTR 05f5imp USER.430( LSTRCMP ) PTR 04e7imp KEYBOARD.135( OEMTOANSIBUFF) PTR 0514imp USER.431( ANSIUPPER) PTR 0523imp USER.432( ANSILOWER ) PTR 05aaimp GDI.56( CREATEFONT) PTR 056eimp USER.433( ISCHARALPHA ) PTR 05b9imp GDI.57( CREATEFONTINDIRECT ) PTR 057dimp USER.434( ISCHARALPHANUMERIC ) PTR 049cimp USER.179( GETSYSTEMMETRICS ) PTR 0550imp USER.435( ISCHARUPPER) PTR 055fimp USER.436( ISCHARLOWER) PTR 0532imp USER.437( ANSIUPPERBUFF) PTR 0541imp USER.438( ANSILOWERBUFF) PTR 05c8imp GDI.69( DELETEOBJECT ) PTR 058cimp GDI.70( ENUMFONTS ) PTR 04abimp KERNEL.ISDBCSLEADBYTE PTR 05d7imp GDI.82( GETOBJECT) PTR 048dimp KERNEL.74 ( OPENFILE ) PTR 0460imp GDI.91( GETTEXTEXTENT) PTR 05e6imp GDI.92( GETTEXTFACE) PTR 046fimp GDI.350 ( GETCHARWIDTH ) PTR 0442imp GDI.351 ( EXTTEXTOUT ) PTR 0604imp USER.471( LSTRCMPI ) PTR 04f6imp USER.472( ANSINEXT ) PTR 0505imp USER.473( ANSIPREV ) PTR 0424imp USER.108( GETMESSAGE ) PTR 0433imp USER.109( PEEKMESSAGE) 35 relocations *******扩号内为作者加上的对应WindowsAPI函数 第一,在数据段中,发现了重定位信息。 第二,这些重定位信息提示的函数,全都与文字显示 输出和键盘,字符串有关。也就是说汉化Windows,必须修改这些函数。 在这非常特殊的地方,隐藏着什么呢?无庸致疑,这与众不同的两点,对打开“陷阱”技术之门而言,不是金钥匙,也是敲门砖。 二、Windows的模块调用机制与重定位概念 为了深入探究“陷阱”技术,我们先来介绍Windows的模块调用机制。Windows的运行分实模式(RealMode),标准模式(StandMode)和增强模式(386EnhancedMode)三种,虽然这几种模式各不相同,但其核心模块的调用关系却是完全一致的。