序言
我们发现, 在用截屏软件或者录屏软件捕获改程序窗口的时候, 窗口会从屏幕中消失, 但是自己还是能看到.
那么我的第一反应就是, 不让我截屏, 我直接抓包还不行吗?
初见端倪
事实证明, 抓包确实是非常好的选择, 可以直接抓到录像视频的m3u8链接和教师投降的m3u8链接.
抓到后用工具下载成mp4文件即可.
更令人惊喜的是, 软件播放回放时, 会打上用户水印, 把你的名字和电话号码全部打满屏幕, 而抓出来的文件十分干净, 是没有水印的!
更进一步
我在截屏的时候, 发现尽管窗口隐藏了, 但是截图工具自动选取窗口的功能还是能取到程序窗口的方框, 这显然是程序在检测到截屏时, 更改了窗口透明度.
一搜索, 发现大多反截屏都调用的是Windows自带的SetWindowDisplayAffinity()
函数.
那就很简单了, 我们直接注入dll拦截这个函数就行了.
这里ShareBit大佬已经写好了, 我就没有再去写.
windows自带反截屏接口下的反反截屏软件 - 综合讨论区 - 无忧启动论坛 - Powered by Discuz!
再进一步
但是呢, 我每次用该软件上课时都要运行反反截屏检测注入工具(即上文ShareBit开发的DeAntiCapture), 那不是相当麻烦?
如果哪次忘记开了, 导致没能及时截屏记笔记, 必须要等课上完了看回放, 那岂不是很令人难受?
由此, 我想到了系统dll劫持.
version.dll
是一个非常理想的劫持选择, 因为它函数比较少.
我们用OD附加改软件, 看一下执行模块, 确实调用了version.dll
, 那就好办了!
Windows系统中DLL的加载顺序通常如下:
- 应用程序所在目录
- 当前目录
- 系统目录(如C:\Windows\System32)
- Windows目录(如C:\Windows)
- 环境变量PATH中包含的目录
例如: 对于文件系统,如doc文档打开会被应用程序office打开,而office运行的时候会加载系统的一个DLL文件,如果我们将用恶意的DLL来替换系统的DLL文件,就是将DLL和doc文档放在一起,运行的时候就会在当前目录中找到DLL,从而优先系统目录下的DLL而被执行。
我们可以用开源程序AheadLib-x86-x64.exe
(软件下载(Github)), 生成这个dll的代码, 并在其中插入一行代码来加载我们自己的dll.
我直接用了ShareBit大佬程序中的dll.
在加载函数中加入LoadLibraryA("mydll.dll");
最后, 编译一下, 放到网课程序根目录下即可
如果你对这部分不熟悉的话, 可以参考这个保姆级教程: 劫持系统dll制作_哔哩哔哩_bilibili
结语
至此, 本文就结束了.
如果你想长期保存方便以后学习或者和他人私下分享, 抓包仍然是我最推荐的选择.