青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴(yán)以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

金山詞霸”屏幕取詞技術(shù)揭密(討論稿)

文章來源:http://blog.joycode.com/yaodong/articles/25506.aspx


這篇文章最早是發(fā)在北極星論壇的一系列帖子,那時候聞怡洋(好像他也是MVP)也在那里混
原始的帖子我已經(jīng)沒有了,但不知道是誰幫我收集整理了下來(非常感謝),我用google找到了
?
這是我進金山之前寫的,應(yīng)該不算泄露公司技術(shù)秘密吧 吐舌笑臉
而且這些現(xiàn)在看來似乎已經(jīng)有些過時了
?
那時討論的只是Win31和Win9x下的取詞實現(xiàn)
?
我到了金山之后不是負責(zé)取詞模塊,而是做UI,因為有個家伙比我更擅長做這種東西
他用SoftIce調(diào)試匯編代碼非常熟練,做逆向工程方面有過人的天分。
?
?
“亦東” 是我那時的筆名
?
?
“金山詞霸”屏幕取詞技術(shù)揭密(討論稿)
?
主題  屏幕取詞技術(shù)系列講座(一)
作者   亦東
很多人對這個問題感興趣。
原因是這項技術(shù)讓人感覺很神奇,也很有商業(yè)價值。
現(xiàn)在詞典市場金山詞霸占了絕對優(yōu)勢,所以再做字典也沒什么前途了。我就是這么認為的,所以我雖然掌握了這項技術(shù),卻沒去做字典軟件。只做了一個和詞霸相似的軟件自己用,本來想拿出來做共享軟件,但我的詞庫是“偷”來的,而且詞匯不多,所以也就算了,詞庫太小,只能取詞有什么用呢?而且詞霸有共享版的。
但既然很多人想了解這項技術(shù),我也不會保留。我準(zhǔn)備分多次講述這項技術(shù)的所有細節(jié)。
大約每周一兩次。想知道的人就常常來看看吧!
一.基礎(chǔ)知識
首先想編這種程序需要一些基礎(chǔ)知識。
會用Vc++,包括16/32位。
精通Windows API特別是GDI,KERNEL部分。
懂匯編語言,會用softice調(diào)試程序,因為這種程序最好用softice調(diào)試。
二.基本原理
在Window 3.x時代,windows系統(tǒng)提供的字符輸出函數(shù)只有很少的幾個。
TextOut
ExtTextOut
DrawText
......
其中DrawText最終是用ExtTextOut實現(xiàn)的。
所以Windows的所有字符輸出都是由調(diào)用TextOut和ExtTextOut實現(xiàn)的。因此,如果你可以修改這兩個函數(shù)的入口,讓程序先調(diào)用你自己的一個函數(shù)再調(diào)用系統(tǒng)的字符輸出,你就可以得到Windows所有輸出的字符了。
到了Windows95時代,原理基本沒變,但是95比3.x要復(fù)雜。開始的時候,一些在windows3.x下編寫的取詞軟件仍然可以是使用。但是后來出了個IE4,結(jié)果很多詞典軟件就因為不支持IE4而被淘汰了,但同時也給一些軟件創(chuàng)造了機會,如金山詞霸。其實IE4的問題并不復(fù)雜,只不過它的輸出的是unicode字符,是用TextOutW和ExtTextOutW輸出的。知道了這一點,只要也截取就可以了。不過實現(xiàn)方法復(fù)雜一點,以后會有詳細講解?,F(xiàn)在又出了個IE5,結(jié)果詞霸也不好用了,微軟真是#^@#$%$*&^&#@#@..........
我研究后找到了一種解決辦法,但還有些問題,有時會取錯,正在繼續(xù)研究,希望大家共同探討。
另外還有WindowsNT,原理也是一樣,只是實現(xiàn)方法和95下完全不同。
三.技術(shù)要點
要實現(xiàn)取詞,主要要解決以下技術(shù)問題。
1.截取API入口,獲得API的參數(shù)。
2.安全地潛入Windows內(nèi)部,良好地兼容Windows的各個版本
3.計算鼠標(biāo)所在的單詞和字母。
4.如果你在Window95下,做32位程序,還涉及Windows32/16混合編程的技術(shù)。
今天先到這里吧!最好準(zhǔn)備一份softice for 95/98和金山詞霸,讓我們先來分析一下別人是怎么做的。
歡迎與我聯(lián)系
E-Mail:yeedong@163.net
主題  屏幕取詞技術(shù)系列講座(二)
作者   亦東
很抱歉讓大家久等了!
我看了一些人的回帖,發(fā)現(xiàn)很多人對取詞的原理還是不太清楚。
首先我來解釋一下hook問題。詞霸中的確用到了hook,而且他用了兩種hook其中一種是Windows標(biāo)準(zhǔn)hook,通過SetWindowHook安裝一個回調(diào)函數(shù),它安裝了一個鼠標(biāo)hook,是為了可以及時響應(yīng)鼠標(biāo)的消息用的和取詞沒太大關(guān)系。
另一種鉤子是API鉤子,這才是取詞的核心技術(shù)所在。他在TextOut等函數(shù)的開頭寫了一個jmp語句,跳轉(zhuǎn)到自己的代碼里。
你用softice看不到這個跳轉(zhuǎn)語句是因為它只在取詞的一瞬間才存在,平時是沒有的。
你可以在TextOut開頭設(shè)一個讀寫斷點
bpm textout
再取詞,就會找到詞霸用來寫鉤子的代碼了。
/**********************************
所以我在次強調(diào),想學(xué)這種技術(shù)一定要懂匯編語言和熟練使用softice.
**********************************/
至于從cjktl95中dump出來的未公開函數(shù)是和Windows32/16混合編程有關(guān)的,以后我會提到他們。
我先來講述取詞的過程,
0 判斷鼠標(biāo)是否在一個地方停留了一段時間
1 取得鼠標(biāo)當(dāng)前位置
2 以鼠標(biāo)位置為中心生成一個矩形
3 掛上API鉤子
4 讓這個矩形產(chǎn)生重畫消息
5 在鉤子里等輸出字符
6 計算鼠標(biāo)在哪個單詞上面,把這個單詞保存下來
7 如果得到單詞則摘掉API鉤子,在一段時間后,無論是否得到單詞都摘掉API鉤子
8 用單詞查詞庫,顯示解釋框。
很多步驟實現(xiàn)起來都有一些難度,所以在中國可以做一個完善的取詞詞典的人屈指可數(shù)。
其中0,1,2,7,8比較簡單就不提了。
先說如何掛鉤子:
所謂鉤子其實就是在WindowsAPI入口寫一個JMP XXXX:XXXX語句,跳轉(zhuǎn)到自己的代碼里。
步驟如下:
1.取得Windows API入口,用GetProcAddress實現(xiàn)
2.保存API入口的前五個字節(jié),因為JMP是0xEA,地址是4個字節(jié)
3.寫入跳轉(zhuǎn)語句
這步最復(fù)雜
Windows的代碼段本來是不可以寫的,但是Microsoft給自己留了個后門。
有一個未公開函數(shù)是AllocCsToDsAlias,
UINT WINAPI ALLOCCSTODSALIAS(UINT);
你可以取到這個函數(shù)的入口,把API的代碼段的選擇符(要是不知道什么是選擇符,就先去學(xué)學(xué)保護模式編程吧)傳給他,他會返回一個可寫的數(shù)據(jù)段選擇符。這個選擇符用完要釋放的。用新選擇符和API入口的偏移量合成一個指針就可以寫windows的代碼段了。
這就是取詞技術(shù)的最核心的東東,不止取詞,連外掛中文平臺全屏漢化都是使用的這種技術(shù)?,F(xiàn)在知道為什么這么簡單的幾句話卻很少知道了吧?因為太多的產(chǎn)品使用他,太多的公司靠他賺錢了。
這些公司和產(chǎn)品有:中文之星,四通利方,南極星,金山詞霸,實達銘泰的東方快車,roboword,譯典通,即時漢化專家等等等等。。。。還有至少20多家小公司。他們的具體實現(xiàn)雖然不同,但大致原理是相同的。
我這些都是隨手寫的,也沒有提綱之類的東西,以后如果有機會我會整理一下,大家先湊合著看吧!xixi...
?
主題  關(guān)于屏幕取詞的討論(三)
作者   亦東

讓大家久等,很抱歉,前些時候工作忙硬盤又壞了,太不幸了。
這回來點真格的。
咱們以截取TextOut為例。
下面是代碼:
//截取TextOut?
typedef?UINT?(WINAPI*?ALLOCCSTODSALIAS)(UINT);?
ALLOCCSTODSALIAS?AllocCsToDsAlias;?
BYTE?NewValue[
5];//保存新的入口代碼?
BYTE?OldValue[5];//API原來的入口代碼?
unsigned?char?*?Address=NULL;//可寫的API入口地址?
UINT?DsSelector=NULL;//指向API入口的可寫的選擇符?
WORD?OffSetEntry=NULL;//API的偏移量?
BOOL?bHookAlready?=?FALSE;?//是否掛鉤子的標(biāo)志?
BOOL?InitHook()?
{?
HMODULE?hKernel,hGdi;?
hKernel?
=?GetModuleHandle("Kernel");?
if(hKernel==NULL)?
return?FALSE;?
AllocCsToDsAlias?
=?(ALLOCCSTODSALIAS)GetProcAddress(hKernel,"AllocCsToDsAlias");//這是未公開的API所以要這樣取地址?
if(AllocCsToDsAlias==NULL)?
return?FALSE;?
hGdi?
=?GetModuleHandle("Gdi");?
if(hmGdi==NULL)?
return?FALSE;?
FARPROC?Entry?
=?GetProcAddress(hGdi,"TextOut");?
if(Entry==NULL)?
return?FALSE;?
OffSetEntry?
=?(WORD)(FP_OFF(Entry));//取得API代碼段的選擇符?
DsSelector?=?AllocCsToDsAlias(FP_SEG(Entry));//分配一個等同的可寫的選擇符?
Address?=?(unsigned?char*)MK_FP(DsSelector,OffSetEntry);//合成地址?
NewValue[0]=0xEA;?
*((DWORD*)(NewValue+1))?=?(DWORD)MyTextOut;?
OldValue[
0]=Address[0];?
*((DWORD*)(OldValue+1))?=?*((DWORD*)(Address+1));?
}
?
BOOL?ClearHook()?
{?
if(bHookAlready)?
HookOff();?
FreeSelector(DsSelector);?
}
?
BOOL?HookOn()?
{?
if(!bHookAlready){?
for(int?i=0;i<5;i++){?
Address[i]
=NewValue[i];?
}
?
bHookAlready
=TRUE;?
}
?
}
?
BOOL?HookOff()?
{?
if(bHookAlready){?
for(int?i=0;i<5;i++){?
Address[i]
=OldValue[i];?
}
?
bHookAlready
=FALSE;?
}
?
}
?
//鉤子函數(shù),一定要和API有相同的參數(shù)和聲明?
BOOL?WINAPI?MyTextOut(HDC?hdc,int?nXStart,int?nYStart,LPCSTR?lpszString,UINT?cbString)?
{?
BOOL?ret;?
HookOff();?
ret?
=?TextOut(hdc,nXStart,nYStart,lpszString,cbString);//調(diào)原來的TextOut?
HookOn();?
return?ret;?
}
?
上面的代碼是一個最簡單的掛API鉤子的例子,我要提醒大家的是,這段代碼是我憑記憶寫的,我以前的代碼丟了,我沒有編譯測試過
因為我沒有VC++1.52.所以代碼可能會有錯。
建議使用Borland c++,按16位編譯。
如果用VC++1.52,則要改個選項
在VC++1.52的Option里,有個內(nèi)存模式的設(shè)置,選大模式,和"DS!=SS DS Load on Function entry.",切記,否則會系統(tǒng)崩潰。
有什么不明白的可以給我寫信
yeedong@163.net

posted on 2006-08-25 00:06 楊粼波 閱讀(594) 評論(0)  編輯 收藏 引用 所屬分類: C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区高清在线观看| 亚洲国产天堂久久国产91| 欧美国产免费| 欧美电影美腿模特1979在线看| 久久夜色精品国产欧美乱| 欧美成年人视频网站欧美| 欧美日韩妖精视频| 欧美性色综合| 伊人久久婷婷色综合98网| 亚洲精品视频二区| 欧美专区在线观看| 99精品国产在热久久下载| 亚洲免费福利视频| 国产精品一级二级三级| 欧美日韩蜜桃| 欧美了一区在线观看| 国产精品爱久久久久久久| 在线观看不卡| 亚洲制服欧美中文字幕中文字幕| 久久乐国产精品| 亚洲美女淫视频| 在线看不卡av| 欧美精品入口| 国产一区二区三区电影在线观看| 亚洲精品日产精品乱码不卡| 亚洲伊人久久综合| 国产精品久久久一区麻豆最新章节| 国产情侣久久| 亚洲女女女同性video| 久久亚洲精品视频| 欧美一区二区三区男人的天堂 | 亚洲欧美欧美一区二区三区| 久久噜噜噜精品国产亚洲综合| 亚洲欧美在线视频观看| 日韩一级在线观看| 欧美激情影音先锋| 久久国产精品久久久久久| 欧美午夜精品理论片a级大开眼界| 亚洲丶国产丶欧美一区二区三区| 久久综合九色综合久99| 久久激情五月激情| 亚洲国产精品va在线看黑人动漫| 久久精品亚洲一区二区三区浴池| 国产一区二区三区久久| 欧美成人亚洲| 国产精品mv在线观看| 久久精品一区二区三区四区| 久久久成人网| 亚洲天堂av电影| 欧美一区91| 一本大道av伊人久久综合| 亚洲欧美在线一区二区| 亚洲高清在线| 亚洲激情小视频| 99视频精品全部免费在线| 国产亚洲一级| 99成人在线| 亚洲免费高清视频| 久久久国产精品一区| 亚洲午夜羞羞片| 欧美大片国产精品| 久久久久久久综合| 国产伦一区二区三区色一情| 欧美韩国日本综合| 好吊成人免视频| 欧美一区二区在线| 午夜影院日韩| 国产精品久久| 亚洲一区欧美| 亚洲欧美日韩一区二区| 国产精品久久久久永久免费观看| 亚洲国产欧美精品| 亚洲精品久久久一区二区三区| 久久久亚洲欧洲日产国码αv| 欧美伊人久久久久久久久影院| 国产精品超碰97尤物18| 亚洲曰本av电影| 欧美在线视频免费| 国产在线不卡| 猛男gaygay欧美视频| 亚洲激情第一页| 亚洲影院色在线观看免费| 国产日韩精品入口| 欧美一区二区成人| 免费视频久久| 亚洲免费一在线| 在线观看日韩| 欧美性大战久久久久久久蜜臀| 午夜影院日韩| 亚洲国内欧美| 久久综合色影院| 欧美日韩大片| 久久www成人_看片免费不卡| 亚洲福利久久| 欧美在线视频全部完| …久久精品99久久香蕉国产 | 国产精品毛片a∨一区二区三区|国 | 国产精品亚洲第一区在线暖暖韩国| 性欧美办公室18xxxxhd| 在线视频一区二区| 亚洲国产精选| 欧美成人一区在线| 久久久久se| 亚洲欧美自拍偷拍| 一区二区三区精品视频在线观看| 国产一区二区中文| 国产伊人精品| 国产一区二区成人| 激情亚洲网站| 国内视频一区| 国语精品中文字幕| 在线欧美影院| 激情小说亚洲一区| 在线日韩精品视频| 亚洲激情社区| 一区二区欧美日韩| 亚洲欧美国产高清| 欧美一区二区三区另类| 久久先锋影音av| 亚洲国产成人av在线| 99综合视频| 欧美在线一二三区| 免费精品视频| 国产精品乱码久久久久久| 狠狠做深爱婷婷久久综合一区 | 国产精品草莓在线免费观看| 欧美四级剧情无删版影片| 国产欧美精品一区aⅴ影院| 国产在线观看精品一区二区三区 | 亚洲一区久久| 久久久久久久高潮| 亚洲精品乱码久久久久久久久| 亚洲免费在线观看视频| 欧美mv日韩mv国产网站| 国产日韩视频| 在线一区视频| 亚洲国产天堂久久综合| 久久成人综合视频| 国产麻豆精品视频| 亚洲小说欧美另类社区| 日韩一本二本av| 欧美黄色免费网站| 黄色一区二区三区| 久久久精品国产免大香伊 | 99精品99| 欧美日韩ab| 亚洲午夜久久久久久久久电影网| 亚洲第一精品夜夜躁人人爽| 六月婷婷一区| 亚洲美女在线看| 亚洲精品美女在线观看播放| 欧美激情精品久久久久久大尺度| 亚洲欧洲日本国产| 亚洲免费观看视频| 国产精品乱看| 欧美jizzhd精品欧美巨大免费| 久久影视精品| 亚洲午夜精品一区二区| 亚洲性视频网站| 在线观看视频一区二区| 亚洲国产欧美在线| 国产欧美日韩激情| 在线欧美亚洲| 亚洲免费观看高清完整版在线观看熊 | 欧美在线三级| 久久精品理论片| 日韩视频一区二区三区| 亚洲一区二区视频在线观看| 伊人一区二区三区久久精品| 亚洲精品免费网站| 好吊色欧美一区二区三区视频| 亚洲精选大片| 黄色成人小视频| 在线亚洲自拍| 亚洲青涩在线| 久久久www成人免费精品| 一区二区成人精品| 欧美日本韩国一区| 亚洲二区视频在线| 一区二区三区在线不卡| 亚洲天堂成人| 一区二区三区高清在线| 欧美片在线观看| 亚洲电影网站| 亚洲精品在线电影| 欧美第一黄网免费网站| 亚洲国产精品一区制服丝袜| 激情综合网激情| 可以免费看不卡的av网站| 欧美国产精品中文字幕| 在线观看的日韩av| 浪潮色综合久久天堂| 欧美激情精品久久久久久蜜臀| 国产性猛交xxxx免费看久久| 欧美一二三区精品| 蜜臀99久久精品久久久久久软件| 永久免费视频成人| 欧美激情视频一区二区三区免费 | 国产亚洲精品福利| 久热精品视频|