首页
论坛
课程
招聘
[调试逆向] [其他内容] [原创]反截图技术的原理及简单实现
2020-10-15 12:32 1626

[调试逆向] [其他内容] [原创]反截图技术的原理及简单实现

2020-10-15 12:32
1626

前言

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


吹逼

随着好玩的游戏越来越多,盖佬人才越来越突出,好玩的游戏+一款牛逼的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瞎操作,最后得知原理。

                                                      

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

                                                        




《0day安全 软件漏洞分析技术(第二版)》第三次再版印刷预售开始!

最后于 2020-10-15 12:34 被PlaneJun编辑 ,原因:
收藏
点赞4
打赏
分享
最新回复 (11)
雪    币: 5411
活跃值: 活跃值 (141)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tomtory 活跃值 2020-10-15 14:29
2
0
该文章将邀请世界第一的编程语言-易语言来为我们演示。
+++10086
雪    币: 1175
活跃值: 活跃值 (236)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
caolinkai 活跃值 2020-10-15 16:03
3
0
支持下
雪    币: 4328
活跃值: 活跃值 (170)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
TopC 活跃值 2020-10-15 16:06
4
0
很生动
雪    币: 2614
活跃值: 活跃值 (101)
能力值: ( LV5,RANK:62 )
在线值:
发帖
回帖
粉丝
晴雯晴雯 活跃值 2020-10-15 16:15
5
0
易语言真是世界上最好用的语言呢
雪    币: 1670
活跃值: 活跃值 (192)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
StriveXjun 活跃值 2020-10-15 18:18
6
0
你可以去逆下 screenwings 看看怎么实现的。
雪    币: 2905
活跃值: 活跃值 (142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iamasbcx 活跃值 2020-10-15 18:30
7
0
GITHUB开源的
雪    币: 2774
活跃值: 活跃值 (414)
能力值: ( LV9,RANK:145 )
在线值:
发帖
回帖
粉丝
PlaneJun 活跃值 3 2020-10-16 10:53
8
0
StriveXjun 你可以去逆下 screenwings 看看怎么实现的。
看了一下,也是SetWindowDisplayAffinity
雪    币: 5819
活跃值: 活跃值 (477)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
黑洛 活跃值 1 2020-10-16 13:24
9
0
SetWindowDisplayAffinity真好用,可惜现在已经可以绕过他去截图了,然后就能石锤。
雪    币: 1670
活跃值: 活跃值 (192)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
StriveXjun 活跃值 2020-10-16 14:14
10
0
PlaneJun 看了一下,也是SetWindowDisplayAffinity

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

最后于 2020-10-16 14:14 被StriveXjun编辑 ,原因:
雪    币: 943
活跃值: 活跃值 (17)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
lynxtang 活跃值 2020-10-18 10:59
11
0
鲁迅:劳资说过这句话吗?~~学习了
雪    币: 787
活跃值: 活跃值 (298)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
lhxdiao 活跃值 2020-10-19 08:11
12
0
哪用这么麻烦,搞个服务,给每个启动的进程都注入一遍,hook掉CreateCompatibleDC,完事。
游客
登录 | 注册 方可回帖
返回