Anti-Screen Capture(Prevent Screen Captures)截圖與反截圖

逗比汪星人發表於2012-05-07

1.數字圖片使用類似與動畫的方式顯示,每次顯示的是數字的一部分,當動態顯示的時候人眼是可以分辨出具體數字的。但是截圖的話就只能擷取一部分,參考:

cups.cs.cmu.edu/soups/2007/posters/p147_lim.pdf


2.遮蔽系統按鍵:Print Screen 和 Alt + Print Screen,主要原理是註冊熱鍵的方式,參考:

http://www.vckbase.com/document/viewdoc/?id=1566

 

3.全域性Hook,參考:

Screen Capture Library for Windows : http://gpalem.web.officelive.com/screencap.html

http://topic.csdn.net/u/20090914/00/70e6da83-906b-4db4-a3ee-d79dfd460bd6.html

 這種方法不僅要Hook GDI方式的截圖還有DirectX方式的截圖,當然不排除還有其他方式的截圖,例如:“Windows Media API for Capturing the Screen”。

所以這種方法實施起來甚是繁瑣,第一要儘可能多地Hook相關API函式,但是你很難做到全面。另一方面穩定性,擴充套件性和維護性也不太好。

 

4.視訊過濾驅動(Video filter drivers)。

相對於Hook來說可能更好一些,但是技術難度比較大。

 http://search.codesoso.com/Record/ddf85213-2bdf-bfae-5626-15646cefdf09_446750_1.html

http://www.codeproject.com/Articles/Toby-Opferman

Driver Development Part 6: Introduction to Display Drivers


5.ShadowSSDT

經過體驗“卡巴斯基2012”版本的虛擬鍵盤功能,發現其有防截圖功能,當虛擬鍵盤開啟時擷取的螢幕是全黑色的。如果虛擬鍵盤未開啟,則截圖時截不到卡巴斯基的主介面。

使用xuetr分析,卡巴斯基並沒用設定“Video filter drivers”,而是使用了ShadowSSDT做的防截圖,以下是驅動klif.sys的ShadowSSDT:

[code=C/C++]

[XueTr][ShadowSSDT]: 21
序號       函式名稱                      當前函式地址      Hook             原始函式地址      當前函式地址所在模組
13         NtGdiBitBlt                   0xB1EE8508        ssdt hook        0xBF809F5F        C:\WINDOWS\system32\DRIVERS\klif.sys
227        NtGdiMaskBlt                  0xB1EE85DE        ssdt hook        0xBF8384E0        C:\WINDOWS\system32\DRIVERS\klif.sys
237        NtGdiPlgBlt                   0xB1EE864E        ssdt hook        0xBF943B92        C:\WINDOWS\system32\DRIVERS\klif.sys
292        NtGdiStretchBlt               0xB1EE8572        ssdt hook        0xBF8738A3        C:\WINDOWS\system32\DRIVERS\klif.sys
307        NtUserAttachThreadInput       0xB1EE8BD6        ssdt hook        0xBF8F7976        C:\WINDOWS\system32\DRIVERS\klif.sys
312        NtUserBuildHwndList           0xB1EE86B6        ssdt hook        0xBF835EA1        C:\WINDOWS\system32\DRIVERS\klif.sys
323        NtUserCallOneParam            0xB1EE84D4        ssdt hook        0xBF801067        C:\WINDOWS\system32\DRIVERS\klif.sys
378        NtUserFindWindowEx            0xB1EE82C8        ssdt hook        0xBF8B128C        C:\WINDOWS\system32\DRIVERS\klif.sys
383        NtUserGetAsyncKeyState        0xB1EE80D6        ssdt hook        0xBF8491D4        C:\WINDOWS\system32\DRIVERS\klif.sys
414        NtUserGetKeyboardState        0xB1EE83D6        ssdt hook        0xBF852661        C:\WINDOWS\system32\DRIVERS\klif.sys
416        NtUserGetKeyState             0xB1EE8122        ssdt hook        0xBF820DEC        C:\WINDOWS\system32\DRIVERS\klif.sys
460        NtUserMessageCall             0xB1EE821A        ssdt hook        0xBF80EDEB        C:\WINDOWS\system32\DRIVERS\klif.sys
475        NtUserPostMessage             0xB1EE816E        ssdt hook        0xBF808934        C:\WINDOWS\system32\DRIVERS\klif.sys
476        NtUserPostThreadMessage       0xB1EE81C2        ssdt hook        0xBF8B3C60        C:\WINDOWS\system32\DRIVERS\klif.sys
490        NtUserRegisterHotKey          0xB1EE8C90        ssdt hook        0xBF8ADC84        C:\WINDOWS\system32\DRIVERS\klif.sys
491        NtUserRegisterRawInputDevices 0xB1EE835E        ssdt hook        0xBF915CEB        C:\WINDOWS\system32\DRIVERS\klif.sys
502        NtUserSendInput               0xB1EE827A        ssdt hook        0xBF8C3117        C:\WINDOWS\system32\DRIVERS\klif.sys
529        NtUserSetParent               0xB1EE8A88        ssdt hook        0xBF8795B5        C:\WINDOWS\system32\DRIVERS\klif.sys
549        NtUserSetWindowsHookEx        0xB1EE8026        ssdt hook        0xBF852721        C:\WINDOWS\system32\DRIVERS\klif.sys
552        NtUserSetWinEventHook         0xB1EE807E        ssdt hook        0xBF8F0099        C:\WINDOWS\system32\DRIVERS\klif.sys
576        NtUserUnregisterHotKey        0xB1EE8DB0        ssdt hook        0xBF912A64        C:\WINDOWS\system32\DRIVERS\klif.sys

[/code]



 其中還有一些防鍵盤記錄的,與截圖有關的是:NtGdiBitBlt,NtGdiMaskBlt,NtGdiPlgBlt,NtGdiStretchBlt。NtUserBuildHwndList,NtUserFindWindowEx用來隱藏視窗,使得三方程式查詢視窗時找不到被保護的視窗,也是與防截圖功能有關的。


原文地址: http://www.zhizihua.com/blog/post/501.html 



相關文章