隐藏当前进程

恢复当前窗口的程序,由于当前进程有可能在全屏模式下运行,所以需要通过指定特定的热键使程序窗口消失,且不出现在任务栏上。下面介绍如何用Delphi实现。主要需要解决两个问题,即隐藏窗口和设定热键。

一.隐藏窗口

通过API函数GETACTIVEWINDOW获取当前窗口;函数ShowWindow(HWND,nCmdShow)的参数nCmdShow取SW_HIDE时将之隐藏,取SW_SHOW时将之显示。例如:showwindow(getactivewindow,sw_hide)。隐藏好窗体后,须记住窗体句柄以便恢复。

二.键盘监控

为了实现键盘监控须用到钩子。

以下是程序的源文件:

---HKHide.pas---
unit HKHide;
interface
uses
Windows, Messages, sysutils;
var
hNextHookHide: HHook;
HideSaveExit: Pointer;
hbefore:longint;
function KeyboardHookHandler(iCode: Integer;wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall; export;
function EnableHideHook: BOOL; export;
function DisableHideHook: BOOL; export;
procedure HideHookExit; far;
implementation
function KeyboardHookHandler(iCode: Integer;wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall; export;
const _KeyPressMask = $80000000;
var
f:textfile;
temp:string;
begin
Result := 0;
If iCode < 0 Then
begin
Result := CallNextHookEx(hNextHookHide, iCode, wParam, lParam);
Exit;
end;
// 侦测 Ctrl + Alt + F12 组合键
if ((lParam and _KeyPressMask) = 0) //按下时生效
and (GetKeyState(vk_Control) < 0)
and (getkeystate(vk_menu)<0) and (wParam = vk_F12) then
begin
Result := 1;
//文件不存在则创建
if not fileexists(c:\test.txt) then
begin
assignfile(f,c:\test.txt);
rewrite(f);
writeln(f,0);
closefile(f);
end
else begin
assignfile(f,c:\test.txt);
reset(f);
readln(f,temp);
hbefore:=strtoint(temp);
begin
hbefore:=getactivewindow;
temp:=inttostr(hbefore);
rewrite(f);
writeln(f,temp);
closefile(f);
ShowWindow(hbefore, SW_HIDE);
end
else begin
showwindow(hbefore,sw_show);
rewrite(f);
writeln(f,0);
closefile(f);
end;
end;
end;
end;
function EnableHideHook: BOOL; export;
begin
Result := False;
if hNextHookHide <> 0 then Exit;
// 挂上 WH_KEYBOARD 这型的 HOOK, 同时, 传回值必须保留下
// 来, 免得 HOOK 呼叫链结断掉
hNextHookHide := SetWindowsHookEx(WH_KEYBOARD,
KeyboardHookHandler,HInstance,0);
Result := hNextHookHide <> 0;
end;
function DisableHideHook: BOOL; export;
begin
if hNextHookHide <> 0 then
begin
Result:=True;
UnhookWindowshookEx(hNextHookHide); // 解除 Keyboard Hook
hNextHookHide:=0;
end
else
Result:=False;
end;
procedure HideHookExit;
begin
// 如果忘了解除 HOOK, 自动代理解除的动作
if hNextHookHide <> 0 then DisableHideHook;
ExitProc := HideSaveExit;
end;
end.
---HKPHide.dpr---
library HKPHide;
uses
HKHide in HKHide.pas;
exports
EnableHideHook,
DisableHideHook;
begin
hNextHookHide := 0;
hbefore:=0;
HideSaveExit := ExitProc;
ExitProc := @HideHookExit;
end.
文件制作好后选Build All编译成HKPHide.dll。
新建一个工程Project1
---Unit1.pas---
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function EnableHideHook: BOOL; external HKPHide.DLL;
function DisableHideHook: BOOL; external HKPHide.DLL;
procedure TForm1.Button1Click(Sender: TObject);
begin
if EnableHideHook then
ShowMessage(HotKey Testing...);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if DisableHideHook then
ShowMessage(HotKey Testing..., DONE!!);
end;
end.

运行程序按Button1后启动钩子,这时运行其他程序,按Ctrl+Alt+F12可将之隐藏,再按一下则恢复。以下程序在Delphi 4下通过。

时间: 2024-10-30 13:24:15

隐藏当前进程的相关文章

隐藏任意进程、目录/文件、注册表、端口

查找进程,目录/文件,注册表等操作系统将最终调用 ZwQueryDirectoryFile,ZwQuerySystemInformation,ZwXXXValueKey 等函数.要想拦截这些函数达到隐藏目的,需先自己实现以上函数,并修改系统维护的一个SYSCALL 表使之指向自己预先定义的函数.因 SYSCALL 表在用户层不可见,所以要写 DRIVE 在 RING 0 下才可修改.关于如何修改已有文章详细介绍过,这里不在详述.(可以参见 sysinternals.com 或 WebCrazy

打印机网络共享模式隐藏可疑进程导致共享打印罢工

打印机网络共享模式在办公工作中已 普遍使用,这 的确是节约成本.提高设备利用率的好方法.但在实际的局域网应用中有可能发生特殊的网络故障,下面是笔者实际工作中遇到一起特殊故障的解决过程,希望 对大家有所帮助.为了充分利用资源,办公室的打印机实行网络共享打印,共享打印机电脑的计算机名称是:cfnw-fd-yy-006,系统是Windows 2000 Professional.最近出现一个奇怪的故障:局域网中的所有电脑无法共享打印cfnw-fd-yy-006这台电脑上的打印机, 但是各电脑中的共享打印

Win2000下进程隐藏的一种方案

十分抱歉,匆匆写了几句代码有点bug,即"ZwOpenSection(&g_hMPM,SECTION_MAP_WRITE|SECTION_MAP_WRITE,&attributes)"使得第一次运行返回失败,请删除原文,改正为: pjf (jfpan20000@sina.com) 上次在CVC提到了这东西,因为很简单觉得没必要多说什么,但有人要求写全,所以补充几句: 很多帖子对此论题作了分析,比如APIHOOK.系统服务HOOK等等,至于远线程注入没有自己的进程,本不算

ring0检测隐藏进程

//网上得到一篇好文章 Ring0下搜索内存枚举隐藏进程 ,但是拿里面的代码来使用的时候发现并没有太多效果 //于是修改之,终于实现了最初的目标 //由于直接搜索内存,跟系统调度没什么关系,所以能够枚举到各种方法隐藏的进程 包括断链.抹PspCidTable...  //甚至能枚举到已经"死掉"的进程,本程序通过进程的ExitTime来判断进程是不是已经结束 //除非能够把EProcess结构修改掉,但这个实现难度可能比较大,不知有没有哪位大侠试过(PID我修改过),欢迎讨论 // /

各种木马隐藏技术全方位大批露

以前,我曾认为只要不随便运行网友发来的文件就不会中病毒或木马,但后来出现了利用漏洞传播的冲击波.震荡波;以前,我曾认为不上小网站就不会中网页木马,但后来包括国内某知名游戏网站在内的多个大网站均在其首页被黑客挂上了木马.从此,我知道:安全,从来没有绝对的. 虽然没有绝对的安全,但如果能知已知彼,了解木马的隐藏手段,对于木马即使不能百战百胜,也能做到及时发现,使损失最小化.那么,木马究竟是如何躲在我们的系统中的呢? 最基本的隐藏:不可见窗体+隐藏文件 木马程序无论如何神秘,但归根究底,仍是Win32

PowerShell隐藏不显示窗口的多种方法_PowerShell

启动PowerShell时隐藏自己的窗口 假如我在计划任务中定时通过Powershell.exe来执行一个脚本文件,我想隐藏这个窗口,此时我们可以考虑使用PowerShell.exe的选项参数: 复制代码 代码如下: -WindowStyle  将窗口样式设置为 Normal.Minimized.Maximized 或 Hidden. 复制代码 代码如下: PowerShell.exe -WindowStyle Hidden -file '您的脚本.ps1' 在PowerShell启动其它进程时

杀死指定进程名称的小VBS_vbs

以下是一小段杀死指定进程名字的小vbs,希望对大家有帮助. Function KillProc(strProcName) On Error Resume Next Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set arrProcesses = objWMIService.ExecQuery( "select * from win32_pro

Linux环境下的高级隐藏技术_unix linux

    摘要:本文深入分析了Linux环境下文件.进程及模块的高级隐藏技术,其中包括:Linux可卸载模块编程技术.修改内存映象直接对系统调用进行修改技术,通过虚拟文件系统proc隐藏特定进程的技术. 隐藏技术在计算机系统安全中应用十分广泛,尤其是在网络攻击中,当攻击者成功侵入一个系统后,有效隐藏攻击者的文件.进程及其加载的模块变得尤为重要.本文将讨论Linux系统中文件.进程及模块的高级隐藏技术,这些技术有的已经被广泛应用到各种后门或安全检测程序之中,而有一些则刚刚起步,仍然处在讨论阶段,应用

Win32.Hack.SdBot.cz Bot幽灵

病毒名称(中文):Bot幽灵 病毒别名: 威胁级别:★★★☆☆ 病毒类型:黑客程序 病毒长度:60416 影响系统:其它 病毒行为: 这是一种集IRC后门.蠕虫功能于一体的,通过网络共享和操作系统漏洞(MS03-026.MS02-061.MS03-007.MS04-011等)进行传播的病毒.病毒会尝试通过弱密码登陆目标系统.病毒还会在感染的电脑上打开后门接收攻击者发出的指令,然后连接特定的IRC服务器通知攻击者病毒的存在.病毒会扫描网段内的机器并猜测共享密码,占用大量网络带宽资源,容易造成局域网