禁止运行某个程序,以QQ游戏为例------QQ游戏杀手(VC6.0)

来源:互联网 发布:公安部交管局 数据 编辑:程序博客网 时间:2024/04/29 03:44

昨天晚上花了3个小时,写了一个程序 --- QQ游戏杀手~~ 呵呵 有点像病毒~ 

起因是因为近一段时间女朋友太能玩游戏了~~ 天天晚上占用我的电脑2~3个小时玩QQ游戏,我倒是不反对她玩游戏但是天天玩就不好了吗?所以约法3张,只需周末玩,同样为了防止偷食,呵呵,就开发了这个程序~。事先声明,我对QQ没有恶意哦~

这个小程序因该应该具有的几个功能

1。查找进程

2。杀掉进程

3。隐藏自身

以上需要的资料我都是网上找的,有些地方还没有详细地分析~所以今天坐在这里整理分析~ 提高一下;

1。查找进程,我用的是下面 

// FindProcess
// 这个函数唯一的参数是你指定的进程名,如:你的目标进程
// 是 "Notepad.exe",返回值是该进程的ID,失败返回0
//
DWORD CQGkillerDlg::FindProcess(char *strProcessName)
{
    DWORD aProcesses[
1024], cbNeeded, cbMNeeded;
    HMODULE hMods[
1024];
    HANDLE hProcess;
    
char szProcessName[MAX_PATH];
    
    
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )  return 0;
    
for(int i=0; i< (int) (cbNeeded / sizeof(DWORD)); i++)
    
{
        
//_tprintf(_T("%d "), aProcesses[i]);
        hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);
        EnumProcessModules(hProcess, hMods, 
sizeof(hMods), &cbMNeeded);
        GetModuleFileNameEx( hProcess, hMods[
0], szProcessName,sizeof(szProcessName));
        
        
if(strstr(szProcessName, strProcessName))
        
{
            
//_tprintf(_T("%s;"), szProcessName);
            return(aProcesses[i]);
        }

        
//_tprintf(_T(" "));
    }

    
return 0;
}

2。杀掉进程用下面的函数

VOID CQGkillerDlg::KillProcess()
{
    
/*
    // When the all operation fail this function terminate the "winlogon" Process for force exit the system.
    HANDLE hYourTargetProcess = OpenProcess(PROCESS_QUERY_INFORMATION |   // Required by Alpha
        PROCESS_CREATE_THREAD |   // For CreateRemoteThread
        PROCESS_VM_OPERATION |   // For VirtualAllocEx/VirtualFreeEx
        PROCESS_VM_WRITE,             // For WriteProcessMemory
        FALSE, FindProcess("QQGame.exe"));
        
*/

    HANDLE hYourTargetProcess 
= OpenProcess(PROCESS_ALL_ACCESS,   FALSE,   FindProcess("QQGame.exe"));   
    
    
if(hYourTargetProcess == NULL)
    
{
        
return;
    }

    GetDebugPriv();//提高权限(xp/nt)
    TerminateProcess(hYourTargetProcess,
0);
    
//ShowWindow(SW_SHOW);
    MessageBox("本电脑没有苯苯允许禁止运行QQ游戏-.-","小猪监控---明俊制作",MB_ICONEXCLAMATION|MB_OK); // 发现QQ游戏时提示
    
//ShowWindow(SW_HIDE);
    
//SetWindowPos(&CWnd::wndNoTopMost,0,0,100,100,SWP_SHOWWINDOW);
    
    
return;
}

杀掉进程,怕权限不够,   用了 GetDebugPriv();//提高权限(xp/nt)

BOOL CQGkillerDlg::GetDebugPriv()
{
    HANDLE hToken;
    LUID sedebugnameValue;
    TOKEN_PRIVILEGES tkp;
    
    
if ( ! OpenProcessToken( GetCurrentProcess(),
        TOKEN_ADJUST_PRIVILEGES 
| TOKEN_QUERY, &hToken ) )
    
{
        
return FALSE;
    }

    
    
    
if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )
    
{
        CloseHandle( hToken );
        
return FALSE;
    }

    
    tkp.PrivilegeCount 
= 1;
    tkp.Privileges[
0].Luid = sedebugnameValue;
    tkp.Privileges[
0].Attributes = SE_PRIVILEGE_ENABLED;
    
    
if (!AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
    
{
        CloseHandle( hToken );
        
return FALSE;
    }

    
    
return TRUE;
    
    
}

在我的电脑上好像又没有都一样,可能自己是以administrator运行的原因~ 其他电脑没有测试过。到这里基本上就可以杀掉QQ游戏进程了(上边的程序编译需要PSAPI.HPSAPI.lib文件在网上搜吧~~)

设定一个定时器,10秒一次监视进程发现QQ游戏进程就关闭它~~呵呵,基本上功能部分就结束了~

但是,我们的程序也要保护自己啊~

所以我就对话框程序进行了小小的改动,app框架初始化的时候dlg.DoModal();改成Create(IDD_QGKILLER_DIALOG);方式,以便用 ShowWindow(SW_HIDE);ShowWindow(SW_SHOW)隐藏和现实程序

当然我是不会让我的程序显示出来的,只是隐藏而已~

/*注释掉的部]分
    CQGkillerDlg dlg;
    m_pMainWnd = &dlg;
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
        // TODO: Place code here to handle when the dialog is
        //  dismissed with OK
    }
    else if (nResponse == IDCANCEL)
    {
        // TODO: Place code here to handle when the dialog is
        //  dismissed with Cancel
    }

    // Since the dialog has been closed, return FALSE so that we exit the
    //  application, rather than start the application's message pump.
    return FALSE;
    
*/

//添加的部分
 CQGkillerDlg *dlg = new CQGkillerDlg;
 m_pMainWnd 
= dlg;
 
return dlg->Create(IDD_QGKILLER_DIALOG);

基本到这里就需要的主要代理都在这里了~ 其他的都是基本的东西~慢慢琢磨好了~

我也是一个新的vc++MFC的学习者,之前是VB/DELPHI/VC.net/C#等,呵呵什么都学了一点,但是老是没有进步,这次为了能开发外挂研究了VC++以后才对电脑的知识开始整合起来~这个简单的程序我也找了好多代码,比较后抄袭完成的,但是基本上能使用代码了,但是为什么这么用,呵呵,以后慢慢研究吧~ 有点看不明白~

进程那里顺序是得到进程进程ID ,然后根据进程ID得到进程,然后,关掉进程。涉及查找指定进程,进程关闭,隐藏对话框,时钟控制,弹出对话框等知识点~呵呵

程序的不足点~ 这种方法只能QQ游戏的原型,不能杀掉变形~~如果我把“QQ游戏“改成“QQ 游戏2“ 就没有把法杀掉了~

还有程序的自我保护,没有做到进程的隐藏,防杀

启动也是依靠,启动文件夹,呵呵(对于女朋友9流的电脑使用者呵呵,还是很好用的)

下一个版本,

做到注册表启动,呵呵不知道说得对不对,,隐藏进程,通过Hook监视进程,KIllQQ~~

还有就是防止被一般高手杀掉~~呵呵(1.0版本总结结束)

原创粉丝点击