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 ...
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 ...
Tìm kiếm theo từ khóa liên quan:
tin học căn bản hook hướng dẫn về kỹ thuật hook quá trình xử lý thông tin WindowsTài liệu có liên quan:
-
Xử lý tình trạng máy tính khởi động/tắt chậm
4 trang 254 0 0 -
Sửa lỗi các chức năng quan trọng của Win với ReEnable 2.0 Portable Edition
5 trang 238 0 0 -
6 trang 231 0 0
-
Các phương pháp nâng cấp cho Windows Explorer trong Windows
5 trang 226 0 0 -
Giới thiệu tổng quan về SharePoint 2007
41 trang 209 0 0 -
Giáo Trình tin học căn bản - ĐH Marketing
166 trang 203 0 0 -
TÀI LIỆU HƯỚNG DẪN SỬ DỤNG PHẦN MỀM KHAI BÁO HẢI QUAN ĐIỆN TỬ phần 1
18 trang 188 0 0 -
Memory-RAM - Một số thuật ngữ và kỹ thuật tin học
5 trang 160 0 0 -
Tài liệu ôn thi công chức - Môn Tin học
9 trang 159 0 0 -
Tiến trình trong Linux và các hàm trong C
14 trang 152 0 0