HOOK 避免自己程式被勾住

2021-05-27 03:05:31 字數 855 閱讀 1875

一直以來有個疑問,就是如果別人在你的電腦上安裝了鍵盤鉤子來監視你的鍵盤按鍵動作,我的程式怎麼才能避開這些全域性鍵盤鉤子(system-wide hook)的監視.正好最近一段時間因為工作關係在研究鉤子,順便研究了一下這個問題,今天算是找到了乙個解決辦法.

解決辦法:

在我的程式中安裝乙個區域性鍵盤鉤子(thread-specified hook),鍵盤鉤子函式中不呼叫callnexthookex;

原理:

1.鉤子鏈可以被破壞.同一型別的鉤子會形成乙個鏈,假如先被呼叫的鉤子沒有呼叫callnexthookex的話,後面的鉤子將得不到呼叫.

2.對於某個特定的執行緒,如果既安裝了執行緒鉤子又安裝了系統鉤子,則執行緒鉤子先於系統鉤子被呼叫.

實驗:

鍵盤鉤子(wh_keyboard)

我寫了個簡單的對話方塊程式,部分**如下:

1.先宣告鉤子hhook ghook = null;

2.鍵盤鉤子函式:

lresult callback keyboardproc(int ncode,wparam wparam,lparam lparam)

3.安裝鉤子:

dword nthreadid = getcurrentthreadid();

if(ghook == null)

4.解除安裝鉤子

bool ret = unhookwindowshookex(ghook);

實驗方法及結果如下:

1.先啟動另乙個程式,安裝系統鍵盤鉤子,再啟動我的程式,安裝區域性鍵盤鉤子,實驗結果表明系統鉤子對我的程式無效.

2.先啟動我的程式,安裝區域性鍵盤鉤子,再啟動另乙個程式,安裝系統鍵盤鉤子.在我的程式中系統鍵盤鉤子無效.

Linux下避免程式被重複執行

在linux下,有些程式同時執行多個例項時會出錯。因此,需要使用一些方法避免程式被重複執行,即同一時間段內只能有乙個程式例項執行。程式啟動的時候開啟某個鎖檔案並對該檔案加鎖,退出程式時解鎖。如果無法正常加鎖,則說明程式已經在記憶體中執行了,當前執行緒return即可。首先,先以建立 可讀寫模式開啟鎖...

產品經理如何避免被程式設計師打?

我來說下接地氣的幾個招,都是我在鵝廠和創業公司實踐摸索出來的。1 妙用程式猿鼓勵師 何為程式猿鼓勵師,其實就是很多剛入職的產品助理,鵝廠很多產品經理其實顏值都不錯,都是從產品助理一步步過來的。產品經理如果是男生,男生磕男生,是很容易擦槍走火的,經常兩個人會死磕到凌晨,嘴巴上基本都已經對罵n次,偶爾還...

產品經理如何避免被程式設計師打?

產品 你會巴西柔術麼?你會日本相撲麼?你會棒國跆拳道麼?你會.啥?你啥子都不會?哦.那你可能會被程式猿打.我大程式猿撕逼能力一般,動手能力還是闊以滴.實在不是產品打得過開發啊,人是群居動物啊,敢問你們公司有多少開發多少產品?英雄聯盟 都是五打五,我們特麼五打一還打不過你?so.產品你提需求可以,能不...