如何让某个运行的程序不在windows任务管理器中出现(可以额外加分) (100分)

  • 主题发起人 主题发起人 seaerwang
  • 开始时间 开始时间
S

seaerwang

Unregistered / Unconfirmed
GUEST, unregistred user!
就是按ctrl+alt+del的那个,不让程序在进程的显示中出现? 不够分数在给
 
win98可以,win2000不行
 
GZ 我也想知道
 
win98怎么做?
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
function RegisterServiceProcess(dwProcessID,dwType: Integer): Integer; stdcall; external

'KERNEL32.DLL';

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
RegisterServiceProcess(GetCurrentProcessID,1);
end;
end.
另外在dpr里面的Application.CreateForm(TForm1, Form1);后面加上
Application.ShowMainForm := False;

 
无法定位RegisterServiceProcess在动态连接库KERNEL32.DLL
why?
 
win98可以,win2000不行
 
那有办法把在进程中的某个程序隐藏掉吗?
 
转载:
利用windows的一个*.dll御截漏洞,可以实现在win9x,nt,w2k下进程的深度隐藏,按CTRL+ALT+DEL看不到,用终极防线也看不到,这是我的最新发现,想和大家一起讨论,
我已实现了这一功能,源程在http://njhhack.freehomepages.com/source/hideproc.zip
我的oicq:10772919
e-mail:njhhack@21cn.com
homepage:hotsky.363.net

-----------------

呵呵,各位兄弟,配合我的Delphi源码,讲一下它的工作原理吧,不过大家不要用来做坏事哟,我可是从不黑人的,谁让我是人民教师哟,原理如下:
我编了个启动程序winexec.exe用它来启动install.dll这个安装库,install.dll中有个安装函数用来启动getkey.dll这个执行库,getkey.dll里面有我的木马程序,这个getkey.dll库被挂到explorer.exe的进空间中,然后winexec.exe和install.dll在内存中自动御载,但是getkey.dll仍在内存中运行(这就是*.dll的御载漏洞),因为这时系统中已没有我的winexec.exe存在,所以按CTRL+ALT+DEL查不到有我的进程在运行,这就是进程三级跳.
呵呵,可是,大家知道getkey.dll是如何被挂到explorer.exe这个系统shell进程的地址空间中吗,请听我慢慢道来:
在windows系统中,要进入另一个进程的空间有很多方法,最标准的方法是微软提供的系统级hook功能,大家知道当一个hook放入*.dll中时会成会系统级hook,这是它能收到所以系统中传输的消息,而且若消息是其它进程的线程发出或接收的,那么该*.dll(就是我程序中的install.dll啦)会被强行映射到该进程的地址空间(比如说我的install.dll被映射到explorer.exe的进程空间中),这时install.dll就成了explorer.exe进程的一个调用模块,这时在install.dll用createthread函数创建的线程会成为explorer.exe进程主线程的子线程,这样我们就在explorer.exe的家中暂时有了一块合法的土地,但这只是开始,因为我们的目标是隐藏自已的进程,所以要把winexec.exe在内存中去掉,但这不是我们想要的结果,大家想想,install.dll是由winexec.exe调用的,所以,当winexec.exe死掉后,install.dll也活不成,我们在explorer.exe中占下的一席之地就又没了,那如何办呢,呵呵,听我慢慢讲来:
上面我们说了,当install.dll在explorer.exe中安家后,我们创建的线程就是explorer.exe的子线程,那么由install.dll中调用的*.dll(就是我们程序中的getkey.dll)也会成为explorer.exe的子模块,根据*.dll的特殊性(就是我认为的*.dll的御载漏洞),在install.dll从内存中御掉后,被它调用的getkey.dll还在内存中好好的活着呢,呵呵,微软真是个好宝宝,为我们提供了这么好的驻留内存的机会,我想之所以这样,是因为*.dll不可以成为另一个*.dll的拥有者,只有*.exe才能成为*.dll的拥有者吧,所以explorer.exe就成了getkey.dll的合法拥有者,呵呵,因为explorer.exe是微软的好东东,所以永远在内存中活着,那我们的好战士getkey.dll当然靠着这棵大树也在内存中活的好好的哟,这样我们可爱的getkey.dll就永远安全地在explorer.exe中安了家,呵呵,我们终于可以过河拆桥了,不要说我坏呀,我不要这么做,可不这样的话我的winexec.exe这会被人发现了呀,好可怜哟,这是你在getkey.dll中发出postmessage(findwindow('winexec',nil),wm_destroy,0,0)指令,就会让讨厌的winexec.exe(不对,是可爱的,只不过你的任务完成了,没有了哟,呵呵)从内存中死掉,当然它的好儿子install.dll也会随父而去,但我们可爱的getkey.dll确好好的活在内存中(啊啊,这是为什么呀,gekey.dll的爷爷winexec.exe都死了,它的孙子getkey.dll为何不死呀,呵呵,别忘了哟,getkey.dll的继父explorer.exe很有本事哟,它把它保护的好好的哟,所以死不了的啦),呵呵,明白了吗,这时的内存中已经没有了winexec.exe和install.dll的身影,只有getkey.dll存在,而且是explorer.exe的一个调用模块,当然用CTRL+ALT+DEL只能看到好人explorer.exe,而winexec.exe送给它的坏儿子是看不到了啦,呵呵,如果你用prcview或用spy++,winsight包括各种深度查木马程序(如终极防线)查的话,你只能看到getkey.dll在内存中,但调用者是explorer.exe(这是比尔的好孩子哟,没人怀疑它做坏事吧,呵呵),所以就没人理这个getkey.dll这个坏孩子啦,呵呵,若实在有高手认为它可疑,那好吧,我们加工加工,把getkey.dll的名字改成winsock.dll,然后放在和windows中自带的winsock不同的目录中,呵呵没人怀疑这个文件吧,当然把getkey.dll的版权信息改成是微软的更好啦,呀呀,比尔你不要生气呀,谁叫你这么坏哪,呵呵,我走了..............
 
to hxy2002
一点儿个人看法
此法似乎不行!这样程序在刚载入时依然会出现在任务管理器中。只会在完全载入后才能隐藏!
故在适当的时刻用CTRL+ALT+DEL仍会被kill!
 
To Hxy2002
找不到服务器???
 
那有办法把进程的名字改掉吗?
 
干脆就将那个Internat的进程给K了,然后将你的京城命名为Internat,
或者不灭他,将你的紧成命名为Internatÿ.(注意:ÿ在Cmd窗口下用ALt+255,输入就没有)
 
用API呀,各位
WIN 9X下查找隐藏进程实现方法


--------------------------------------------------------------------------------

作者:病毒
  
在WIN 9X下一些黑客工具利用了未公开的API函数实现了隐藏自身,
不在任务列表中出现的功能,要把它们找出来,同样也需要用到未
公开的TOOLHELP32系列函数。因操作系统的不同NT下遍历进程则用
PSAPI函数来实现,下面给出完整实列。


Process.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>

#define TH32CS_SNAPPROCESS 0x00000002 //快照进程
#define PROCESS_HANDLE_NAME 255
//---------------------------------------------------------------------------
typedef struct tagPROCESSENTRY32 //自定义TOOLHELP32结构
{
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID; //进程ID
DWORD th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
TCHAR szExeFile[MAX_PATH]; //进程文件名
} PROCESSENTRY32;

typedef PROCESSENTRY32 * LPPROCESSENTRY32;

//以下定义要从KERENL32.DLL中取出的TOOLHELP32函数的函数指针

HANDLE (WINAPI *CreateToolhelp32Snapshot)(DWORD dwFlags,DWORD th32PD);
BOOL (WINAPI *Process32First)(HANDLE hSnapshot,LPPROCESSENTRY32 pe);
BOOL (WINAPI *Process32Next)(HANDLE hSnapshot,LPPROCESSENTRY32 pe);

//以下定义要从PSAPI.DLL中取出函数的函数指针
BOOL (WINAPI *EnumProcesses)(DWORD* lpidProcess,DWORD cb,DWORD *cbNeeded);
DWORD (WINAPI *GetModuleFileNameExA)(HANDLE hProcess,HMODULE hModule,LPTSTR lpstrFileName,DWORD nSize);


class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *FindAllProcessFileName;
TListBox *ListBox1;
void __fastcall FindAllProcessFileNameClick(TObject *Sender);
void __fastcall FormResize(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall ListBox1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


Process.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;

//定义变量
HANDLE process[255];
PROCESSENTRY32 p32;
DWORD process_ids[255];
DWORD num_processes;
TCHAR file_name[MAX_PATH];
TCHAR class_name[MAX_PATH];
unsigned i;
//---------------------------------------------------------------------------

//初始化TOOLHELP32
BOOL InitToolHelp32()
{
//动态调用
HINSTANCE DLLinst=LoadLibrary("KERNEL32.DLL");
if(DLLinst)
{
//取各函数在KERNEL32中的地址
CreateToolhelp32Snapshot=(HANDLE(WINAPI *)(DWORD dwFlags,DWORD th32PD))
GetProcAddress(DLLinst,"CreateToolhelp32Snapshot");
Process32First=(BOOL(WINAPI *)(HANDLE hSnapshot,LPPROCESSENTRY32 pe))
GetProcAddress(DLLinst,"Process32First");
Process32Next=(BOOL(WINAPI *)(HANDLE hSnapshot,LPPROCESSENTRY32 pe))
GetProcAddress(DLLinst,"Process32Next");
if((!(UINT)CreateToolhelp32Snapshot)||(!(UINT)Process32First)||(!(UINT)Process32Next))
return FALSE;
else
return TRUE;
}
return FALSE;
}


//初始化PSAPI
BOOL InitPSAPI()
{
HINSTANCE PSAPI=LoadLibrary("PSAPI.DLL");
if(NULL==PSAPI)
return FALSE;
EnumProcesses=(BOOL(WINAPI *)(DWORD* lpidProcess,DWORD cb,DWORD *cbNeeded))
GetProcAddress(PSAPI,"EnumProcesses");
GetModuleFileNameExA=(DWORD(WINAPI *)(HANDLE hProcess,HMODULE hModule,LPTSTR lpstrFileName,DWORD nSize))
GetProcAddress(PSAPI,"GetModuleFileNameExA");
if(NULL == EnumProcesses||NULL == GetModuleFileName)
return FALSE;
else
return TRUE;
}


__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FindAllProcessFileNameClick(TObject *Sender)
{
OSVERSIONINFO osinfo;
osinfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
//取当前操作系统类型
if(GetVersionEx(&osinfo))
{
switch(osinfo.dwPlatformId)
{
//当前操作系统是WIN9X
case VER_PLATFORM_WIN32_WINDOWS:
if(InitToolHelp32())
{
ListBox1->Clear();
p32.dwSize=sizeof(PROCESSENTRY32);
//初始化TOOLHELP32快照
HANDLE pName=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
//开始查找
BOOL Next=Process32First(pName,&p32);
i=0;
//遍历进程
while(Next)
{
//显示进程
ListBox1->Items->Add(p32.szExeFile);
//根据进程ID获取句并
process=OpenProcess(PROCESS_TERMINATE,0,p32.th32ProcessID);
//继续查找
Next=Process32Next(pName,&p32);
i++;
}
CloseHandle(pName);
}
break;

//当前操作系统是NT
case VER_PLATFORM_WIN32_NT:
if(InitPSAPI())
{
ListBox1->Clear();
//获取当前进程个数
EnumProcesses(process_ids,sizeof(process_ids),&num_processes);
//遍历进程
for(i=0; i<num_processes; i++)
{
//根据进程ID获取句并
process=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ
,0,process_ids);
//通过句并获取进程文件名
if(GetModuleFileNameExA(process,NULL,file_name,sizeof(file_name)))
ListBox1->Items->Add(file_name);
}
}
break;
}
}
}

//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
int iCount;
iCount=ListBox1->ItemIndex;
ListBox1->Hint=ListBox1->Items->Strings[iCount];
}
//---------------------------------------------------------------------------

else ShowMessage("初始化TOOLHELP32失败");
}
  

 
多人接受答案了。
 
关于线程插入的源代码
http://delphi2000.3322.net/
 

Similar threads

后退
顶部