在Delphi中隐藏程序进程

在开发某些软件的时候,为了保护程序自身,就需要用到隐藏程序进程。以下通过实例来讲解隐藏程序进程的方法:  

1、创建一个新的项目   Project1
选择File,New   Application。在表单Form1上放一Memo组件,一个OK按钮组件,改变OK按钮组件的Cation属性为   CreateProcess。再放一个timer组件。设置timer组件的Interval值为1000,每秒检查一次进程是否终止。  

2、在Unit1   Use节的Type后定义一个过程
procedure   EstablishProcess;
在Unit1   Use节的Var后定义一个变量:
piProcInfoGPS:PROCESS_INFORMATION;  

3、在Unit1   implementation节中编写EstablishProcess过程的实现代码如下:
procedure   EstablishProcess;
Var
  siStartupInfSTARTUPINFO;
  saProcess,saThread:SECURITY_ATTRIBUTES;
  fSuccess:boolean;
begin
  fSuccess:=false;
  ZeroMemory(@siStartupInfo,sizeof(siStartupInfo));
  siStartupInfo.cb:=sizeof(siStartupInfo);
  saProcess.nLength:=sizeof(saProcess);
  saProcess.lpSecurityDescriptor:=PChar(nil);
  saProcess.bInheritHandle:=true;
  saThread.nLength:=sizeof(saThread);
  saThread.lpSecurityDescriptor:=PChar(nil);
  saThread.bInheritHandle:=true;
  fSuccess:=CreateProcess(PChar(nil),‘c:\sr350\Sr350buff‘,@saProcess,@saThread,false,
  CREATE_DEFAULT_ERROR_MODE,Pchar(nil),Pchar(nil),siStartupInfo,piProcInfoGPS);
  if(   not   fSuccess)then
    Form1.Memo1.Lines.Add(‘Create   Process   Sr350buff   fail.‘)
  else
    Form1.Memo1.Lines.Add(‘Create   Process   Sr350buff   success.‘)
end;
4、在CreateProcess按钮的OnClick事件中调用过程
EstablishProcess;
5、为Timer1的OnTimer事件编写代码:
Procedure   TForm1.Timer1Timer(Sender:   TObject);
Var
  dwExitCode:DWORD;
  fprocessExit:boolean;
Begin
  dwExitCode:=0;
  fprocessExit:=false;
  fprocessExit:=GetExitCodeProcess(piProcInfoGPS.hProcess,dwExitCode);
  if(fprocessExit   and   (dwExitCode<>STILL_ACTIVE))then
  begin
    Memo1.Lines.Add(‘SR350buff.exe进程终止‘);
    CloseHandle(piProcInfoGPS.hThread);
    CloseHandle(piProcInfoGPS.hProcess);
    EstablishProcess;
  end;
End;
6、程序中设可执行文件名为c:\sr350\sr350buff.exe,所以c:盘\sr350目录下需有sr350buff.exe文件。
7、编译联接,运行project1,单击CreateProcess可见c:\sr350\sr350buff.exe启动。关掉sr350buff.exe进程,可见sr350buff.exe自动再启动。

  

时间: 2024-11-07 00:56:17

在Delphi中隐藏程序进程的相关文章

Delphi中增强程序的不同Windows版本的兼容性技巧

在开发过程中,一个程序(DLL/EXE)经常需要同时兼容不同版本的Windows(XP.WIN7 ...),但是由于新版本的Windows某些API在旧版本不存在,如果程序使用external引入API,则会导致在旧版本Windows中运行时提示“找不到某某程序文件路径...”."无法加载DLL...",因为在旧版本Windows中运行EXE或DLL,系统会先检测external引入的API,如果找不到某个API,系统会直接报错,无法运行,这时候Delphi提供了关键字 delayed

Delphi 中的DLL 封装和调用对象技术(刘艺,有截图)

Delphi 中的DLL 封装和调用对象技术本文刊登2003 年10 月份出版的Dr.Dobb's 软件研发第3 期刘 艺摘 要DLL 是一种应用最为广泛的动态链接技术但是由于在DLL 中封装和调用对象受到对象动态绑定机制的限制使得DLL 在封装对象方面有一定的技术难度导致有些Delphi 程序员误以为DLL 只支持封装函数不支持封装对象本文着重介绍了DLL 中封装和调用对象的原理和思路并结合实例给出了多种不同的实现方法关键字动态链接库DLL 对象接口虚方法动态绑定类引用面向对象1 物理封装与动

把当前进程变为一个系统服务,从而在任务列表中把程序隐藏起来

function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord; stdcall; external ’KERNEL32.DLL’;  {把当前进程变为一个系统服务,从而在任务列表中把程序隐藏起来} procedure TForm1.Button1Click(Sender: TObject); begin RegisterServiceProcess(GetCurrentProcessID,RSP_SIMPLE_SERVI

奇淫巧技之程序启动后在进程列表中隐藏密码等关键信息2

在上一篇总结中,在进程列表中隐藏密码是通过在main函数中做处理来隐藏的. 如下: 1 int _main(int argc, char* argv[], char** envp) { 2 3 省略中间一些代码内容 4 5 // hide password from ps output 6 7 for (int i = 0; i < (argc - 1); ++i) { 8 9 if (!strcmp(argv[i], "-p") || !strcmp(argv[i], &quo

[转]Delphi中,让程序只运行一次的方法

program onlyRunOne; uses Forms,Windows,SysUtils, Dialogs, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} var myMutex:HWND; begin myMutex:=CreateMutex(nil,false,'11111'); //名称只能全系统唯一. if WaitForSingleObject(myMutex,0)<>wait_TimeOut then begin Application.I

[delphi技术]隐藏/显示任务栏-程序不在任务显示-全面控制Windows任务栏

1.隐藏任务条 var  h:THandle; //变量h:=FindWindow('Shell_TrayWnd',nil);ShowWindow(h,SW_hide); 2.显示任务条h:=FindWindow('Shell_TrayWnd',nil);ShowWindow(h,SW_SHOW); 3.怎样在Delphi中调用API函数使任务不在任务栏中显示出来 SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW); Sh

如何在 Linux/Unix/Windows 中发现隐藏的进程和端口

unhide 是一个小巧的网络取证工具,能够发现那些借助 rootkit.LKM 及其它技术隐藏的进程和 TCP/UDP 端口.这个工具在 Linux.UNIX 类.MS-Windows 等操作系统下都可以工作.根据其 man 页面的说明: Unhide 通过下述三项技术来发现隐藏的进程. 进程相关的技术,包括将 /proc 目录与 /bin/ps 命令的输出进行比较. 系统相关的技术,包括将 /bin/ps 命令的输出结果同从系统调用方面得到的信息进行比较. 穷举法相关的技术,包括对所有的进程

Delphi 7 在程序中直接执行SQL脚本文件

Delphi 7 在程序中直接执行SQL脚本文件 在处理MSDE一些操作中.需要执行一些SQL脚本.有的是从SQLServer 2000中生成的SQL为后缀的脚本.在MSDE中没有企业管理器,操作都是在程序中完成的.所以用以下函数来执行SQL脚本. //执行一个SQL角本文件,文件只能是ANSI编码的.//如果文件是UNICODE编码的话,则会乱码.var  s:string;  sqltext : string;  sqlfile : TextFile;begin  if OpenDialog

delphi中获得进程列表或想要的进程(枚举进程、遍历进程)

一个常见的编程任务是枚举所有运行的"应用程序".Windows 任务管理器就是一个很好的例子.它用两种方式列出"应用程序".任务管理器的第一个选项卡列出桌面上的所有"应用程序窗口".第二个选项卡列出系统中的所有"进程".本文提供了如何执行这些任务的详细信息. 枚举顶层窗口如果将枚举进程与枚举桌面上的顶层窗口进行比较,那么枚举顶层窗口可能更容易一些.要枚举顶层窗口,请使用 EnumWindows() 函数.不要使用 GetWin