如何让
程序在后台运行??有什么方法或
软件可以让程序在后台运行,而不会弹出窗口???(
windows系统)
8 ^7 C' z" ~8 `1 |3 `6 X; m! q/ Z$ m. ?. g7 D6 B B6 P
问题猜解:是否在你开了很多程序,或者网页后发现有很多窗口显示,觉得很恼火呢?如果你想不会弹出窗口,那就最小化,自然不见弹出窗口了。它也是在后台运行了,而且没有弹出窗口,但我想你问的问题可能不是证明简单,我们可以延伸下:
5 Y' `" H, \# J* f T8 X问题延伸:是否在你开了很多程序,或者网页后发现有很多窗口显示,在任务栏有很多窗口图标,这些是很烦恼的事情,你一定也想去掉这些窗口。
: ?( [# {6 J W/ h$ v. \: \
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发送出来的请求。
3 U4 f( }* g1 }- o0 E; ~2,对qq用户来说。要隐藏起来了?怕领导或长辈老师看见,呵呵。想挂QQ,但别人发现了就关,有什么办法能把QQ任务栏的图标隐藏起来吗?答案是有,很简单,启动QQ,用鼠标单击QQ窗口左下角的主菜单,在弹出的快捷菜单中选“系统参数”,弹出“QQ参数设置”对话框,在“参数设置”标签中,取消“在任务栏显示图标”、“自动弹出信息”选择,选择“使用热键”复选项,您还可以选择“自定义热键”定义自己的热键,在“声音设置”标签中,选择“声音开关”中的“关闭声音”。另外把QQ用鼠标点住拉到屏幕顶部,它会自动隐藏的!用时`把鼠标放在那个位置就会出来。
4 T6 h8 N: f$ M- i
3,对其他用户,在上班或者上课怕他人看见,可以使用软件实现彻底隐藏。
# I/ y( |4 p- f f
“任务栏”是Windows桌面底部一条灰色的区域,其左边是“开始”按钮,右边有一个小窗口显示时间、输入法等图标,也称为系统托盘。根据操作系统与软件安装与配置的不同,在“任务栏”上具有不同的图标,而且根据个人的需要和喜好我们也可以自定义“任务栏”内容。Windows 任务栏有自动隐藏功能:在任务栏空白处单击鼠标右键,选择“属性”,然后选中“自动隐藏任务栏”前的复选框再单击“确定”退出即可。但这个功能总让人感觉不太完美,原因是任务栏隐藏的不太好,总会在屏幕最底下留着一条线(露出一个“尾巴”),这给有些工作带来麻烦,比如你要用Print Screen 键截图的话,还要去掉那条线。网上找的一款名为TaskbarHide的免费软件,其主程序只有200多KB,最新版本为1.2b,
http://home4.inet.tele.dk/mbresson/tbhide/tbhid12b.zip。
) q" Q0 ~4 p. g$ j4 p- f
下载后得到一个只有三个文件的压缩包,直接解压缩后双击执行文件,你会发现任务栏最右侧的系统托盘处出现了T 型图标,同时你会看到任务栏已经自动隐藏了,而且隐藏得非常彻底,不留一丝的痕迹。当我们把鼠标移到屏幕底部时,任务栏会自动弹出,比原来灵敏多了!
4 u# c7 g4 D+ |3 L# E% w7 G
如果你想停止自动隐藏的话,只要用鼠标单击T 型图标即可,比原来方便得多。如果你想退出TaskbarHide,直接用鼠标右键点击T 型图标,从弹出的菜单中选择“Close”命令。怎么样,有了TaskbarHide,可以让Windows 自带的任务栏隐藏功能下岗了吧!
8 v: S0 ^; m4 M4,对编程爱好者来说,让程序通过按一组合键就隐藏到后台运行,再按一次又到前台。
' ?2 z3 b4 q, H u" T/ [可以通过hide和show来实现。首先,我们看一个术语,系统托盘是任务栏上一个很小的区域,隐藏在那儿的程序只显示小图标,比如说你的Outlook在收取新邮件的时候。任务栏是一个贯穿屏幕的工具条(ToolBar)。程序的图标就放在那儿,要隐藏任务栏图标,你可以用Application->Handle 调用API函数
# K) D! I0 G/ T) kShowWindow。
6 T. R* t) n+ p$ E+ P9 MShowWindow(Application->Handle, SW_HIDE);
5 [$ N! k- t; ~: B- Y你想重新显示图标,简单地改变SW_HIDE而代之以SW_SHOW.
. c, {3 L: B4 C }7 n# m
ShowWindow(Application->Handle, SW_SHOW);
0 c! T! j( N$ U4 S注意:你可以通过设置主窗体的Visible 属性的值为false来隐藏它。
. v( G" X) p: D% A7 R+ z; E* X
注意:用ShowWindow隐藏任务栏图标并不长久,某几个动作将使得任务栏图标重新出现。你可以移去程序的任务栏图标并让它不再出现,就是使应用程序的窗口成为工具窗口(Tool Windows)。工具窗口是不会有任务栏图标的,但是这样做有一个缺点就是程序不会在ALT+TAB中出现。把应用程序窗口编程工具窗口用的是API函数GetWindowLong和SetWindowLong
) o% w# d; X; ZWINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
6 A* b) b9 D+ R' [# g
{
* _6 N5 M8 o: R) V# L+ ]" M+ a DWORD dwExStyle = GetWindowLong(Application->Handle, GWL_EXSTYLE);
- O/ q8 L k2 w; K, U" d dwExStyle |= WS_EX_TOOLWINDOW;
8 s. A( }5 ]- i
SetWindowLong(Application->Handle, GWL_EXSTYLE, dwExStyle);
! k7 W* r; I$ ?$ T) f2 v: p' o9 y
try
- j/ r0 x& _ x* k! `; O
{
6 j" |/ c5 Y# D* A
Application->Initialize();
' r) {; @3 ~ U+ O
Application->CreateForm(__classid(TForm1), &Form1);
8 ~: A6 B, K S) a$ c$ b, s
Application->Run();
: Q P2 L* B) Z* A, l8 t3 Q }
1 V& K" G: g9 K$ s. Z catch (Exception &exception)
# u @% `. b' y {
. R$ ?1 {: [; l' e* c0 m1 ^
Application->ShowException(&exception);
& }7 C) f/ l7 [+ ~3 R }
% L, `# c' F- ^: Q* R( y1 u# q5 J$ ]5 f return 0;
3 T' _7 m& d7 K) V4 X}
% }* Y5 z4 b8 L2 { k( b' C
5,对黑客爱好者来说,木马程序的隐藏技术当然很受欢迎。
# O! T$ t. p; J3 j( z6 M! T0 Z d木马程序的服务器端,为了避免被发现,多数都要进行隐藏处理,下面让我们来看看木马是如何实现隐藏的。 说到隐藏,首先得先了解三个相关的概念:进程,线程和服务。我简单的解释一下。
8 }1 w7 b- h" H T; F. h, M/ ~( ]
进程:一个正常的Windows应用程序,在运行之后,都会在系统之中产生一个进程 ,同时,每个进程,分别对应了一个不同的PID(Progress ID, 进程标识符)这个进程会被系统分配一个虚拟的内存空间地址段,一切相关的程序操作,都会在这个虚拟的
空间中进行。
8 d' V/ R+ W6 F, t; A3 o% {1 Z
线程:一个进程,可以存在一个或多个线程,线程之间同步执行多种操作,一般地,线程之间是相互独立的,当一个线程发生错误的时候,并不一定会导致整个进程的崩溃。
' W+ C' v ^# d: _2 A; f 服务:一个进程当以服务的方式工作的时候,它将会在后台工作,不会出现在任务列表中,但是,在Windows NT/2000下,你仍然可以通过服务管理器检查任何的服务程 序是否被启动运行。
6 Y% J- X O: O; M3 p4 ~
想要隐藏木马的服务器端,可以伪隐藏,也可以是真隐藏。伪隐藏,就是指程序的 进程仍然存在,只不过是让他消失在进程列表里。真隐藏则是让程序彻底的消失,不以 一个进程或者服务的方式工作。
& L6 d+ r: z9 A( V4 M
伪隐藏的方法,是比较容易实现的,只要把木马服务器端的程序注册为一个服务就可以了,这样,程序就会从任务列表中消失了,因为系统不认为他是一个进程,当按下Ctrl+Alt+Delete的时候,也就看不到这个程序。但是,这种方法只适用于Windows9x的系统 ,对于Windows NT,Windows 2000等,通过服务管理器,一样会发现你在系统中注册过的服务。难道伪隐藏的方法就真的不能用在Windows NT/2000下了吗?当然还有办法,那就是API的拦截技术,通过建立一个后台的系统钩子,拦截PSAPI的EnumProcessModules 等相关的函数来实现对进程和服务的遍历调用的控制,当检测到进程ID(PID)为木马程序的服务器端进程的时候直接跳过,这样就实现了进程的隐藏,
金山词霸等软件,就是使用了类似的方法,拦截了TextOutA,TextOutW函数,来截获屏幕输出,实现即时翻译的。同样,这种方法也可以用在进程隐藏上。
: S( D% t3 {+ j' ?4 r( m) ]* ^( {. k% }
当进程为真隐藏的时候,那么这个木马的服务器部分程序运行之后,就不应该具备一般进程,也不应该具备服务的,也就是说,完全的溶进了系统的内核。也许你会觉得奇怪,刚刚不是说一个应用程序运行之后,一定会产生一个进程吗?的确,所以我们可以不把他做成一个应用程序,而把他做为一个线程,一个其他应用程序的线程,把自身注入其他应用程序的地址空间。而这个应用程序对于系统来说,是一个绝对安全的程序,这样,就达到了彻底隐藏的效果,这样的结果,导致了查杀黑客程序难度的增加。
" s( J5 q' ~6 M* T Z, H 出于安全考虑,我只给出一种通过注册服务程序,实现进程伪隐藏的方法,对于更复杂 ,高级的隐藏方法,比如远程线程插入其他进程的方法,请参阅 ShotGun的文章。《NT 系统下木马进程的隐藏与检测》
9 O+ s( c& J8 x) r# s
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
T+ p# U- d6 S8 G @2 p
{
) f( ` d9 |0 m% O+ @ try
& l, w( R7 C- T2 }' z' N
{
) e% S+ C4 W! C$ q8 F4 U e DWORD dwVersion = GetVersion(); //取得Windows的版本号
- n( A0 Q+ C5 @2 C* L) b0 y
if (dwVersion >= 0x80000000) // Windows 9x隐藏任务列表
; K, c( O3 S$ Z8 `
{
. l" Q8 M) r& C
int (CALLBACK *rsp)(DWORD,DWORD);
* x( z8 Z/ ~- n# q. U$ i! _
HINSTANCE dll=LoadLibrary('KERNEL32.DLL');//装入KERNEL32.DLL
4 |4 m+ w" X) A" K' J( d7 Z) {
rsp=(int(CALLBACK
?9 y) x' c9 s# L*)(DWORD,DWORD))GetProcAddress(dll,'RegisterServiceProcess');
3 g/ _# K1 H% ]* @4 K: ]. e
//找到RegisterServiceProcess的入口
9 r- [# B" W8 }: C/ A' S6 v- W
rsp(NULL,1); //注册服务
+ l# F, r4 S3 d7 _$ m2 z FreeLibrary(dll); //
释放DLL模块
5 ?7 m3 P0 I: Q" O9 b1 L }
5 H( G c4 l1 Y5 z0 a1 l }
. L6 J3 ~5 g# d$ O" [' {; k catch (Exception &exception) //处理异常事件
; j0 W. G5 H f
{
' B+ r; S3 T* F' A) m
//处理异常事件
* U b/ S7 T7 |& \/ B& u
}
$ }0 s# q0 P/ v* t9 S0 R2 Q return 0;
6 a. }$ X" W) F, Q7 j6 I2 G5 B- C}