软件逆向加密视频专用播放器是如何检测到用户在录像
现在很多加密视频的专用播放器都禁止录屏,检测到录屏会终止播放或禁止观看。出于好奇,分析下它是如何检测到在录屏的。
目前分析到的播放器有两种检测方式,一种是检测程序标题另外一种是进程名字。
一、检测标题
播放器在播放视频时,如何加密选用了禁止录像功能,那播放器就会检测系统所有运行的程序窗口标题。如标题中有 录像、录屏、record....等字样,播放器就会报错。
检测代码如下:
#include <windows.h> #include <iostream> #include <string> BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { char windowTitle[256]; if (GetWindowText(hwnd, windowTitle, sizeof(windowTitle))) { std::string title = windowTitle; if (title.find("公众号:IT0365") != std::string::npos) { // 替换"公众号:IT0365"为你要查找的文本 std::cout << "找到窗口: " << windowTitle << std::endl; // 可以根据需要在这里添加更多操作,例如记录软件名或结束播放 return FALSE; // 找到后可以选择停止枚举 } } return TRUE; // 继续枚举其他窗口 } int main() { EnumWindows(EnumWindowsProc, NULL); return 0; }
检测代码就是用了一个函数,看到这个代码大家应该想到了怎么过检测的办法。
有两种方法避开检测,第一种它会根据你提供的标题名进行对比,那此时你将录像软件的标题改掉让它找不到即可避开。修改软件标题也需要一定的技术,网上也有工具直接修改。第二种就是在它对比时让它一直找。找到了也继续找。反汇编代码中

IF语句会有类似JE的跳转,你就修改成不相等或无条件跳转也可避开检测。
二、进程名检测
进程名检测和标题是一样的,也是检测名字。具体代码如下
PROCESSENTRY32 pe32 = {0};
pe32.dwSize = sizeof(PROCESSENTRY32);
HANDLE hthSnapProc = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (!hthSnapProc) return;
if (!Process32First(hthSnapProc,pe32))
{
CloseHandle(hthSnapProc)
return;
}
do
{
if(strcmp(pe32.szExeFile,"IT0365")==0)
{
//处理代码
}
} while(Process32Next(hthSnapProc,&pe32));
从代码中看到进程名检测也是和窗口一样将所有运行的程序进行对比。这里的破解修改方法和标题类似了。
上面两种方法其它就是一个黑名单检测,软件作者会将市面所有的录像软件,截图软件,远程软件等名称进行收集。然后进行对比。如果软件名称在播放器黑名单中就说明是在录像。为什么有些冷门的录像软件直接录,专用播放器检测不到就是说明它不在黑名单中,所以未检测到就可以正常录制了。

浙公网安备 33010602011771号