聊天軟件利用Windows系統(tǒng)API函數(shù)SetWindowDisplayAffinity不讓截圖?我偏要!破解它!
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
前幾天,有小伙伴反映:他手里有個(gè)聊天軟件,每次一截圖,聊天窗口就不見了,甚至按鍵盤上的PrtSc截圖鍵截下來都沒有這個(gè)聊天窗口的內(nèi)容,他想盡各種辦法,就是截不了這個(gè)軟件的圖。 聽他這么一描述,我還有些好奇了起來。首先懷疑的是這軟件是不是安裝了什么消息鉤子,通過監(jiān)聽鍵盤按鍵,禁止截圖,于是有人建議他換個(gè)快捷鍵,結(jié)果發(fā)現(xiàn)也不行: 于是我建議讓他手動點(diǎn)擊微信的截圖按鈕,不要敲鍵盤,結(jié)果還是不行: 有群友建議他使用錄屏功能,直接錄視頻,發(fā)現(xiàn)居然仍然不行! 這一下挑起了我的興趣,這軟件還真有兩下子啊。 基于這么多操作都不行,于是我懷疑是不是這軟件安裝了什么內(nèi)核驅(qū)動,在內(nèi)核里面攔截捕捉屏幕像素內(nèi)容的操作,于是建議用PChunter查一下: 鑒于這位小伙伴不是太會操作,于是我找他要到了這個(gè)聊天軟件的安裝包,自己安裝了來研究。結(jié)果發(fā)現(xiàn)居然啥驅(qū)動都沒裝!也沒有什么可疑的鉤子行為。甚至連軟件的登錄界面都截不了圖! 這一下讓我皺眉頭了,一個(gè)普通應(yīng)用程序,它是咋做到這一切的?難道是有什么我不知道的操作?【本文來自微信公眾號:軒轅的編程宇宙,未經(jīng)許可,禁止搬運(yùn)】 于是我打開ChatGPT,把上面的現(xiàn)象給它描述了一下,他告訴了我一個(gè)系統(tǒng)API,這個(gè)API可以辦到這樣的效果,這個(gè)API就是: 根據(jù)MSDN的描述,這個(gè)函數(shù)可以用來設(shè)置窗口不被任何屏幕錄制行為捕獲: 為了驗(yàn)證這聊天軟件是不是通過這個(gè)API實(shí)現(xiàn)的,我用APImonitor抓了一下它啟動的過程,果然發(fā)現(xiàn)了對這個(gè)函數(shù)的調(diào)用,而且第二個(gè)參數(shù)傳遞的值正是上面的0x11,也就是17。 問題搞清楚了,想要破解就好辦了,再調(diào)用一下這個(gè)函數(shù),把第二個(gè)參數(shù)設(shè)置為0,解除對窗口的保護(hù)就好了。 不過要注意,根據(jù)MSDN的描述,調(diào)用這個(gè)函數(shù)必須要窗口屬于當(dāng)前進(jìn)程才行,無法操作別的進(jìn)程的窗口。所以我們得讓那個(gè)聊天軟件自己去調(diào)用這個(gè)函數(shù)解除它的窗口保護(hù)。【本文來自微信公眾號:軒轅的編程宇宙,未經(jīng)許可,禁止搬運(yùn)】 那如何讓聊天軟件主動去干這件事呢?用我們第26課學(xué)到的DLL注入就好了:我們編寫一個(gè)DLL,在DLL里面調(diào)用這個(gè)函數(shù)解除窗口保護(hù),然后把DLL注入到目標(biāo)聊天軟件進(jìn)程中就好了。 我們先用Spy++看一下要解除保護(hù)的窗口,通過上面APImonitor中抓到的兩次調(diào)用 查看兩個(gè)窗口的窗口類和窗口名稱,接下來,寫代碼解除保護(hù): 在DLL加載的時(shí)候就執(zhí)行上述動作:
接下來,把DLL注入進(jìn)去:
最后,執(zhí)行成功,終于可以截圖了: 上面的辦法,不是個(gè)長久之計(jì),因?yàn)槌绦蛑貑⒑?,又得要重新注入來改。挺麻煩的,那有沒有一勞永逸的辦法呢? 還真有!直接逆向分析找到程序調(diào)用 來自:軒轅之風(fēng) 該文章在 2024/9/18 12:00:17 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |