CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

网络安全,安全,网络安全设备,信息安全产品,网络安全新闻,信息安全市场分析,黑客攻防,防黑反黑技巧,黑客,网络安全技术,网络安全方案,病毒播报,最新病毒库,攻防技巧,入侵渗透,新闻,思科,Juniper,天融信,瑞星,金山,江民,卡巴斯基,赛门铁克, 趋势,绿盟科技,联想网御,MCAFEE,安氏,冰峰网络,网络入侵,木马,病毒,病毒分析,木马分析,样本分析,木马样本分析,病毒样本分析,杀毒软件

您现在的位置: IT专家网 > Win安全子站 > 全部更新

讨论:监控Explorer的进程创建问题

作者: 寂静的海,  出处:IT专家网, 责任编辑: 张帅, 
2007-10-31 14:52
  NT 下的 Explorer 通过 CreateProcessInternalW建立,但是很多时候用户的编码习惯会引起一些小错误,在反汇编的帮助下,可以及时的发现并纠正错误……

  IT专家网独家】近日笔者收到某网友的信件称,“为何自己写的监控 Explorer 进程代码运行后,系统会崩溃。”现笔者就这一问题,拿出与用户共同探讨。NT 下的 Explorer 通过 CreateProcessInternalW建立,R3的控制权。代码如下:

      bInheritHandles,
  DWORD dwCreationFlags,
  LPVOID lpEnvironment,
  LPCWSTR lpCurrentDirectory,
  LPSTARTUPINFOW lpStartupInfo,
  LPPROCESS_INFORMATION lpProcessInformation,
  PHANDLE hNewToken);
  int APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
  {
  UNREFERENCED_PARAMETER(lpReserved);
  if (dwReason == DLL_PROCESS_ATTACH)
  {
  ExampleJmp();
  }
  else if (dwReason == DLL_PROCESS_DETACH)
  {
  SetHookOff();
  }
  return 1;
  }
  void HookOneAPI(LPCTSTR ModuleName, LPCTSTR ApiName, FARPROC lpNewFunc)
  {
  BYTE str[8] = { 0x0B8, 0x0, 0x0, 0x40, 0x0, 0x0FF, 0x0E0,0}; // mov eax,addr jmp eax
  memcpy(m_NewFunc,str,8);
  m_lpHookFunc = GetProcAddress(GetModuleHandle(ModuleName),ApiName);
  m_hProc = GetCurrentProcess();
  memcpy(m_OldFunc,(char *)m_lpHookFunc,8);
  *(DWORD *)( m_NewFunc + 1 ) = (DWORD)lpNewFunc;
  }
  void WINAPI SetHookOn()
  {
  MEMORY_BASIC_INFORMATION mbi;
  VirtualQuery(m_lpHookFunc,&mbi,sizeof(mbi));
  VirtualProtect(m_lpHookFunc,sizeof(DWORD),PAGE_READWRITE,0);
  DWORD dwOldFlag;
  WriteProcessMemory(m_hProc, (void *)m_lpHookFunc,
  (void *)m_NewFunc, 8,&dwOldFlag);
  }
  void WINAPI SetHookOff()
  {
  DWORD dwOldFlag;
  WriteProcessMemory(m_hProc, (void *)m_lpHookFunc,
  (void *)m_OldFunc, 8, &dwOldFlag);
  }
  BOOL WINAPI MyCreateProcess(HANDLE hToken,
  LPCWSTR lpApplicationName,
  LPWSTR lpCommandLine,
  LPSECURITY_ATTRIBUTES lpProcessAttributes,
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  BOOL bInheritHandles,
  DWORD dwCreationFlags,
  LPVOID lpEnvironment,
  LPCWSTR lpCurrentDirectory,
  LPSTARTUPINFOW lpStartupInfo,
  LPPROCESS_INFORMATION lpProcessInformation,
  PHANDLE hNewToken)
  {
  BOOL BReturn=TRUE;
  SetHookOff();
  CreateProcessHH CreateProcessHHH=(CreateProcessHH)GetProcAddress(GetModuleHandle("Kernel32.dll"),"CreateProcessInternalW");
  BReturn=CreateProcessHHH(hToken,lpApplicationName,lpCommandLine,lpProcessAttributes
  ,lpThreadAttributes,bInheritHandles,dwCreationFlags,lpEnvironment,lpCurrentDirectory,
  lpStartupInfo,lpProcessInformation,hNewToken);
  SetHookOn();
  return BReturn;
  }
  BOOL UpPrivilege(HANDLE hprocess,LPCTSTR lpname) //提升进程权限 debug
  {
  HANDLE hToken;
  TOKEN_PRIVILEGES Privileges;
  LUID luid;
  OpenProcessToken(hprocess,TOKEN_ADJUST_PRIVILEGES,&hToken);
  Privileges.PrivilegeCount=1;
  LookupPrivilegeValue(NULL,lpname,&luid);
  Privileges.Privileges[0].Luid=luid;
  Privileges.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
  if(AdjustTokenPrivileges(hToken,FALSE,&Privileges,NULL,NULL,NULL)!=0)
  return TRUE;
  return FALSE;
  }
  void WINAPI ExampleJmp()
  {
  char privilege[]=SE_DEBUG_NAME;
  HANDLE hprocess;
  hprocess=GetCurrentProcess();
  if(!UpPrivilege(hprocess,privilege)) //开始提权
  {
  exit(-1);
  }
  HookOneAPI("Kernel32.dll","CreateProcessInternalW",(FARPROC)MyCreateProcess);
  SetHookOn();
  }

      欢迎大家把自己的意见和代码公布出来,IT专家网将给您和您的团队提供更多展现自己的舞台!

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅


天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i