范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

TsFltMgr。sys系统蓝屏的原因是什么

  同事一WindowsXP系统,正常执行,关闭后,第二天无法启动,详细症状为:
  (1)安全模式以及带网络功能的安全模式都能够进入;
  (2)正常模式,还没出现WindowXP滚动栏就?始重新启动;
  (3)进安全模式,禁用自己主动重新启动后,再正常启动,出现蓝屏,报TsFltMgr.sys内存错误!
  经过互联网查询,和不断摸索,最后发现居然是可恶的QQ软件管家惹的祸,进安全模式果断卸载QQ软件管家后,再重新启动,系统全然正常了。
  以下转载了一篇分析QQ电脑管家的文章,请参考:
  QQ电脑管家中的TsFltMgr Hook框架分析
  新版的QQ电脑管家中多了一个名字叫TsFltMgr.sys的驱动,对该驱动进行了一些简单的分析,看见了一套美丽的Hook框架,发出来与大家分享。分析不正确的地方请多多包涵。
  首先TsFltMgr挂钩了KiFastCallEntry函数,Hook点在这里:
  代码:
  复制代码
  代码如下:
  kd> u KiFastCallEntry+e3
  nt!KiFastCallEntry+0xe3:
  8053dbb3 c1e902 shr ecx,2
  -------------------------------------------------------------------------
  8053dbb6 90 nop
  8053dbb7 90 nop
  8053dbb8 90 nop
  8053dbb9 e962170c77 jmp TsFltMgr+0x2320 (f75ff320)
  -------------------------------------------------------------------------
  8053dbbe 0f83a8010000 jae nt!KiSystemCallExit2+0x9f (8053dd6c)
  8053dbc4 f3a5 rep movs dword ptr es:[edi],dword ptr [esi]
  8053dbc6 ffd3 call ebx
  原始的KiFastCallEntry在 shr ecx, 2 指令后面应该是 mov edi,esp;cmp esi, MmUserProbeAddress,共8个字节,在这里被 TsFltMgr 替换成了3个nop和一个jmp。
  该jmp会跳转到 KiFastCallEntry_Detour 函数中,KiFastCallEntry_Detour 函数代码例如以下:
  代码:
  复制代码
  代码如下:
  // 保存现场
  pushfd
  pushad
  // 调用 KiFastCallEntry_Filter 函数,实现过滤
  push edi // 本次系统调用相应的SysCall Table的地址(SSDT或SSDTShadow的地址)
  push ebx // 本次系统调用在SysCall Table中相应的内核函数地址
  push eax // 本次系统调用相应的内核函数在SysCall Table中的功能号
  call KiFastCallEntry_Filter // 调用KiFastCallEntry_Filter,实现过滤
  mov [esp+10h], eax // 更改本次调用相应的内核函数地址!
  // 恢复现场
  popad
  popfd
  // 运行 KiFastCallEntry 函数中被替换掉的指令,并跳回原函数
  mov edi,esp
  cmp esi, g_7fff0000
  push g_JmpBack
  ret
  这里须要注意的是 call KiFastCallEntry_Filter 之后的 mov [esp+10h], eax。之前保存现场时的指令pushad会导致寄存器EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI依次入栈,并通过后面的popad指令恢复这些寄存器的值。因此此处的mov [esp+10h], eax实际上是用 KiFastCallEntry_Filter 函数的返回值来改写堆栈中保存的ebx的值,即改写本次系统调用相应的内核函数地址。
  KiFastCallEntry_Filter 是真正实现过滤的函数,该函数的?数和返回值上文已经说明了,其详细实现分析整理后,C语言描写叙述例如以下:
  代码:
  复制代码
  代码如下:
  ULONG __stdcall KiFastCallEntry_Filter(ULONG ulSyscallId, ULONG ulSyscallAddr, PULONG pulSyscallTable)
  {
  PFAKE_SYSCALL pFakeSysCall = NULL;
  if ( ulSyscallId >= 0x400 )
  return ulSyscallAddr;
  if ( pulSyscallTable == g_KiServiceTable && ulSyscallId <= g_ServiceNum/* 0x11c */ )
  {
  pFakeSysCall = g_FakeSysCallTable[ulSyscallId]; // SSDT
  }
  else if (pulSyscallTable == g_KeServiceDescriptorTable &&
  g_KeServiceDescriptorTable && ulSyscallId <= g_ServiceNum/* 0x11c */)
  {
  pFakeSysCall = g_FakeSysCallTable[ulSyscallId]; // SSDT
  }
  else if (pulSyscallTable == g_W32pServiceTableAddr && ulSyscallId <= g_ShadowServiceNum/* 0x29b */)
  {
  pFakeSysCall = g_FakeSysCallTable[ulSyscallId + 1024]; // ShadowSSDT
  }
  if ( pFakeSysCall && pFakeSysCall->ulFakeSysCallAddr )
  {
  pFakeSysCall->ulOrigSysCallAddr = ulSyscallAddr;
  return pFakeSysCall->ulFakeSysCallAddr;
  }
  return ulSyscallAddr;
  }
  这里须要说明的是,TsFltMgr内部有一张表,暂且命名为 g_FakeSysCallTable,该表中存放的是指向 FAKE_SYSCALL 结构的指针。表中的每个 FAKE_SYSCALL 结构相应一个系统调用,表的前半部分相应SSDT中的系统调用,1024项以后相应ShadowSSDT里的系统调用。
  当中 FAKE_SYSCALL 结构大致例如以下(当中非常多域的作用没弄明确):
  代码:
  复制代码
  代码如下:
  typedef struct __FAKE_SYSCALL__ {
  ULONG xxx1;
  ULONG ulSyscallId; // 该系统调用的功能号
  ULONG xxx3;
  ULONG ulTableIndex;
  ULONG xxx5;
  ULONG ulCountForPreWork;
  ULONG ulCountForPostWork;
  ULONG xxx8;
  ULONG ulOrigSysCallAddr; // 真实的系统调用地址
  ULONG ulFakeSysCallAddr; // 假的系统调用地址
  ULONG xxx11;
  ULONG xxx12;
  ULONG xxx13;
  ……
  } FAKE_SYSCALL, *PFAKE_SYSCALL, **PPFAKE_SYSCALL;
  因此 KiFastCallEntry_Filter 函数的所做的就是依据系统调用的功能号在 g_FakeSysCallTable 中索引出相应的 pFakeSysCall 对象,然后推断该系统调用是否须要hook,假设须要则将真实的系统调用地址保存到 pFakeSysCall->ulOrigSysCallAddr 中,并将 pFakeSysCall->ulFakeSysCallAddr 作为假系统调用的地址返回。
  这样的调用过程中动态获取真实系统调用地址的方法使 TsFltMgr 的Hook框架有较高的兼容性,比如不会使载入顺序晚于TsFltMgr的驱动中的SSDT Hook失效,比如QQ电脑管家本身带的TSKsp.sys驱动。
  对于我的?试系统(XP_SP2),TsFltMgr hook的函数有:
  代码:
  复制代码
  代码如下:
  // SSDT中:
  NtCreateFile、NtCreateKey、NtCreateSection、NtCreateSymbolicLinkObject、NtCreateThread、NtDeleteFile、NtDeleteKey、NtDeleteValueKey、NtDeviceIoControlFile、NtDuplicateObject、NtEnumerateValueKey、NtLoadDriver、NtOpenProcess、NtOpenSection、NtProtectVirtualMemory、NtQueryValueKey、NtRequestWaitReplyPort、NtSetContextThread、NtSetInformationFile、NtSetSystemInformation、NtSetValueKey、NtSuspendThread、NtSystemDebugControl、NtTerminateProcess、NtTerminateThread、NtWriteFile、NtWriteVirtualMemory
  // ShadowSSDT中:
  NtUserBuildHwndList、NtUserFindWindowEx、NtUserGetForegroundWindow、NtUserMoveWindow、NtUserQueryWindow、NtUserSendInput、NtUserSetParent、NtUserSetWindowLong、NtUserSetWindowPlacement、NtUserSetWindowPos、NtUserShowWindow、NtUserShowWindowAsync、NtUserWindowFromPoint
  全部假系统函数都有统一的代码框架,假系统函数的代码框架大致例如以下:
  代码:
  复制代码
  代码如下:
  NTSTATUS __stdcall FakeNt_XXX(xxx)
  {
  PFAKE_SYSCALL pFakeSysCall;
  ULONG ulXXX = 0;
  ULONG ulStatus;
  NTSTATUS status;
  ULONGLONG ullTickCount;
  pFakeSysCall = g_pFakeSysCall_Nt_XXX; // 该系统调用相应的 pFakeSysCall 对象
  status = STATUS_ACCESS_DENIED;
  // 貌似是做性能?试时候须要的,实际版本号中 g_bPerformanceTest 为 FALSE
  if ( g_bPerformanceTest ) {
  ullTickCount = KeQueryInterruptTime();
  }
  // 系统调用的调用前处理!
  // +++
  InterlockedIncrement(&pFakeSysCall->ulCountForPreWork);
  ulStatus = PreWork(&ulXXX, pFakeSysCall);
  InterlockedDecrement(&pFakeSysCall->ulCountForPreWork);
  // ---
  if ( ulStatus != 0xEEEE0004 && ulStatus != 0xEEEE0005)
  {
  OrigSysCall * pOrigSysCall = pFakeSysCall->ulOrigSysCallAddr;
  // 调用原始系统调用!
  if ( pOrigSysCall && NT_SUCCESS(pOrigSysCall(xxx)) )
  {
  // 系统调用的调用后处理!
  // +++
  InterlockedIncrement(&pFakeSysCall->ulCountForPostWork),
  ulStatus = PostWork(&ulXXX),
  InterlockedDecrement(&pFakeSysCall->ulCountForPostWork),
  // ---
  }
  }
  // 0xEEEE0004 应该是拒绝调用的意思,0xEEEE0005 应该是同意调用的意思
  if (ulStatus == 0xEEEE0005)
  status = STATUS_SUCCESS;
  // PsGetCurrentProcessId 这个调用的返回值后面并没实用到,可能是多余的
  PsGetCurrentProcessId();
  // 貌似是做性能?试时候须要的
  if ( g_pFakeSysCall_NtTerminateProcess->xxx5 && ullTickCount && g_bPerformanceTest) {
  PerformanceTest(&g_pFakeSysCall_NtTerminateProcess->xxx13, ullTickCount);
  }
  return status;
  }

地暖管需要清洗吗地暖管多长时间清洗一次清洗方法地暖在寒冷地区是很常用的一种采暖方式。受人比较的均匀,让家中每个角落都是暖暖的。由于长时间的使用,地暖管中难免会有灰尘,因此就需要进行清理,想必很多人对这方面还不是很了解,下面就与中央空调和地暖哪个好中央空调介绍详解在冬天我们会纠结于选择购买地暖还是中央空调,中央空调和地暖哪个好,是要根据自己的实际需求和经济条件来决定的,很多人为了省钱会选择干式地暖,那么干式地暖真的省钱么,有没有什么隐患?一地暖管材哪种好地暖管材品牌推荐详细介绍近几年,地暖非常的流行,它是冬季一种新型的取暖方式,它的热量是自下往上的,非常的舒适。既然地暖是取暖设备,那么必然会使用到地暖管材,那么地暖管材什么牌子好?地暖管材哪种好?地暖管间地暖好还是散热片好做地暖多少钱一平米详细介绍寒冷的冬季又来临了,冰冷的空气让我们很不舒服,为了追求更高的生活质量,人们开始寻求各种的取暖方式。在室内的取暖方式很多,地暖和散热片都是常见的,两种取暖设备有着很大的不同,那使用哪地暖多少钱一平米地暖费用每月费用介绍详解冬季正是使用地暖的高峰期,已经安装的家庭都会打开地暖,每月的费用也是一笔不少的钱,没有安装的业主自然想知道安装的费用是怎样的,那么大家带着疑问就和小编一起看看地暖多少钱一平米,地暖地暖不热怎么解决地暖回水不热解决方法详解地暖作为舒适的采暖系统,目前已经走进了千家万户,拥有地暖的家庭,寒冷的冬季再也不用担心ldquo冻手冻脚rdquo。只是地暖使用的过程中,难免会遇到地暖不热的情况,这时候我们应该如地暖用地砖好还是用地板好地砖和地板区别对比详解地暖用地砖好还是用地板好?这是选择安装了地暖的家庭经常会考虑的一个问题。在地暖上面究竟是安装地砖,还是安装地板,还需要从多个方面进行详细的对比,比如从环保性能保温性能稳定性能舒适性地暖铺地砖和铺地板哪个好地暖铺地砖和铺地板对比介绍家居装修时,对于地暖究竟铺设地砖好还是地暖好的争论从来就没有停止过。每个人都有自己的意义和见解。那到底铺设哪种材质好呢?下面,小编就向您介绍一下地暖铺地砖与地板的优缺点,朋友们来辨地暖安装选择地板还是地砖好详细介绍地暖是一种舒适的家庭采暖方式,越来越多的家庭开始选择安装地暖,但地暖安装和其他采暖方式有所不同,地暖安装需和装修进行紧密的结合,地暖安装选择地板还是地砖也是采暖用户在装修过程中需要地暖铺木质地板好不好地暖铺木质地板应注意什么详解地暖是当前舒适度比较高的取暖形式,受欢迎程度非常高。地暖上面该安装什么呢?地板,还是地砖呢?地暖铺木质地板好吗?这是不少想要安装地暖,同时又想安装地板的用户都会问到的一个问题。通常铺地暖用什么地板好铺地暖地板怎么选购详解在寒冷的冬天,过低的温度会对我们的工作与生活带来一定的影响,所以一个好的取暖设备对我们来说是很有必要的,在各种取暖设备的选择中,地暖的使用是比较多的,在铺地暖的时候需要铺设地板,这
迷你熨斗如何清洁迷你熨斗使用方法详解对于经常出差的商务人士来说,迷你熨斗是一个不错的旅途必备用品,它不仅携带方便,还有效的解决了衣服的起皱问题,因此近年来,市场上非常流行迷你熨斗,迷你熨斗真的有这么多特点吗?我们在使蒸汽熨斗如何使用蒸汽熨斗正确用法详解如果大家的衣服皱了,穿在身上一定不好看,所以在家里面选购一个熨斗是十分重要的,熨斗的种类也十分的多,今天小编要为大家介绍的是蒸汽熨斗,小编要告诉大家蒸汽熨斗的正确用法。蒸汽挂烫机是苏泊尔熨斗怎么样苏泊尔熨斗优点介绍详解苏泊尔我们都知道是一个很有名的电器公司,它生产的熨斗也是很有名的。熨斗虽然有很多,但是会用熨斗的人很少,小编就是一个不会用熨斗的人。不过,小编的理论知识是很好的,接下来,小编就为大现代中式落地灯如何安装现代中式落地灯安装技巧详解现今不少家庭在装修新居时会选择现代中式的装修风格,其中现代中式落地灯则是现代中式装修中一个不可缺少的家具。所以了解一点关于现代中式落地灯的安装知识也是非常有必要的,下面就让小编来介美式卧室灯具如何选购美式卧室灯具选购注意事项详解家居里面的灯具非常重要的,其中卧室的灯具更加重要了。有时候大家会提前到卧室里面休息,可以在卧室里面休闲地看看书,听听音乐。如果卧室是漆黑一片的话,就完全没有心情做任何事情了。说起卧美式灯具有哪些品牌美式灯具品牌介绍详解灯具,是我们生活中必不可少的家具种类。许多的消费者都会挑选一些比较美观的灯具用于装修客厅。那么,面对着市面上琳琅满目的美式灯具品牌,大家又知道哪款会比较好吗?下面,就让小编来给大家地中海式灯具有哪些品牌地中海式灯具品牌介绍详解地中海式灯具在现在的室内装修是比较常见的,因为地中海式灯具不仅照明功能好还能够增添我们室内装修的美感,地中海式灯具的品牌也是有很多的,不知道大家了解几种,下面小编就来给大家介绍一下美式客厅吊灯有哪些品牌美式客厅吊灯品牌推荐详解美式客厅吊灯是一种很不错的吊灯风格,在很多的家庭装饰房屋的时候,美式客厅吊灯既能提供好的装饰效果又能带来不错的照明帮助,所以其深受众多消费者的喜爱,而小编今天就要来为大家介绍几款不美式田园吸顶灯什么牌子好美式田园吸顶灯品牌推荐详解美式风格是一种狂野大气的风格,而吸顶灯也融合了美式田园的风格,那么美式田园吸顶灯有什么信得过的品牌呢,吸顶灯不仅占空间少,而且美观大气,照明能力也好,小编就为大家介绍一下美式田园吸美式乡村吊灯有哪些品牌美式乡村吊灯品牌推荐详解美式乡村吊灯是很不错的,不同类型的吊灯的价钱装饰效果都是不同的,您在选择吊灯种类的时候,可以根据家里整体的格局来选择的。市面上吊灯的品牌琳琅满目,今天小编就给大家介绍一下美式乡村吊现代简约吸顶灯什么牌子好现代简约吸顶灯品牌介绍详解在我们装修房屋时,我们的灯饰是我们看中的一个重要组成部分因此对于吸顶灯的选择我们要十分的用心才行,但是对于灯饰的品牌,特别是吸顶灯品牌大家又了解多少呢?什么样的品牌才有更加好的质量