设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> Visual C++ >> 陷阱技术探秘----动态汉化Windows技术的分析
精品推荐
Visual C++点击TOP10
·用WINSOCK实现聊天室的VC++程序设计
·利用mfc编写activex控件
·用vc实现生产者消费者问题
·DirectX8.0
·C/C++ 大量经典编程书籍下载
·VC快捷键大全
·CreateFileMapping的MSDN翻译和使用心得
·Windows环境下的麦克风录音系统
·挂钩Windows API
·如何开发OPC Server
编程开发点击TOP10
·数字小键盘指法练习
·用C语言编通讯录程序(初学者级别的)
·ASP.NET 程序中常用的三十三种代码
·我写的Java学生成绩管理系统源代码
·CHK文件恢复工具
·Modem 常用AT指令集
·java笔试题
·异常java.sql.SQLException: Io exception:The Network Adapter could not establish connection
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
精选专题

陷阱技术探秘----动态汉化Windows技术的分析

作者: 来源:网络文章 时间:2005-12-13 18:42:42

陷阱技术探秘----动态汉化Windows技术的分析(2) 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)三种,虽然这几种模式各不相同,但其核心模块的调用关系却是完全一致的。
主要的三个模块,有如下的关系:

KERNEL是Windows系统内核,它不依赖其它模块。

GDI是Windows图形设备接口模块,它依赖于KERNEL模块。

USER是Windows用户接口服务模块,它依赖于KERNEL,GDI模块及设备驱动程序等所有模块。
这三个模块,实际上就是Windows的三个动态连接库,在系统的存在形式如下,KERNEL有三种不同形式,Kernel.exe(实模式),Krnl286.exe(标准模式),Krnl386.
exe(386增强模式);GDI模块是Gdi.exe;USER模块是User.exe,虽然文件名都以EXE为扩展名,但它们实际都是动态连接库。

同时,几乎所有的API函数都隐藏在这三个模块中。用EXEHDR对这三个模块分析,就可列出一大堆你所熟悉的WindowsAPI函数。

以GDI模块为例,

C:\WINDOWS\SYSTEM>exehdr gdi.exe
EXPorts:
ord seg offset name
............
351 1923eEXTTEXTOUT exported, shared data
56 319e1CREATEFONT exported, shared data
............

至此,你已能从Windows纷繁复杂的系统中,理出一些头续来。下面,再引入一个重要概念——重定位。
一个Windows执行程序对调用API函数,或对其它动态库的调用,在程序装入内存前,都是一些不能定位的动态连接,当程序调入内存时,这些远调用都需要重新定位,重新定位的依据就是重定位表。在Windows执行程序(包括动态库)的每个段后面,通常都跟有这样一个重定位表。重定位包含调用函数所在模块,函数序列号,以及定位在模块中的位置。

例如,用EXEHDR/v分析CHINESE.DLL得到

6 type offset target
..........
PTR 0442imp GDI.351
..........

就表明,在本段的0442H偏移处,调用了GDI的第351号函数。如果在0442H处是0000:FFFF,则表示,本段内仅此一处调用了GDI.351函数,否则,表明了本段内还有一处调用此函数,调用的位置就是0442H处所指向的内容,实际上重定位表只含有引用位置的链表的链头。那么,GDI.351是一个什么函数呢?还是用EXEHDR对GDI.EXE作一分析,就可得出,在GDI的出口(Export)函数中,第351号是ExtTextOut。

共10页 9 7 [1] [2] [3] [4] [5] [6] [7] [8] [9] [108 :>

陷阱技术探秘----动态汉化Windows技术的分析 相关文章:
陷阱技术探秘----动态汉化Windows技术的分析 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com