聊天软件利用Windows系统API函数SetWindowDisplayAffinity不让截图?我偏要!破解它!
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
前几天,有小伙伴反映:他手里有个聊天软件,每次一截图,聊天窗口就不见了,甚至按键盘上的PrtSc截图键截下来都没有这个聊天窗口的内容,他想尽各种办法,就是截不了这个软件的图。 听他这么一描述,我还有些好奇了起来。首先怀疑的是这软件是不是安装了什么消息钩子,通过监听键盘按键,禁止截图,于是有人建议他换个快捷键,结果发现也不行: 于是我建议让他手动点击微信的截图按钮,不要敲键盘,结果还是不行: 有群友建议他使用录屏功能,直接录视频,发现居然仍然不行! 这一下挑起了我的兴趣,这软件还真有两下子啊。 基于这么多操作都不行,于是我怀疑是不是这软件安装了什么内核驱动,在内核里面拦截捕捉屏幕像素内容的操作,于是建议用PChunter查一下: 鉴于这位小伙伴不是太会操作,于是我找他要到了这个聊天软件的安装包,自己安装了来研究。结果发现居然啥驱动都没装!也没有什么可疑的钩子行为。甚至连软件的登录界面都截不了图! 这一下让我皱眉头了,一个普通应用程序,它是咋做到这一切的?难道是有什么我不知道的操作?【本文来自微信公众号:轩辕的编程宇宙,未经许可,禁止搬运】 于是我打开ChatGPT,把上面的现象给它描述了一下,他告诉了我一个系统API,这个API可以办到这样的效果,这个API就是: 根据MSDN的描述,这个函数可以用来设置窗口不被任何屏幕录制行为捕获: 为了验证这聊天软件是不是通过这个API实现的,我用APImonitor抓了一下它启动的过程,果然发现了对这个函数的调用,而且第二个参数传递的值正是上面的0x11,也就是17。 问题搞清楚了,想要破解就好办了,再调用一下这个函数,把第二个参数设置为0,解除对窗口的保护就好了。 不过要注意,根据MSDN的描述,调用这个函数必须要窗口属于当前进程才行,无法操作别的进程的窗口。所以我们得让那个聊天软件自己去调用这个函数解除它的窗口保护。【本文来自微信公众号:轩辕的编程宇宙,未经许可,禁止搬运】 那如何让聊天软件主动去干这件事呢?用我们第26课学到的DLL注入就好了:我们编写一个DLL,在DLL里面调用这个函数解除窗口保护,然后把DLL注入到目标聊天软件进程中就好了。 我们先用Spy++看一下要解除保护的窗口,通过上面APImonitor中抓到的两次调用 查看两个窗口的窗口类和窗口名称,接下来,写代码解除保护: 在DLL加载的时候就执行上述动作:
接下来,把DLL注入进去:
最后,执行成功,终于可以截图了: 上面的办法,不是个长久之计,因为程序重启后,又得要重新注入来改。挺麻烦的,那有没有一劳永逸的办法呢? 还真有!直接逆向分析找到程序调用 来自:轩辕之风 该文章在 2024/9/18 12:00:17 编辑过 |
关键字查询
相关文章
正在查询... |