本文目的是基于C语言开发出一个PC端应用层的程序,当运行程序后禁止相关游戏运行,此程序是不可逆向设置的,此程序不会被关闭,程序开机后会自动启动,程序运行后窗口会隐藏,在后台默默运行。
除非是专业的程序员,否则一般人则无法删除掉此程序,想要玩游戏只有重装系统,这样就能在一定程度上达到戒除游戏的效果。
开发原理:
现在最火的游戏多数是企鹅厂的,下面就以杀死企鹅的wegame和杀死LOL程序为列。将下面两个代码编译为exe程序后放在同一目录,随便运行一个后,妈妈就再也不用担心我的学习。
#include
#include
#include
#include
// 隐藏控制台
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
// 快速启动目录启动
void StartupRun(LPCWSTR exePath)
{
// TODO: 在此处添加实现代码.
TCHAR szStartupPath[MAX_PATH] = {};
TCHAR szExePath[MAX_PATH] = {};
// 获取启动目录
BOOL bRet = ::SHGetSpecialFolderPath(NULL, szStartupPath, CSIDL_STARTUP, TRUE);
if (!bRet)
return;
// 原文件地址
wcscat_s(szExePath, exePath);
HRESULT hr = CoInitialize(NULL);
if (SUCCEEDED(hr))
{
IShellLink *pIsl;
hr = CoCreateInstance(CLSID_ShellLink, NULL,
CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pIsl);
if (SUCCEEDED(hr))
{
IPersistFile* pIPF = NULL;
pIsl->SetPath(szExePath);
hr = pIsl->QueryInterface(IID_IPersistFile, (void**)&pIPF);
if (SUCCEEDED(hr))
{
int exeLength = lstrlen(exePath);
//创建快捷方式的目标地址
TCHAR szDir[MAX_PATH] = {};
memcpy_s(szDir, MAX_PATH, szStartupPath, wcslen(szStartupPath) * 2);
//printf("szStartupPath is %ls\nszDir is %ls\n", szStartupPath, szDir);
wcscat_s(szDir, L"\\svchost.lnk");
//printf("dir is %ls", szDir);
pIPF->Save(szDir, FALSE);
pIPF->Release();
}
pIsl->Release();
}
CoUninitialize();
}
}
// 注册表自启动 + 快速目录自启
void AutoRun()
{
// 获得程序全路径
wchar_t PathName[MAX_PATH] = {};
GetModuleFileName(NULL, PathName, MAX_PATH);
// 修改注册表,添加自动启动
// 默认权限
HKEY hKey;
// 打开注册表键
if (ERROR_SUCCESS != ::RegOpenKeyEx(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_WRITE, &hKey))
{
return;
}
// 修改注册表值,实现开机自启
if (ERROR_SUCCESS != ::RegSetValueExW(hKey, L"SystemSetting", 0, REG_SZ, (BYTE *)PathName, (1 + ::lstrlen(PathName)) * 2))
{
::RegCloseKey(hKey);
return;
}
// 关闭注册表键
::RegCloseKey(hKey);
// 添加到快速启动目录
StartupRun(PathName);
}
// 防双开
bool IsAlreadyRun()
{
HANDLE hMutex = NULL;
hMutex = ::CreateMutex(NULL, FALSE, L"kill_lol");
if (hMutex)
{
if (ERROR_ALREADY_EXISTS == ::GetLastError())
{
return true;
}
}
return false;
}
// 守护进程
DWORD WINAPI daemon(LPVOID lParam)
{
HANDLE event1;
HANDLE event2;
STARTUPINFOA si = { 0 };
PROCESS_INFORMATION pi = { 0 };
event1 = CreateEventA(NULL, FALSE, TRUE, "Local\\p1");
while (true)
{
if (!(event2 = OpenEventA(EVENT_MODIFY_STATE, FALSE, "Local\\p2")))
{
CreateProcessA("spoolsl.exe",
NULL,
NULL,
NULL,
NULL,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi
);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
}
CloseHandle(event2);
Sleep(500);
}
return 0;
}
// 赖毛自启动
DWORD WINAPI ThreadAutoRun(LPVOID lParam)
{
while (true)
{
AutoRun();
Sleep(2000);
}
}
int main()
{
// 1、防双开
if (IsAlreadyRun())
{
::exit(0);
}
DWORD ThreadId;
// 2、自启动
CreateThread(NULL, 0, ThreadAutoRun, NULL, 0, &ThreadId);
// 3、双守护进程
CreateThread(NULL, 0, daemon, NULL, 0, &ThreadId);
// 4、杀死LOL游戏相关进程
while (true)
{
// 创建一个进程快照
HANDLE hSnapProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 stcPe32 = { sizeof(PROCESSENTRY32) };
// 用API进行遍历快照
if (TRUE == Process32First(hSnapProcess, &stcPe32))
{
do
{
if (!wcscmp(L"WeGameMiniLoader.exe", stcPe32.szExeFile) || !wcscmp(L"wegame.exe", stcPe32.szExeFile) || !wcscmp(L"LeagueClient.exe", stcPe32.szExeFile)
|| !wcscmp(L"Client.exe", stcPe32.szExeFile))
{
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, stcPe32.th32ProcessID);
if (hProcess == NULL)
continue;
TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
}
} while (Process32Next(hSnapProcess, &stcPe32));
}
Sleep(1000);
}
return 0;
}
#include
#include
#include
// 隐藏控制台
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
// 快速启动目录启动
void StartupRun(LPCWSTR exePath)
{
// TODO: 在此处添加实现代码.
TCHAR szStartupPath[MAX_PATH] = {};
TCHAR szExePath[MAX_PATH] = {};
// 获取启动目录
BOOL bRet = ::SHGetSpecialFolderPath(NULL, szStartupPath, CSIDL_STARTUP, TRUE);
if (!bRet)
return;
// 原文件地址
wcscat_s(szExePath, exePath);
HRESULT hr = CoInitialize(NULL);
if (SUCCEEDED(hr))
{
IShellLink *pIsl;
hr = CoCreateInstance(CLSID_ShellLink, NULL,
CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pIsl);
if (SUCCEEDED(hr))
{
IPersistFile* pIPF = NULL;
pIsl->SetPath(szExePath);
hr = pIsl->QueryInterface(IID_IPersistFile, (void**)&pIPF);
if (SUCCEEDED(hr))
{
int exeLength = lstrlen(exePath);
//创建快捷方式的目标地址
TCHAR szDir[MAX_PATH] = {};
memcpy_s(szDir, MAX_PATH, szStartupPath, wcslen(szStartupPath) * 2);
//printf("szStartupPath is %ls\nszDir is %ls\n", szStartupPath, szDir);
wcscat_s(szDir, L"\\syshost.lnk");
//printf("dir is %ls", szDir);
pIPF->Save(szDir, FALSE);
pIPF->Release();
}
pIsl->Release();
}
CoUninitialize();
}
}
// 注册表自启动 + 快速目录自启
void AutoRun()
{
// 获得程序全路径
wchar_t PathName[MAX_PATH] = {};
GetModuleFileName(NULL, PathName, MAX_PATH);
// 修改注册表,添加自动启动
// 默认权限
HKEY hKey;
// 打开注册表键
if (ERROR_SUCCESS != ::RegOpenKeyEx(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_WRITE, &hKey))
{
return;
}
// 修改注册表值,实现开机自启
if (ERROR_SUCCESS != ::RegSetValueExW(hKey, L"SystemLocalHost", 0, REG_SZ, (BYTE *)PathName, (1 + ::lstrlen(PathName)) * 2))
{
::RegCloseKey(hKey);
return;
}
// 关闭注册表键
::RegCloseKey(hKey);
StartupRun(PathName);
}
// 防双开
bool IsAlreadyRun()
{
// TODO: 在此处添加实现代码.
HANDLE hMutex = NULL;
hMutex = ::CreateMutex(NULL, FALSE, L"kill_lol2");
if (hMutex)
{
if (ERROR_ALREADY_EXISTS == ::GetLastError())
{
return true;
}
}
return false;
}
// 赖毛自启动
DWORD WINAPI ThreadAutoRun(LPVOID lParam)
{
while (true)
{
AutoRun();
Sleep(2000);
}
}
int main()
{
// 1、防双开
if (IsAlreadyRun())
{
::exit(0);
}
DWORD ThreadId;
// 2、自启动
CreateThread(NULL, 0, ThreadAutoRun, NULL, 0, &ThreadId);
// 3、双进程守护
HANDLE event1;
HANDLE event2;
STARTUPINFOA si = { 0 };
PROCESS_INFORMATION pi = { 0 };
event2 = CreateEventA(NULL, FALSE, TRUE, "Local\\p2");
while (true)
{
if (!(event1 = OpenEventA(EVENT_MODIFY_STATE, FALSE, "Local\\p1")))
{
CreateProcessA("Kill_LOL.exe",
NULL,
NULL,
NULL,
NULL,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi
);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
}
CloseHandle(event1);
Sleep(500);
}
return 0;
}
链接:https://pan.baidu.com/s/1U6kyUpW5juDtwR-KqtOzzw?pwd=1234
提取码:1234