Danh mục tài liệu

Hướng dẫn về kỹ thuật hook

Số trang: 8      Loại file: doc      Dung lượng: 61.00 KB      Lượt xem: 23      Lượt tải: 0    
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Có bao giờ các bạn đặt ra câu hỏi là tại sao chúng ta có thể gõ tiếng Việt được trongMicrosoft Word và các phần mềm soạn thảo văn bản khác hay không? Rõ ràng là chúngta không thể can thiệp vào mã của Microsoft Word để sửa thành tiếng Việt khi chúng tamuốn soạn thảo văn bản tiếng Việt. Vậy thì tại sao các phần mềm như VietKey, VNITanKylại có thể làm được điều này? Câu trả lời là sử dụng các Hook. ...
Nội dung trích xuất từ tài liệu:
Hướng dẫn về kỹ thuật hook CóbaogiờcácbạnđặtracâuhỏilàtạisaochúngtacóthểgõtiếngViệtđượctrongMicrosoftWordvàcácphầnmềmsoạnthảovănbảnkháchaykhông?RõrànglàchúngtakhôngthểcanthiệpvàomãcủaMicrosoftWordđểsửathànhtiếngViệtkhichúngtamuốnsoạnthảovănbảntiếngViệt.VậythìtạisaocácphầnmềmnhưVietKey,VNITanKylạicóthểlàmđượcđiềunày?CâutrảlờilàsửdụngcácHook.Trongbàiviếtnày,chúngtasẽcùngtìmhiểuxemHooklàgìmàcóthểlàmđượcđiềuthầnkỳnhưvậy!TruớckhichúngtatìmhiểuvềHook,chúngtanhắclạimộtchútvềquátrìnhxửlýthôngđiệpcủahệđiềuhànhWindowsQuátrìnhxửlýthôngđiệpcủaWindowsdiễnranhưsau:Đầutiêntừcáchànhđộngcủanguờidùngnhưlà:clickchuột,nhấnphím,..thìhệđiềuhànhsẽchuyểncáchànhđộngtươngứngthànhcácthôngđiệp(message).RồisauđóWindowsđẩycácmessagenàyvàohàngđợicủahệthống(systemqueue)vàtừsystemqueuecácmessageđuợcchuyểnchocáchàngđợicủaứngdụng(applicationqueue).Từlúcnàycácứngdụngsẽlấycácmessagenàytronghàngđợiứngdụngcủamìnhđểxửlý(thôngquacácvònglặpchờthôngđiệpmessageloop).1.Hooklàgì?Hooklàcơchếmànhờđómộthàmcóthểchặncácsựkiện(message,mouseactions,keystrokes)trướckhichúngđượcgửiđếnhàngđợicủaứngdụng.Cáchàmnàycóthểthựchiệnmộtsốthaotáctrênsựkiện,vàtrongmộtvàitrườnghợpcóthểđịnhnghĩalạihoặchủybỏsựkiệnmànóchặnđược.MộtđiểmquantrọngcầnlưuýlàcáchàmnàyđượcgọibởichínhWindowschứkhôngphảibởiứngdụngcủachúngta.Windowshỗtrợnhiềuloạihookkhácnhau,mỗiloạinhắmđếnviệcchặnbắtmộtloạithôngđiệpcụthểnàođó.Vídụ,mộtứngdụngcóthểsửdụngWH_KEYBOARDđểgiámsátsựdichuyểncủathôngđiệpbànphímtronghệthống.NhờloạihooknàymàmộtchươngtrìnhcóthểcanthiệpvàovàtạorakhảnănggõtiếngViệtkhisoạnthảovănbản.MộtloạihookkháclàWH_MOUSEchophéptheodõicácthôngđiệpliênquanđếnhoạtđộngcủaconchuột.HìnhtrênmôtảquátrìnhxửlýthôngđiệpcủaWindowskhicósửdụngcácHook.Thìnhưtrênhìnhvẽchúngtacóthểthấyrõràngrằng,mộtkhichúngtasửdụngcácHookthìcácHooknàysẽđượcđặtnằmgiữaSystemQueuevàApplicationQueue.2.CơchếhoạtđộngcủaHookHệthốngduytrìmộtchuỗihook(hookchain)chomỗiloạihook.Mỗichuỗinàylàmộtdanhsáchliênkếtcáccontrỏđặtbiệt,contrỏnàychínhlàcáchàmcallbackcủaứngdụngcósẵn,nócònđượcgọilàhàmhook(hàmlọc,filterfunction)Khicómộtthôngđiệpđượcsinhrathuộcmộtloạihooknàođó,nósẽđượchệthốngđẩyđivàohàmhookđầutiêntrongchuỗi,lầnlượttừnghàmmột(quatấtcảcáchooktrongchuỗi).Côngviệccủahàmhookcóthểphứctạphayđơngiảntùythuộcvàotừngloạihook.Hàmhookchomộtsốloạichỉcóthểgiámsát,sốkháccóthểsửađổithôngđiệphoặcdừnglạiviệcxửlýthôngđiệptrênchuỗihooktrướckhichúngđếncáchooktiếptheohoặcđếncửasổđích.3.ỨngdụngcủaHookChophéptạoracácchươngtrìnhhỗtrợgõtiếngViệtnhư:VietkeyChophéptạoracácchuơngtrìnhTesttựđộngphầnmềm(bằngcáchphátsinhcácsựkiệnphím,chuộtgiốngnhưngườidùngđangnhậpvào).Chophépthayđổigiaodiệncácứngdụngđangchạy.Chophépxemphầntrợgiúpcủacácứngdụngbằngviệcnhấnmộtphímnàođó,vídụnhưnhấnF1chẳnghạnVànhiềuứngdụngkhácnữatùyvàotrítưởngtượngcủacácbạn!…4.CàiđặtHookGiaodiệnlậptrìnhứngdụng(API)củaWindowscungcấp3hàmđểthaotácvớihook:•SetWindowsHookEx•UnhookWindowsHookEx•CallNextHookExa)CàiđặtmộtFilterFunctionvàochuỗicácFilterFunctioncủamộthookTácvụnàyđượcthựchiệnthôngquahàmSetWindowsHookEx,khaibáocủahàmnàynhưsau:HHOOKSetWindowsHookEx(intidHook,HOOKPROClpfn,HINSTANCEhMod,DWORDdwThreadId);Ýnghĩacủatừngthamsố:idHook:Xácđịnhloạihookmàtamuốncàiđặt,thamsốnàycóthểlàmộttrongcácgiátrịsau:•WH_CALLWNDPROC:đặtmộtthủtụchookquảnlýcácthôngđiệptrướclúchệthốnggởichúngtớicửasổđích.•WH_CALLWNDPROCRET:đặtmộtthủtụchookquảnlýcácthôngđiệpsaukhichúngđượcxửlýbởithủtụccửasổđích.•WH_CBT:đặtmộtthủtụchooknhậnnhữngthôngbáocóíchtớiứngdụnghuấnluyệntrêncơsởtínhtoán(CBT).•WH_DEBUG:đặtmộtthủtụchookcóíchchoviệcdebugnhữngthủtụchookkhác.•WH_FOREGROUNDIDLE:đặtmộtthủtụchooksẽđượcgọikhithreadforegroundcủaứngdụngsẽtrởthànhkhôngdùngđến.Hooknàycóíchchohoạtđộngnhữngnhiệmvụ(task)độưutiênthấptrongthờigiankhôngđượcdùngđến.•WH_GETMESSAGE:đặtmộtthủtụchookquảnlýcácthôngđiệpđượcposttớihàngđợithôngđiệp.•WH_JOURNALPLAYBACK:đặtmộtthủtụchookpostnhữngthôngđiệpđượcghitrướcđóbởithủtụchookWH_JOURNALRECORD.•WH_JOURNALRECORD:đặtmộtthủtụchookghinhữngthôngđiệpđầuvàođượcposttớihàngthôngđiệphệthống.Hooknàycóíchchoviệcghicácmacro.•WH_KEYBOARD:đặtmộtthủtụchookquảnlýcácthôngđiệpkeystroke.•WH_MOUSE:đặtmộtthủtụchookquảnlýcácthôngđiệpchuột.•WH_MSGFILTER:đặtmộtthủtụchookquảnlýcácthôngđiệpđượckếtsinhnhưlàmộtkếtquảcuảsựkiệnđầuvàoởtrongdialogbox,messagebox,menuhayscrollbar.•WH_SYSMSGFILTER:đặtmộtứngdụngcácthôngđiệpđượckếtsinhnhưlàkếtquảcủamộtsựkiệnđầuvàoởtrongdialogbox,messagebox,menuhayscrollbar.Thủtụchookquảnlýnhữngthôngđiệpnàychotấtcảcácứngdụngtronghệthống.Mỗigiátrịtrênxácđịnhmộtloạihookmàtamuốncàiđặt,mỗiloạihookcómộtýnghĩavàtìnhhuốngsửdụngkhácnhau.lpfn:ĐịachỉcủaFilterFunctionmàtamuốngắnvớihook.hMod:HandlecủamodulechứaFilterFunction.Nếutacàiđặtmộthookcụcbộ(nghĩa ...