进程隐藏技术详解

进程隐藏技术详解
文章出处:网络 发布时间: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 >= 0×80000000)   // 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;
}

随机日志

发表评论

0 评论.

Leave a Reply



[ Ctrl + Enter ]

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word

CNXCT小组的博客 is Stephen Fry proof thanks to caching by WP Super Cache