要给学校机房作管理软件,98下可以隐藏不被关闭,2000下可以被关闭,怎么才能禁止?
解决方案 »
- Delphi图书馆系统设计 错误不知道如何改,望高手们指教
- 循环保存WORD到数据库问题
- 怎么把一个数组,存到一个TFileStream
- 想做一个简单的FTP工具自己用~!不知道该怎么做。求教~~!!那里有现成了参考一下那就更好了~~
- 向大哥请教:怎样把用Access建立的表与应用程序相连接?
- 请教高手:如何取得TRICHEDIT当前行再屏幕中的位置
- 能否用TTS用女声读中文?
- DELPHI 6.0 序列号?????
- 如何实现:用一条横线分割下拉菜单,就像浏览器中的一样(如:用横线将"文件"中的"另存为"和"页面设置"分开)
- 用delphi6,第一个多线程测试程序便崩溃~请大家来测试
- 关于QuickReport预览时图片显示正确,但有时打印时图片显示为黑色图片,
- 在Delphi 中如何像金山词霸那样读取界面上的单词
九天龙皇
摘 要:防止程序被关闭
关键字:关闭
类 别:系统控制
让我们来分析一下,你关闭程序有几种方法:点X,按Alt + F4,从关闭程序对话框中选结束任务,点标题栏中的关闭,点任务中的关闭。我们要做的,就是让X消失,Alr + F4失效,让程序从关闭程序和任务栏中消失,让标题栏上的菜单失效.
让X消失很easy,把Form的BorderIcons中所有属性都设为Fasle;
Alt+F4失效:
把Form的KeyPreview设为True
然后响应OnKeyDown事件:procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);begin if (Key = VK_F4) and (ssAlt in shift) then Key := 0;end; 让程序从关闭程序和任务栏中消失:这个技术锦囊中有啊,这个就不写了。
unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus;type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; Button2: TButton; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end;var Form1: TForm1; function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';implementation{$R *.DFM}procedure TForm1.Button2Click(Sender: TObject);beginbeep;showmessage('选错了吧,没关系,重选!');end;procedure TForm1.Button1Click(Sender: TObject);beginbeep;showmessage('我就知道!');close;end;procedure TForm1.N2Click(Sender: TObject);beginshowmessage('这是个死缠烂打的程序,你不选yes是不能退出的,嘿嘿')end;CoDelphi.com版权所有,未经允许,不得进行任何形式转载procedure TForm1.FormCreate(Sender: TObject);begin RegisterServiceProcess( GetCurrentProcessID, 1 ); Form1.KeyPreview:=True;FormStyle:=fsStayOnTop;SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);end;procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);begin if (Key = VK_F4) and (ssAlt in shift) then key:=0;end;end.
然后你的程序就可以无法关闭了。用这些方法你可以让程序在后台监视..
在delphi5 for winme 下通过.
程序改写为DLL结构,挂靠Explorer.exe上运行
好处:没进程实体,普通进程查看无效
缺点:可以通过代码叫Explorer.exe Unload你的Dll,呵呵,还有Explorer出错时,会重新启用,那个时候需要重新挂靠你的DLL
改进:用Debug权限挂靠WinLogon.exe,哈哈,安全系数就高很多,WinLogon死了,你也就死机了LYSoft主页的http://ly.activepower.net/projects/No Ctrl+Alt+Del.rar是DLL挂靠方法的例子,修改就可用2)API Hook大发
关闭程序的实质是什么?TerminateProcess的API!
只要你的Application.Title:=‘’就不会出现在任务管理器的第一页
第二页会出现的,但不怕,我Hook了TerminateProcess就可以保证安全了
TerminateProcess可以Hook?可以,但Hook了没用,Handle是未知的
因此实质上要Hook的是OpenProcess,只要是我的进程就拒绝打开
好处:不怕你见的到,你就是关不了我
缺点:CMD下的命令行方法Hook不到
改进:能够Hook系统服务就一定可以,可惜难度大,需要编写驱动LYSoft主页的http://ly.activepower.net/projects/API Hook.rar是API Hook方法的例子,修改就可用3)NT内核修改大发
修改NT系统内核对象PsLoadedModuleList上的ActiveProcessLink链表就可以在系统上“失踪”了,但实现这个功能需要驱动支持,没驱动的方法只能适合XP/2003,因为Nt5.1以上的ZwSystemDebugControl API才能支持内核访问
好处:你怎么都见不到进程的
缺点:难度过大,用内核工具仍然可以看见的,很多RootKit木马就用这个方法的
改进:几乎是终极大法,没什么别的好方法了。LYSoft主页的http://ly.activepower.net/projects/NTLowLevel.exe是演示程序,不提供代码,涉及技术机密,不便奉告关键代码如下
function HideProcess: boolean;
label Err;
var
EProcess : DWord;
hPM, FLink, BLink: Cardinal;
begin
Result := false;
EProcess := GetCurrentEProcess;
if EProcess < 1 then Exit;
if not ReadVirtualMemory(EProcess+$88, @FLink, 4) then Exit;
if not ReadVirtualMemory(EProcess+$8C, @BLink, 4) then Exit;
if not WriteVirtualMemory(FLink+4, @BLink, 4) then Exit;
if not WriteVirtualMemory(BLink, @FLink, 4) then Exit;
Result := true;
end;不要问为什么了,你需要NTDDK的知识才能明白的:)4)远程线程大发
没有实体的存在,没进程,没DLL,只有代码
把代码直接注入进程空间VirtualAllocEx,用CreateRemoteThread运行,
好处:没可见的实体,隐蔽性最强
缺点:适合于简单代码,复杂的难以保证其可靠性和稳定性,病毒的最爱
改进:不需要什么了这个没演示了,呵呵:)
注入某个进程空间,要涉及到API定位等一系列病毒式操作,在对方的身体运行呀
简单的代码可以,复杂的功能就很不适合,一般的程序根本就不适合,所以除非写病毒,否则不建议用这样的方法,因为连调试都变得很难这个问题,强烈推荐到FAQ了!!以方便各位有需要的人:)LYSoft http://lysoft.7u7.net
使用ToolHelp32 API列表进程及其线程,SuspendThread挂起那2个相互检查的进程
然后逐个TerminateProcess结束任务,嘿嘿