首页
社区
课程
招聘
[原创]反截图技术的原理及简单实现
2020-10-15 12:32 16500

[原创]反截图技术的原理及简单实现

2020-10-15 12:32
16500

前言

       该文章将邀请世界第一的编程语言-易语言来为我们演示。


吹逼

随着好玩的游戏越来越多,盖佬人才越来越突出,好玩的游戏+一款牛逼的WG成为了一个老挂逼的日常生活。鲁迅说过‘有乐同享,有难同当‘,于是乎,老挂逼们开始投身于直播行业,以‘高超’的技术,来向大众传递游戏胜利的快乐。为了防止大众偷学到自己的技术,一种技术诞生了-反截图。       

                                                                                                                                                                                                                                                                      


啥叫反截图

       顾名思义,就是让你截取不到你想截取的图片呗。这时聪明人又来了,那我直接把截图函数全部干掉不就完事了吗?

                                                                       

  emmm,虽然是这么个理,但是你确定你干得来吗。


为什么要反截图

       直播、装逼、防止一些有截图检测的游戏


实现一个简单反截图

       这个简单啊,打钱就完事。

                                                                             

  咳咳,开个玩笑。上才艺


                            



           看不懂没关系,会用就行。

                                            

           这样就OK,然后咱们运行后看一下截图效果

                                

         我们发现,窗口变黑了。这是一个简单的反截图效果,虽然能反截图了,但是是个人都觉得这种反截图不靠谱。假设你正在用科技直播,观众全部就看着黑框了。而且,咱们自己都觉得这种反截图效果不行,那游戏公司还会傻吗?不给你一个套餐,难道留着回家过年吗。  

      那么问题来了,当前这个黑框是覆盖在我们窗口上面呢,还是他把窗口直接变成黑色。接下来开始探究。



探究反截图原理

         那么我们能不能实现一个全透明的反截图效果呢,比如B覆盖在A上面,我们截图,只能截取到A,B就完全处于一个透明的状态。答案是肯定的。接下来我们来进一步研究一下,既然我们想让他透明,好办啊,我们给窗口设置一个透明。

                                       

        运行起来之后,发现窗口透明了

                                      

         那我们来重新截图试试看。

                                    

         诶,我们发现刚刚那个反截图的效果,也变透明了。我们添加一个控件再运行截图看看效果。

                                      

                                   

           我们发现,看不到按钮。经过这样的测试我们发现,SetWindowDisplayAffinity 这个函数之后所产生的黑框,并不是覆盖上去的,而是直接把窗口刷新成为黑色的,而且这种黑色的效果可以通过修改窗口透明度来控制黑色的可见度。

                                                                   

由此可知,一个新的反截图思路:给窗体一个透明度,这样就实现了全透明的反截图。当然还有另一种方法:论坛已经给出,https://bbs.pediy.com/thread-258830.htm

       Ok.下面开始根据第一种方法实现反截图(嘴角开始上扬)。

                                                                   

优化反截图

       其实在上面我们已经实现了全透明的反截图,只不过用的是易语言官方库的命令(易语言真是世界上最好用的语言呢),现在用API实现。

                  

     用这个函数设置就行,第一个参数句柄,第四个参数:1则用crKey,忽略bAlpha;2则用bAlpha,忽略crKey。这个函数干嘛的呢,就是设置窗口透明度的。

                                  

     下面为了方便演示,我在窗口写了字,看看效果。

                                             

        截图看一下效果

                                            

       这样的话,就实现了一个简单的反截图。如果想要实现效果更好的,可以到我上面指出的帖子里看看实现方法。

       下面是我将此技术运用在D3D透明绘制上

                   


          截图后

                   

结束语

       本篇文章只是探究一个低级的反截图,该反截图的原理也是我再某论坛看到的,虽说开源,但是却是调用DLL。凭着正义心驱使的我岂能让这种作为猖狂,直接扔进OD瞎操作,最后得知原理。

                                                      

      另外该种方法还能过录制。行了,这几天事务繁忙,突然有空就分析了一下反截图,然后就顺便来看雪划了水,溜了溜了。

                                                        




[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2020-10-15 12:34 被PlaneJun编辑 ,原因:
收藏
点赞10
打赏
分享
最新回复 (13)
雪    币: 10199
活跃值: (2175)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tomtory 2020-10-15 14:29
2
0
该文章将邀请世界第一的编程语言-易语言来为我们演示。
+++10086
雪    币: 3654
活跃值: (3828)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
caolinkai 2020-10-15 16:03
3
0
支持下
雪    币: 6977
活跃值: (1775)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
TopC 2020-10-15 16:06
4
0
很生动
雪    币: 6765
活跃值: (1572)
能力值: ( LV5,RANK:67 )
在线值:
发帖
回帖
粉丝
晴雯晴雯 2020-10-15 16:15
5
0
易语言真是世界上最好用的语言呢
雪    币: 1038
活跃值: (1216)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
StriveXjun 2020-10-15 18:18
6
0
你可以去逆下 screenwings 看看怎么实现的。
雪    币: 2251
活跃值: (2383)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iamasbcx 2020-10-15 18:30
7
0
GITHUB开源的
雪    币: 74
活跃值: (7195)
能力值: ( LV9,RANK:335 )
在线值:
发帖
回帖
粉丝
PlaneJun 6 2020-10-16 10:53
8
0
StriveXjun 你可以去逆下 screenwings 看看怎么实现的。
看了一下,也是SetWindowDisplayAffinity
雪    币: 6124
活跃值: (4046)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
黑洛 1 2020-10-16 13:24
9
0
SetWindowDisplayAffinity真好用,可惜现在已经可以绕过他去截图了,然后就能石锤。
雪    币: 1038
活跃值: (1216)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
StriveXjun 2020-10-16 14:14
10
0
PlaneJun 看了一下,也是SetWindowDisplayAffinity

SetWindowDisplayAffinity不是关键,关键的是dwm的aero特征。

最后于 2020-10-16 14:14 被StriveXjun编辑 ,原因:
雪    币: 1025
活跃值: (196)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
lynxtang 2020-10-18 10:59
11
0
鲁迅:劳资说过这句话吗?~~学习了
雪    币: 2063
活跃值: (3823)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lhxdiao 2020-10-19 08:11
12
0
哪用这么麻烦,搞个服务,给每个启动的进程都注入一遍,hook掉CreateCompatibleDC,完事。
雪    币: 88
活跃值: (568)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Territory 2021-2-26 19:19
13
0
lhxdiao 哪用这么麻烦,搞个服务,给每个启动的进程都注入一遍,hook掉CreateCompatibleDC,完事。
你说的这个只针对GDI
雪    币: 293
活跃值: (239)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cavan 2021-2-26 21:06
14
0


游客
登录 | 注册 方可回帖
返回