关于金山词霸的屏幕取词1

本文深入探讨了Windows系统中屏幕取词技术的原理,主要讲解了如何通过API Hook来实现这一功能。作者指出,关键在于修改TextOut等字符输出函数的入口,从而在文字输出时获取相关信息。文章还提到了金山词霸的实现方式,并讨论了在不同Windows版本下实现的差异,如32位和16位的区别,以及在Windows 95及后续版本中的兼容性问题。作者强调,掌握汇编语言和Softice调试器对于理解这一技术至关重要。
摘要由CSDN通过智能技术生成
“金山词霸”屏幕取词技术揭密(讨论稿) (17千字)
发信人:5,555
时 间:2001-11-1 9:30:12
详细信息:

“金山词霸”屏幕取词技术揭密(讨论稿)



主题  屏幕取词技术系列讲座(一)
作者   亦东

很多人对这个问题感兴趣。
原因是这项技术让人感觉很神奇,也很有商业价值。
现 在词典市场金山词霸占了绝对优势,所以再做字典也没什么前途了。我就是这么认为的,所以我虽然掌握了这项技术,却没去做字典软件。只做了一个和词霸相似的 软件自己用,本来想拿出来做共享软件,但我的词库是“偷”来的,而且词汇不多,所以也就算了,词库太小,只能取词有什么用呢?而且词霸有共享版的。
但既然很多人想了解这项技术,我也不会保留。我准备分多次讲述这项技术的所有细节。
大约每周一两次。想知道的人就常常来看看吧!

一.基础知识
首先想编这种程序需要一些基础知识。
会用Vc++,包括16/32位。
精通Windows API特别是GDI,KERNEL部分。
懂汇编语言,会用softice调试程序,因为这种程序最好用softice调试。

二.基本原理
在Window 3.x时代,windows系统提供的字符输出函数只有很少的几个。
TextOut
ExtTextOut
DrawText
......
其中DrawText最终是用ExtTextOut实现的。

所以Windows的所有字符输出都是由调用TextOut和ExtTextOut实现的。因此,如果你可以修改这两个函数的入口,让程序先调用你自己的一个函数再调用系统的字符输出,你就可以得到Windows所有输出的字符了。

到 了Windows95时代,原理基本没变,但是95比3.x要复杂。开始的时候,一些在windows3.x下编写的取词软件仍然可以是使用。但是后来出 了个IE4,结果很多词典软件就因为不支持IE4而被淘汰了,但同时也给一些软件创造了机会,如金山词霸。其实IE4的问题并不复杂,只不过它的输出的是 unicode字符,是用TextOutW和ExtTextOutW输出的。知道了这一点,只要也截取就可以了。不过实现方法复杂一点,以后会有详细讲 解。现在又出了个IE5,结果词霸也不好用了,微软真是#^@#$%$*&^&#@#@..........
我研究后找到了一种解决办法,但还有些问题,有时会取错,正在继续研究,希望大家共同探讨。

另外还有WindowsNT,原理也是一样,只是实现方法和95下完全不同。

三.技术要点
要实现取词,主要要解决以下技术问题。
1.截取API入口,获得API的参数。
2.安全地潜入Windows内部,良好地兼容Windows的各个版本
3.计算鼠标所在的单词和字母。
4.如果你在Window95下,做32位程序,还涉及Windows32/16混合编程的技术。

今天先到这里吧!最好准备一份softice for 95/98和金山词霸,让我们先来分析一下别人是怎么做的。

欢迎与我联系
E-Mail:yeedong@163.net


Guest  1999-04-30 16:00:48 
请问用VC自己的DEBUGGER不行吗?为什么要用SOFTICE? 我没用过SOFTICE,它有什么特别之处吗?


葫芦  1999-04-30 19:15:03 
本人对这个问题也有兴趣,以前研究过16位版本截获TextOut和ExtTextOut的过程;

但对金山词霸,用Softice跟踪,发现SetWindowsHookEx在程序装载时就安装了鼠标钩子,暂停取字/恢复取字只是设置的内部变量,但本人发现金山词霸并没有象16位版本那样修改TextOut和ExtTextOut。


苍蝇 (555021552)  1999-05-02 08:56:57 
有哪位大虾愿意先介绍一下SOFTICE?


蟑螂  1999-05-04 13:58:22 
把 金山词霸的cjktl95.dll用tdump分析可以看到它根本用的不是hook,而是用了一些kernel32.dll中的Win32 SDK里没有包含的函数,使用这些函数来替换改写原先的几个GDI函数。看来是Win95未公开的一些东西。有些人知道,为什么不肯说出来呢?未必见得多 么高深!



葫芦  1999-05-05 23:28:07 
你可能没有研究过它的目标代码,怎么能断言没有使用hook呢? 其实金山词霸一运行就安装了鼠标钩子。


亦东  1999-05-07 09:52:42 
未必见得多么高深?
你知道有些人是怎么知道这些Win95未公开的东西的吗?你不会是以为微软偷偷告诉他们的吧?其实他们大多和我一样是用softice自己跟踪Win95跟出来的。

还有你从cjktl95.dll里tdump出的未公开函数和hook无关,那是做别的用的。
setwindowshook在user里


亦东  1999-05-10 16:16:14 
从cjktl95.dll里tdump出的未公开函数和32位和16位之间的互调有关。

主题  屏幕取词技术系列讲座(二
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值