社区
Delphi
帖子详情
急问在DELPHI中怎么实现在进程列表中隐藏运行的程序?
chsilence
2004-10-20 03:22:53
如题,希望能给源码学习,谢谢!chsilence@sina.com
...全文
400
17
打赏
收藏
急问在DELPHI中怎么实现在进程列表中隐藏运行的程序?
如题,希望能给源码学习,谢谢!chsilence@sina.com
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
g961681
2004-12-09
打赏
举报
回复
我要学习!
kiss2
2004-12-08
打赏
举报
回复
to ly_liuyang(Liu Yang):
你网站上的那个例子只是给我们演示了下,并没有原码啊,都是DCU文件的
kiss2
2004-12-08
打赏
举报
回复
to ly_liuyang(Liu Yang):
你说的 JEDI Win32API 去哪里找啊??
ksaiy
2004-10-27
打赏
举报
回复
去这里下例子吧:
人家已经做得很完整了。
http://www.delphibox.com/article.asp?articleid=1494
beyondsun
2004-10-21
打赏
举报
回复
这个问题确实看见提了N次了,但是----从来没人真正给提问者解决过.俺不会,帮顶
yjm820604
2004-10-21
打赏
举报
回复
极度反对做广告! 我跟他没完!
chsilence
2004-10-20
打赏
举报
回复
唾弃做广告的人!!!!!!!!!!!!!!!!
ly_liuyang
2004-10-20
打赏
举报
回复
这个问题N次了!
请看我在FAQ上的内容了
http://lysoft.7u7.net
pengxuan
2004-10-20
打赏
举报
回复
下面转载一篇关于这方面的文章(用C/C++描述的)
WinNT & Win2K下实现进程的完全隐藏
作者:AntGhazi 主页:antghazi.yeah.net
面对众多的计算机高手,考虑许久,终于还是决定出来献丑一下,文章内尽量使用最简洁易懂的词汇及例子来介绍,希望能够对一些初学与进阶者有所帮助。
关于进程的隐藏,98下的例子数不胜数。WinNT/Win2K下的隐藏方法,西祠的高手shotgun在去年的6月就已经在网上发布出实例《揭开木马的神秘面纱<四>》 ,我也多次拜读他的文章,对他的计算机水平及热心帮助朋友的作风十分敬佩。这里也可算是对shotgun的文章的补充与深入介绍吧,好了,闲话少说。
在WinNT下"真正隐藏进程"这一说法,可以讲是根本不可能实现,只要我们的程序是以进程内核的形式运行,都是不可能逃离CTRL+ALT+DEL的法眼。那么奇怪了,这岂不是与我们的标题《WinNT & Win2K下实现进程的完全隐藏》相矛盾吗?是的,实际上应该是:以非进程方式执行目标代码,而逃避进程查看器的检查,从而达到"进程隐藏"的目的。
我们这里用的,是在宿主进程中,以线程的方式执行我们的代码。实现起来非常简单。首先,我们先建立一个不执行任何语句的线程
DWORD stdcall ThreadProc(LPVOID *lpVoid){
return 0;
}
然后,将线程代码拷备至宿主进程所能够执行的任何地方(即页面属性为PAGGE_EXECUTE_READWRITE),如:共享内存影射区、宿主进程内。这里我们选择宿主进程,拷备的时侯,我们需要先在宿主进程中使用VirtualAllocEx函数申请一段内存,然后再使用WriteProcessMemory将线程体写入宿主进程中。
以上工作完成后,我们便可CreateRemoteThread函数激活其执行。下面给出一个完整的例子
//远程线程执行体
DWORD __stdcall ThreadProc (void *lpPara){
return 0;
}
int main(int argc, char* argv[]){
const DWORD THREADSIZE=1024*4;//暂定线程体大小为4K,实际上没这么大,稍后我将会介绍
DWORD byte_write;
//获得指定进程ID句柄,并设其权限为PROCESS_ALL_ACCESS,992是宿进程的ID号,获取ID号的方法这里我就不多讲了
HANDLE hWnd = ::OpenProcess (PROCESS_ALL_ACCESS,FALSE,992);
if(!hWnd)return 0;
void *pRemoteThread =::VirtualAllocEx(hWnd,0,THREADSIZE,MEM_COMMIT| MEM_RESERVE,PAGE_EXECUTE_READWRITE);//申请
if(!pRemoteThread)return 0;
if(!::WriteProcessMemory(hWnd,pRemoteThread,&ThreadProc,THREADSIZE,0))//写入进程
return 0;
//启动线程
HANDLE hThread = ::CreateRemoteThread (hWnd ,0,0,(DWORD (__stdcall *)(void *))pRemoteThread ,NULL,0,&byte_write);
if(!hThread){ //还有内存分配未释放
return 0;
}
return 0;
}
到这里,对于隐藏的方法就算告一段落,相信看过的朋友对这个思路有个非常明确的概念了吧。
在理解隐藏的方法后,我们着重开始写线程的执行部分了。如下:
DWORD __stdcall ThreadProc(void *lpPara){
MessageBox(NULL,"hello","hello",0);
return 0;
}
编译执行后,你会发现出现一个非法操作错误,为什么呢?在我们以段页式内存管理的win2K操作系统中,编译时会把所有的常量编译在PE文件的.data节中,而代码段则在.text中,所以,我们拷备到宿主进程中的代码是在.text中的代码,MessageBox(NULL,(char *)指针,p,0);所指向的地址是本进程的内存虚拟地址。而在宿主进程中是无法访问的。解决的方法很简单,按旧照搬的将"hello"也拷备到目标进程中,然后再引用。同理,MessageBox函数地址编译时,也是保存在.Import中,写过Win2k病毒的朋友都知道,所有常量与函数入口地址都需在代码段定义与得出,我们这里也与他有点类似。言归正传,同样情况我们也把函数的入口地址一起写入目标进程中。
//先定义参数结构
typedef struct _RemotePara{//参数结构
char pMessageBox[12];
DWORD dwMessageBox;
}RemotePara;
//付值
RemotePara myRemotePara;
::ZeroMemory(&myRemotePara,sizeof(RemotePara));
HINSTANCE hUser32 = ::LoadLibrary ("user32.dll");
myRemotePara.dwMessageBox =(DWORD) ::GetProcAddress (hUser32 , "MessageBoxA");
strcat(myRemotePara.pMessageBox,"hello\0");
//写进目标进程
RemotePara *pRemotePara =(RemotePara *) ::VirtualAllocEx (hWnd ,0,sizeof(RemotePara),MEM_COMMIT,PAGE_READWRITE);//注意申请空间时的页面保护属性
if(!pRemotePara)return 0;
if(!::WriteProcessMemory (hWnd ,pRemotePara,&myRemotePara,sizeof myRemotePara,0))return 0;
//启动进将参数传递进入
HANDLE hThread = ::CreateRemoteThread (hWnd ,0,0,(DWORD (__stdcall *)(void *))pRemoteThread ,pRemotePara,0,&byte_write);
if(!hThread){
return 0;
}
好了,就这么简单,下在给出一个弹出一个MessageBox的实例:
// RemoteThread.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
typedef struct _RemotePara{//参数结构
char pMes
chsilence
2004-10-20
打赏
举报
回复
我说的是进程中:(
hmily1688
2004-10-20
打赏
举报
回复
是指任务管理器,我只能在应用程序中看不到,在进程中还是有的。就是设置一下application.title:='';就行了。在进程中的我搞不定
chsilence
2004-10-20
打赏
举报
回复
楼上的,是指在任务管理器中,不是写木马,请问你怎么实现呀
hmily1688
2004-10-20
打赏
举报
回复
但是在资源管理器,进程中还可以看到
hmily1688
2004-10-20
打赏
举报
回复
你是不是指在任务管理器中应用程序看不到啊,你不会是写个木马类的吧,用application.title:='';
chsilence
2004-10-20
打赏
举报
回复
我说是在WIN2000/NT/XP下
yueyixing
2004-10-20
打赏
举报
回复
注册为系统服务应该就可以了
hottey
2004-10-20
打赏
举报
回复
不会,帮你顶!
Delphi
下真正
隐藏
进程
的代码
Delphi
下真正
隐藏
进程
的代码,由VC的代码转成D的,不是采用hook的方法
实现
的,真正从物理内存
中
去
隐藏
,绝大部分
进程
查看器找不着,效果不错
DELPHI
专题--
程序
应用
在
DELPHI
应用
程序
中
使用DLL 为
DELPHI
应用
程序
制作安装
程序
用注册表对
Delphi
程序
进行加密 在
Delphi
程序
中
操作注册表 鼠标和键盘控制 如何为
Delphi
程序
添加事件和事件处理器 在
Delphi
应用
程序
中
拖动控件 用...
Delphi
XE10零基础实战快速入门
通过课堂上一个一个的实战例子,演示
Delphi
XE10的用法,最后通过一个完整的通讯录
程序
,让学员初步掌握软件开发的全部流程 让零基础学员快速入门
Delphi
编程,快速掌握
Delphi
的使用方法,并能够制作出自己的软件来。...
DELPHI
专题文档-
程序
应用
在
DELPHI
应用
程序
中
使用DLL 为
DELPHI
应用
程序
制作安装
程序
用注册表对
Delphi
程序
进行加密 在
Delphi
程序
中
操作注册表 鼠标和键盘控制 如何为
Delphi
程序
添加事件和事件处理器 在
Delphi
应用
程序
中
拖动控件 用...
用
Delphi
编写系统
进程
监控
程序
本
程序
运行
时会在系统托盘区加入图标,不会出现在按Ctrl+Alt+Del出现的任务
列表
中
,也不会在任务栏上显示任务按钮,在不活动或最小化时会自动
隐藏
。不会重复
运行
,若
程序
已经
运行
,再想
运行
时只会激活已经
运行
的...
Delphi
5,388
社区成员
262,730
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章