首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么禁止某个程序运行

2012-01-23 
如何禁止某个程序运行?在我的程序运行期间如何禁止某个程序运行?不需要枚举窗口或者FindWindow的方案。[解

如何禁止某个程序运行?
在我的程序运行期间如何禁止某个程序运行?不需要枚举窗口或者FindWindow的方案。

[解决办法]
你只需要在注册表的
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
中加入
DisallowRun=DWORD:01
再添加以下主键
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\DisallowRun
加入
1="cs.EXE"
如此便限制了当前用户运行"cs.EXE"

[解决办法]
1、映像劫持,修改注册表
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\111.EXE]
"Debugger"="d:\\1.exe"

2、Hook CreateProcess

3、Hook NtCreateProcessEx
[解决办法]
截止MSDN片段 (自己开个线程,检测下面片段)

if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return;
cProcesses = cbNeeded / sizeof(DWORD);

for ( i = 0; i < cProcesses; i++ )
if( aProcesses[i] != 0 )
PrintProcessNameAndID( aProcesses[i] );




void PrintProcessNameAndID( DWORD processID )
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");

HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );


if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;

if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), 
&cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName, 
sizeof(szProcessName)/sizeof(TCHAR) );
}
}


/////如果szProcessName是你要求的进程。。 TerminateProcess

CloseHandle( hProcess );
}


[解决办法]
再教你一种

C/C++ code
//VC-ConsoleWithApi  #include   //提权函数  void RaiseToDebugP()  {  HANDLE hToken;  HANDLE hProcess = GetCurrentProcess();  if ( OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) )  {    TOKEN_PRIVILEGES tkp;    if ( LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid) )    {     tkp.PrivilegeCount = 1;     tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;          BOOL bREt = AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0) ;    }    CloseHandle(hToken);  }      }    BOOL OccupyFile( LPCTSTR lpFileName )    {        BOOL    bRet;        //提升自身权限        RaiseToDebugP();     //打开一个pid为4的进程,只要是存在的进程,都可以     HANDLE hProcess = OpenProcess( PROCESS_DUP_HANDLE, FALSE, 4);    // 4为system进程号             if ( hProcess == NULL )        {                return FALSE;        }             HANDLE hFile;        HANDLE hTargetHandle;     //以独占模式打开目标文件     hFile = CreateFile( lpFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);                      if ( hFile == INVALID_HANDLE_VALUE )        {            CloseHandle( hProcess );            return FALSE;        }          //把文件句柄复制到pid=4的进程中去,这样,只要pid=4的进程不退出,谁也动不了目标文件    bRet = DuplicateHandle( GetCurrentProcess(), hFile, hProcess, &hTargetHandle,             0, FALSE, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE);             CloseHandle( hProcess );             return bRet;    }            //入口函数    int main()    {        OccupyFile("D:\\Program Files\\工具软件\\任务管理.exe");             return 0;    }
[解决办法]
探讨
再教你一种

C/C++ code



//VC-ConsoleWithApi
#include

//提权函数
void RaiseToDebugP()
{
HANDLE hToken;
HANDLE hProcess = GetCurrentProcess();
if ( OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken) )
{
TOKEN_PRIVILEGES tkp;
if ( LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid) )
{
tkp.PrivilegeCount = 1…


[解决办法]
探讨

这种简单的Ring3下文件占坑一点价值也没有。Process Explorer列出内核对象,句柄一关掉就没用了

您还不如全局SSDT Hook实在呢

[解决办法]

[解决办法]
又是驱动!

热点排行