反截屏技术探索

breezescut 2010-02-10 05:31:22
最近在研究反截屏技术,研究了一天,在网上找到一些资料,知道截屏软件一般使用 CreateCompatibleBitmap 和 BitBlt 等Windows API实现的。于是,我就想到两个方案去实现反截屏

方案:Hook 上述 API ,遇到这些API调用即拦截。
我使用 《Windows 核心编程》里面 22章 的 "22 LastMsgBoxInfoLib"实例代码进行改进,实现了一个APIHOOk的测试工程,该工程可以成功拦截到CreateCompatibleBitmap 等API的调用(全局,所有程序)。
但该方法存在一个致命问题,就是我发现除了截屏软件会使用这些API实现截屏外,我测试用到的非截屏GUI程序都受到影响。我对GDI编程不熟悉,但个人估计应该是因为GUI程序在生成图形界面的时候会用到上述API,所以会受到影响。
想问问各位大虾,截屏软件是不是真的使用上述API实现截屏功能,还没有其他的截屏API可用。像上述问题,应该如何解决。希望各位大虾给小弟指条明路。

另外:我在网上找到一个软件Snoop free 的,我拿了截屏软件测试了一下,的确可以防得住。其做法是在程序启动的时候询问用户是否放行截屏软件。个人估计它应该是检测软件中使用的API作出反应的,不知我的估计是否正确,如果正确它又是拦截什么API实现功能但又不影响GUI程序的。
...全文
1844 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
alvisxiao 2011-06-27
  • 打赏
  • 举报
回复

深信达号称它的反截屏技术国际领先 其实也不过如此 !

哈哈,哥我也做出来,也是国际领先啊 ,有兴趣的邮件联系 pasharp@163.com 哈哈。
kaylc 2010-11-21
  • 打赏
  • 举报
回复
我的反截屏软件已经做得差不多了,不会影响正常使用,完全是独创的,有感兴趣的可以讨论一下。。。
Stefine 2010-06-24
  • 打赏
  • 举报
回复
http://bbs.driverdevelop.com/read.php?fid=71&tid=111662&toread=1

这人的不是hook,但也没说明白是啥。
Stefine 2010-06-24
  • 打赏
  • 举报
回复
这帖受益彼深啊,不知LZ完美解决木有?
Sunny_wwc 2010-04-13
  • 打赏
  • 举报
回复
我也在研究这个最近 的确是产生一个窗口 处理掉这个窗口挺简单的 但是这个方法治标不治本 重要的还是能从hook入手解决最好
ttzyanswer 2010-02-25
  • 打赏
  • 举报
回复
呵呵.LZ很执着.
你说你用HOOK API 的方式 那其它软件就不能反HOOK 吗? 呵呵.当然这里我只是列举了一个反HOOK 的情况.这个其实不是重点.从你的几个回复中看得出你对HOOK 情有独钟啊.呵呵. 首先肯定的是你肯定不能HOOK了一些关键系统API之后什么也不管就拒绝吧.那样会影响到其它软件.所以关键就是你的接管函数要怎么处理判断的问题了.
rayyear 2010-02-23
  • 打赏
  • 举报
回复
任你如何反截屏,陈冠希老师教我,一机在手天下我有。。。
breezescut 2010-02-23
  • 打赏
  • 举报
回复
这个帖子分不多,但其实是我所有的分了,我会继续努力赚分,给这个帖子加分的。
breezescut 2010-02-23
  • 打赏
  • 举报
回复
各位大虾,我现在想完成的第一步是拦截市面主要的截屏软件,就是那种使用GetWindowDC、CreateCompatibleDC、CreateCompatibleBitmap、SelectObject、 BitBlt、DeleteDC、ReleaseDC、DeleteObject 这些API实现截屏的软件。至于相机、虚拟机和Direct这些我暂时不考虑,所以希望各位大虾先别急于将焦点关注到那些方面,这些我可能留待下一步,如果不能实现就只好算了,但第一步——拦截市面上普通的截屏软件,我需要立马就做到的,因为走完第一步,我才有可能考虑下一步。希望懂得这方面的大虾略为指点一下小弟,不胜感激。

另外,就我暂时的实践,所得经验教训总结如下:

1、Hook API GetWindowDC、CreateCompatibleDC、CreateCompatibleBitmap、SelectObject、 BitBlt、DeleteDC、ReleaseDC、DeleteObject 均有问题,因为普通的非截屏软件同样需要这些API实现界面绘图,所以Hook这些API会影响其他软件的界面绘画。

2、普通的截屏软件工作原理:首先进行整个桌面的截图,然后将图在整个呈现到最上层——进行区域截图的时候会发现鼠标变成十字状之类的,然后可以选择某一区域截取。其实并非是直接截取桌面的,而是在一幅生成的桌面图上再截取,按 Alt + Tab 即可发现。

3、找过一些反截屏的开源代码,发现都是拦截按键消息而已,这种方法不可行。

4、研究了市面上两个带反截屏功能的软件,一个叫PrivacyKeyboard,对普通截屏软件的确可以起到拦截作用,我用两款截屏软件操作的时候,截取到的图像都置换成了特定的图片,但后来发现使用Picasa看图时,背景同样被置换,因为Picasa也会覆盖全屏。另一个想不起名字,原理是在程序启动的时候可以鉴别是否截屏软件,初步估计应该是检测到启动程序使用了某个特定API,所以拦截。我尝试用 Process Explorer 导出一个截屏软件和一个非截屏软件内存里的字符串,观察它们分别调用的API,发现虽然很多上面的我列出的截屏它们都用到,但可能有些是反截屏软件用到而非反截屏软件没用到的,因为API很多,我难以仔细找出这样的API。

希望各位大虾不吝赐教,上面所列的信息如有错误的地方,请指出。更请各位大虾能给小弟指明一条明路,谢谢
breezescut 2010-02-11
  • 打赏
  • 举报
回复
引用 12 楼 sjdev 的回复:
引用 11 楼 breezescut 的回复:
发现鼠标对桌面上的所有点击都无效了

你盯着桌面看一分钟,看右下角的时间会不会改变?

这个截屏的原理是做一个全屏的窗口,然后把屏幕抓上去做背景的吧。


的确,原理是做一个全屏的窗口,然后把屏幕抓上去做背景的。所以,我进一步想不如检测什么时候出现整个屏幕被抓图然后当背景的情况,不过不清楚怎样做到铺一张图上去,然后屏蔽整个桌面的。
breezescut 2010-02-11
  • 打赏
  • 举报
回复
貌似应该先研究如何截屏,才好说如何反之。貌似搂住对截屏的实现不甚了解,所以建议搂住先做个截屏软件,再研究要hook哪个api

===========================================================================================

我拿了一个开源的截屏软件研究,发现其用到的API如下:
GetWindowDC、CreateCompatibleDC、CreateCompatibleBitmap、SelectObject、BitBlt、DeleteDC、ReleaseDC、DeleteObject。

其中我对GetWindowDC、CreateCompatibleBitmap、BitBlt进行Hook,发现均会影响到其他的非截屏软件,估计是那些软件在生成图形界面的时候都会使用到这些API。



magic7004 2010-02-11
  • 打赏
  • 举报
回复
貌似应该先研究如何截屏,才好说如何反之。貌似搂住对截屏的实现不甚了解,所以建议搂住先做个截屏软件,再研究要hook哪个api
zoulie 2010-02-11
  • 打赏
  • 举报
回复
引用 21 楼 oldmanzhao 的回复:
引用 1 楼 dd_zhouqian 的回复:mediaplay 就是反截屏吧
MediaPlayer可能要用Direct截屏

mediaplayer是使用directdraw画上去的,普通的GDI方法根本截不到
sjdev 2010-02-11
  • 打赏
  • 举报
回复
引用 11 楼 breezescut 的回复:
发现鼠标对桌面上的所有点击都无效了


你盯着桌面看一分钟,看右下角的时间会不会改变?

这个截屏的原理是做一个全屏的窗口,然后把屏幕抓上去做背景的吧。
wangk 2010-02-11
  • 打赏
  • 举报
回复
引用 22 楼 skyxie 的回复:
好吧,就算你可以拒绝在虚拟机里面运行,那别人用相机对着屏幕拍呢?


哈哈,显然是没办法啊。

我的回答,从来没说一定能反截屏啊。莫要误会了。
skyxie 2010-02-11
  • 打赏
  • 举报
回复
引用 19 楼 wangk 的回复:
引用 17 楼 jingzhongrong 的回复:去虚拟机里面截屏你怎么防止?

检测是在虚拟机环境下就拒绝运行。


好吧,就算你可以拒绝在虚拟机里面运行,那别人用相机对着屏幕拍呢?
oldmanzhao 2010-02-11
  • 打赏
  • 举报
回复
引用 1 楼 dd_zhouqian 的回复:
mediaplay 就是反截屏吧

MediaPlayer可能要用Direct截屏
yxwsbobo 2010-02-11
  • 打赏
  • 举报
回复
引用 19 楼 wangk 的回复:
引用 17 楼 jingzhongrong 的回复:
去虚拟机里面截屏你怎么防止?

检测是在虚拟机环境下就拒绝运行。



- - 好注意 丫的我怎么一个都想不到
wangk 2010-02-11
  • 打赏
  • 举报
回复
引用 17 楼 jingzhongrong 的回复:
去虚拟机里面截屏你怎么防止?


检测是在虚拟机环境下就拒绝运行。
yxwsbobo 2010-02-11
  • 打赏
  • 举报
回复
引用 17 楼 jingzhongrong 的回复:
去虚拟机里面截屏你怎么防止?


^^ 意思是无解了
加载更多回复(13)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧