禁止程序运行

来源:互联网 发布:淘宝stylenanda真假 编辑:程序博客网 时间:2024/05/04 16:17
禁止程序运行的方式有很多种,第一种方法是写一个单独的程序并且能够在开机的时候自动运行,而这个程序的作用就是监视进程信息,如果发现目标进程则立即把它干掉,从而达到禁止程序运行的目的。第二种方法是写一个服务,这种方法个人觉得比较隐蔽。下面我就拿第二种方法作一下讲解。
  
  写服务的方法也有很多,而笔者比较喜欢的是用c来写,用c写服务比较直观,也比较随心所欲。如果有的读者不知道该如何写windows下的服务程序,请自行查阅相关资料。下面就给出程序的源代码。
  
  #include
  #include
  #include
  #include
  #include
  #define SLEEP_TIME 5000
  #define LOGFILE "C:\\MemoryStatus\\memstatus.txt"
  
  ////////////////////////////////////////////////////////////
  // Declare several global variables to share
  // their values across multiple functions of your program.
  ////////////////////////////////////////////////////////////
  SERVICE_STATUS     ServiceStatus;
  SERVICE_STATUS_HANDLE  hStatus;
  
  ////////////////////////////////////////////////////////////
  // Make the forward definitions of functions prototypes.
  //
  ////////////////////////////////////////////////////////////
  void ServiceMain(int argc, char** argv);
  void ControlHandler(DWORD request);
  int InitService();
  int ScanProcess();
  
  int WriteToLog(char* str)
  {
  FILE* log;
  log = fopen(LOGFILE, "a+");
  if (log == NULL){
  OutputDebugString("Log file open failed.");
  return -1;
  }
  fprintf(log, "%s\n", str);
  fclose(log);
  return 0;
  }
  
  // Service initialization
  int InitService()
  {
  OutputDebugString("Monitoring started.");
  int result;
  result = WriteToLog("Monitoring started.");
  return(result);
  }
  
  // Control Handler
  void ControlHandler(DWORD request)
  {
  switch(request)
  {
  case SERVICE_CONTROL_STOP:
  OutputDebugString("Monitoring stopped.");
  WriteToLog("Monitoring stopped.");
  
  ServiceStatus.dwWin32ExitCode = 0;
  ServiceStatus.dwCurrentState = SERVICE_STOPPED;
  SetServiceStatus (hStatus, &ServiceStatus);
  return;
  
  case SERVICE_CONTROL_SHUTDOWN:
  OutputDebugString("Monitoring stopped.");
  WriteToLog("Monitoring stopped.");
  
  ServiceStatus.dwWin32ExitCode = 0;
  ServiceStatus.dwCurrentState = SERVICE_STOPPED;
  SetServiceStatus (hStatus, &ServiceStatus);
  return;
  
  default:
  break;
  }
  
  // Report current status
  SetServiceStatus (hStatus, &ServiceStatus);
  
  return;
  }
  
  void ServiceMain(int argc, char** argv)
  {
  int error;
  
  ServiceStatus.dwServiceType =
  SERVICE_WIN32;
  ServiceStatus.dwCurrentState =
  SERVICE_START_PENDING;
  ServiceStatus.dwControlsAccepted  =
  SERVICE_ACCEPT_STOP |
  SERVICE_ACCEPT_SHUTDOWN;
  ServiceStatus.dwWin32ExitCode = 0;
  ServiceStatus.dwServiceSpecificExitCode = 0;
  ServiceStatus.dwCheckPoint = 0;
  ServiceStatus.dwWaitHint = 0;
  
  hStatus = RegisterServiceCtrlHandler(
  "MemoryStatus",
  (LPHANDLER_FUNCTION)ControlHandler);
  if (hStatus == (SERVICE_STATUS_HANDLE)0)
  {
  // Registering Control Handler failed
  return;
  }
  
  // Initialize Service
  error = InitService();
  if (error)
  {
  // Initialization failed
  ServiceStatus.dwCurrentState =
  SERVICE_STOPPED;
  ServiceStatus.dwWin32ExitCode = -1;
  SetServiceStatus(hStatus, &ServiceStatus);
  return;
  }
  // We report the running status to SCM.
  ServiceStatus.dwCurrentState =
  SERVICE_RUNNING;
  SetServiceStatus (hStatus, &ServiceStatus);
  
  // MEMORYSTATUS memory;
  // The worker loop of a service
  while (ServiceStatus.dwCurrentState ==
  SERVICE_RUNNING)
  {
  int flag;
  
  if(ScanProcess())
  flag=1;
  else
  flag=0;
  
  
  if (flag==0)
  {
  ServiceStatus.dwCurrentState = SERVICE_STOPPED;
  ServiceStatus.dwWin32ExitCode   = -1;
  SetServiceStatus(hStatus, &ServiceStatus);
  return;
  }
  Sleep(SLEEP_TIME);
  }
  return;
  }
  int ScanProcess()
  {
  PROCESSENTRY32 pe;
  char *name=(char *)malloc(sizeof(char)*128);
  if(name==NULL)
  {
  WriteToLog("无法分配内存!");
  return 0;
  }
  FILE *fp;
  HANDLE process;
  fp=fopen("C:\\MemoryStatus\\ScrutinyProcess.txt","rb");
  if(!fp)
  {
  WriteToLog("无法打开文件");
  return 0;
  }
  fgets(name,128,fp);
  HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  Process32First(hSnapshot,&pe);
  do{
  if(!strcmp(name,pe.szExeFile))
  {
  process=OpenProcess(PROCESS_TERMINATE,FALSE,pe.th32ProcessID);
  if(process)
  {
  TerminateProcess(process,0);
  WriteToLog(name);
  
  }
  }
  
  }while(Process32Next(hSnapshot,&pe));
  free(name);
  CloseHandle(hSnapshot);
  fclose(fp);
  return 1;
  }
  void main(int argc, char* argv[])
  {
  SERVICE_TABLE_ENTRY ServiceTable[2];
  ServiceTable[0].lpServiceName = "MemoryStatus";
  ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
  
  ServiceTable[1].lpServiceName = NULL;
  ServiceTable[1].lpServiceProc = NULL;
  // Start the control dispatcher thread for our service
  StartServiceCtrlDispatcher(ServiceTable);
  }
  
  把想要禁止运行的进程名字写在日志文件里就可以达到目的,如果不知道如何安装服务那你可要好好学习了^_^





///////////////////////////////////////////////////////////////////////////////////






只要在其安装目录下新建一个文件名为ws2_32.dll的文件,这样系统就会以文件出错误而禁止运行
本方法适用基于NT系统的WinXP,Win2000,Win2003!WinArray8没有试~~
比较险恶~~用的时候再删除该文件就是。
至于对付什么人~~嘿嘿,网吧上网的应该有感触。
想在自己电脑上禁止朋友玩游戏,又不能让人看出来是故意的(伤害感情),这招就够绝的~~
比如:
说qq吧,我的qq放在d:\qq\里面
你可以把我说的文件放在这个里面
就ok了,不过自己用的时候记得一定要删除~不然也是上不去的~
=================================================
原理:
当程序试图访问网络的时候,首先调用ws2_32.dll这个动态链接库!
但一般程序有个问题就是先找自己目录下面有没有这个文件,有个话就调用自己目录下面的!
否则的话就调用WIN目录下面的。。
=================================================
DLL 文件: ws2_32 或者 ws2_32.dll
DLL 名称: WinSock 2.0 32bit
描述:
ws2_32.dll是Windows Sockets应用程序接口,用于支持Internet和网络应用程序。




///////////////////////////////////////////////////////////////////////////////////
通过修改注册表禁止运行某些程序
                                       
用户可以通过修改注册表,来禁止运行某些具有危险性或不想让其运行的程序,以达到维护系统安全性的目的。
通过修改注册表禁止运行某些程序,可进行如下操作:
     (1)打开“注册表编辑器”。
     (2)选择HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer 注册表项。
     (3)单击右键,在弹出的快捷菜单中选择“新建”?“DWORD 值”命令,新建一个类型为REG_DWORD 的值项。
     (4)将该值项命名为“DisallowRun”。
     (5)双击该值项,在弹出的“编辑DWORD 值”对话框中的“数值数据”文本框中修改数值为“1”,“基数”选项组中选择“十六进制”选项。
     (6)右击Explorer 注册表项,在其弹出的快捷菜单中选择“新建”?“项”命令,新建一个Explorer 注册表项的子项。
     (7)将该子项命名为“DisallowRun”。
     (8)右击该子项,在弹出的快捷菜单中选择“新建”?“字串值”命令,新建一个类型为REG_SZ 的值项。
     (Array)将该值项命名为“1”,双击该值项,在弹出的“编辑字符串”对话框中的“数值数据”文本框中输入要禁止运行的程序名称。例如要禁止运行记事本程序,可输入“Notepad.exe”。
     (10)若要禁止多个程序,重复(8)~(Array)步即可。
     (11)设置完毕后,重新启动计算机即可。
    禁止后的程序,若通过“开始”菜单或资源管理器运行,则会出现如图15.30 所示
的“限制”对话框。
  
    注意:被禁止的程序单击“开始”按钮,选择“更多程序”|“附件”|“命令提示符”命令,在“命令提示符”窗口中输入“Notepad.exe”命令,仍然可以运行。