进程隐藏技术详解

进程隐藏技术详解
文章出处:网络 发布时间:2005-09-03
:如何让程序在后台运行??help!!!有什么方法或软件可以让程序在后台运行,而不会弹出窗口???(我用的是windows系统)
答:问题猜解:是否在你开了很多程序,或者网页后发现有很多窗口显示,觉得很恼火呢?如果你想不会弹出窗口,那就最小化,自然不见弹出窗口了。它也是在后台运行了,而且没有弹出窗口,但我想你问的问题可能不是证明简单,我们可以延伸下:
问题延伸:是否在你开了很多程序,或者网页后发现有很多窗口显示,在任务栏有很多窗口图标,这些是很烦恼的事情,你一定也想去掉这些窗口。

1,在软件开发过程中相关的窗口属性原本就有相应设置。比如豪杰,比如qq它们都可以在软件自身功能项中实现“窗口总在最前运行”,去掉即可。又比如Serv-U由两大部分组成,引擎和用户界面。Serv-U引擎(ServUDaemon.exe)其实是一个常驻后台的程序,也是Serv-U整个软件的心脏部分,它负责处理来自各种FTP客户端软件的FTP命令,也是负责执行各种文件传送的软件。在运行Serv-U引擎也就是ServUDaemon.exe文件后,我们看不到任何的用户界面,它只是在后台运行,通常我们无法影响它,但在ServUAdmin.exe中我们可以停止和开始它。另外木马程序的Server端为了隐藏自己,必须在设计中做到不让自己显示到任务栏或者系统进程控制器中,同时还不会影响其他程序的正常运行,当使用者电脑处于断线状态下,Server段不会发送任何信息到预设的端口上,而会自动检测网络状态直到网络连接好,Server会通过email或者其他形式将Server端系统资料通知Client端,同时接收Client发送出来的请求。

2,对qq用户来说。要隐藏起来了?怕领导或长辈老师看见,呵呵。想挂QQ,但别人发现了就关,有什么办法能把QQ任务栏的图标隐藏起来吗?答案是有,很简单,启动QQ,用鼠标单击QQ窗口左下角的主菜单,在弹出的快捷菜单中选“系统参数”,弹出“QQ参数设置”对话框,在“参数设置”标签中,取消“在任务栏显示图标”、“自动弹出信息”选择,选择“使用热键”复选项,您还可以选择“自定义热键”定义自己的热键,在“声音设置”标签中,选择“声音开关”中的“关闭声音”。另外把QQ用鼠标点住拉到屏幕顶部,它会自动隐藏的!用时`把鼠标放在那个位置就会出来。

3,对其他用户,在上班或者上课怕他人看见,可以使用软件实现彻底隐藏。
“任务栏”是Windows桌面底部一条灰色的区域,其左边是“开始”按钮,右边有一个小窗口显示时间、输入法等图标,也称为系统托盘。根据操作系统与软件安装与配置的不同,在“任务栏”上具有不同的图标,而且根据个人的需要和喜好我们也可以自定义“任务栏”内容。Windows 任务栏有自动隐藏功能:在任务栏空白处单击鼠标右键,选择“属性”,然后选中“自动隐藏任务栏”前的复选框再单击“确定”退出即可。但这个功能总让人感觉不太完美,原因是任务栏隐藏的不太好,总会在屏幕最底下留着一条线(露出一个“尾巴”),这给有些工作带来麻烦,比如你要用Print Screen 键截图的话,还要去掉那条线。网上找的一款名为TaskbarHide的免费软件,其主程序只有200多KB,最新版本为1.2b,http://home4.inet.tele.dk/mbresson/tbhide/tbhid12b.zip。
  下载后得到一个只有三个文件的压缩包,直接解压缩后双击执行文件,你会发现任务栏最右侧的系统托盘处出现了T 型图标,同时你会看到任务栏已经自动隐藏了,而且隐藏得非常彻底,不留一丝的痕迹。当我们把鼠标移到屏幕底部时,任务栏会自动弹出,比原来灵敏多了!
如果你想停止自动隐藏的话,只要用鼠标单击T 型图标即可,比原来方便得多。如果你想退出TaskbarHide,直接用鼠标右键点击T 型图标,从弹出的菜单中选择“Close”命令。怎么样,有了TaskbarHide,可以让Windows 自带的任务栏隐藏功能下岗了吧!

4,对编程爱好者来说,让程序通过按一组合键就隐藏到后台运行,再按一次又到前台。
可以通过hide和show来实现。首先,我们看一个术语,系统托盘是任务栏上一个很小的区域,隐藏在那儿的程序只显示小图标,比如说你的Outlook在收取新邮件的时候。任务栏是一个贯穿屏幕的工具条(ToolBar)。程序的图标就放在那儿,要隐藏任务栏图标,你可以用Application->Handle 调用API函数
ShowWindow。

ShowWindow(Application->Handle, SW_HIDE);

你想重新显示图标,简单地改变SW_HIDE而代之以SW_SHOW.

ShowWindow(Application->Handle, SW_SHOW);

注意:你可以通过设置主窗体的Visible 属性的值为false来隐藏它。

注意:用ShowWindow隐藏任务栏图标并不长久,某几个动作将使得任务栏图标重新出现。你可以移去程序的任务栏图标并让它不再出现,就是使应用程序的窗口成为工具窗口(Tool Windows)。工具窗口是不会有任务栏图标的,但是这样做有一个缺点就是程序不会在ALT+TAB中出现。把应用程序窗口编程工具窗口用的是API函数GetWindowLong和SetWindowLong

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
DWORD dwExStyle = GetWindowLong(Application->Handle, GWL_EXSTYLE);
dwExStyle |= WS_EX_TOOLWINDOW;
SetWindowLong(Application->Handle, GWL_EXSTYLE, dwExStyle);

try
{
Application->Initialize();
Application->createForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}

5,对黑客爱好者来说,木马程序的隐藏技术当然很受欢迎。
木马程序的服务器端,为了避免被发现,多数都要进行隐藏处理,下面让我们来看看木马是如何实现隐藏的。 说到隐藏,首先得先了解三个相关的概念:进程,线程和服务。我简单的解释一下。
  进程:一个正常的Windows应用程序,在运行之后,都会在系统之中产生一个进程 ,同时,每个进程,分别对应了一个不同的PID(Progress ID, 进程标识符)这个进程会被系统分配一个虚拟的内存空间地址段,一切相关的程序操作,都会在这个虚拟的空间中进行。
线程:一个进程,可以存在一个或多个线程,线程之间同步执行多种操作,一般地,线程之间是相互独立的,当一个线程发生错误的时候,并不一定会导致整个进程的崩溃。
  服务:一个进程当以服务的方式工作的时候,它将会在后台工作,不会出现在任务列表中,但是,在Windows NT/2000下,你仍然可以通过服务管理器检查任何的服务程 序是否被启动运行。
  想要隐藏木马的服务器端,可以伪隐藏,也可以是真隐藏。伪隐藏,就是指程序的 进程仍然存在,只不过是让他消失在进程列表里。真隐藏则是让程序彻底的消失,不以 一个进程或者服务的方式工作。

伪隐藏的方法,是比较容易实现的,只要把木马服务器端的程序注册为一个服务就可以了,这样,程序就会从任务列表中消失了,因为系统不认为他是一个进程,当按下Ctrl+Alt+delete的时候,也就看不到这个程序。但是,这种方法只适用于Windows9x的系统 ,对于Windows NT,Windows 2000等,通过服务管理器,一样会发现你在系统中注册过的服务。难道伪隐藏的方法就真的不能用在Windows NT/2000下了吗?当然还有办法,那就是API的拦截技术,通过建立一个后台的系统钩子,拦截PSAPI的EnumProcessModules 等相关的函数来实现对进程和服务的遍历调用的控制,当检测到进程ID(PID)为木马程序的服务器端进程的时候直接跳过,这样就实现了进程的隐藏,金山词霸等软件,就是使用了类似的方法,拦截了TextOutA,TextOutW函数,来截获屏幕输出,实现即时翻译的。同样,这种方法也可以用在进程隐藏上。
当进程为真隐藏的时候,那么这个木马的服务器部分程序运行之后,就不应该具备一般进程,也不应该具备服务的,也就是说,完全的溶进了系统的内核。也许你会觉得奇怪,刚刚不是说一个应用程序运行之后,一定会产生一个进程吗?的确,所以我们可以不把他做成一个应用程序,而把他做为一个线程,一个其他应用程序的线程,把自身注入其他应用程序的地址空间。而这个应用程序对于系统来说,是一个绝对安全的程序,这样,就达到了彻底隐藏的效果,这样的结果,导致了查杀黑客程序难度的增加。
出于安全考虑,我只给出一种通过注册服务程序,实现进程伪隐藏的方法,对于更复杂 ,高级的隐藏方法,比如远程线程插入其他进程的方法,请参阅 ShotGun的文章。《NT 系统下木马进程的隐藏与检测》(出自http://www.patching.net)
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

    try

    {

    DWORD dwVersion = GetVersion();  //取得Windows的版本号
        if (dwVersion >= 0x80000000)   // Windows 9x隐藏任务列表
        {
          int (CALLBACK *rsp)(DWORD,DWORD);
         HINSTANCE dll=LoadLibrary(“KERNEL32.DLL”);//装入KERNEL32.DLL
          rsp=(int(CALLBACK

*)(DWORD,DWORD))GetProcAddress(dll,”RegisterServiceProcess”);
//找到RegisterServiceProcess的入口
          rsp(NULL,1);  //注册服务
          FreeLibrary(dll);  //释放DLL模块
        }
    }
    catch (Exception &exception)  //处理异常事件
    {

//处理异常事件

    }
    return 0;
}

关注微信公众号,手机阅读更方便: 程序员的阅微草堂

知识共享许可协议莿鸟栖草堂CFC4N 创作,采用 知识共享 署名-非商业性使用-相同方式共享(3.0未本地化版本)许可协议进行许可。基于http://www.cnxct.com上的作品创作。转载请注明转自:进程隐藏技术详解

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.