微点向来低调示人,但就有不小让人惊叹的技术就隐于其中,如果各位有兴趣的话,今天就谈谈微点吧.高手就见笑了. 其实本人电脑水平很差的,小白一个.即不会VC也不会汇编,真是很差.但总算也学过一种不入流的中文编程语言.也罢了.
hook是主动防御的重要组成部分之一,没有HOOK,主动防御也无从谈起.但和其它主动防御不同,微点hook[钩子]难以扫描出来.当金山的主动防御开启时,使用 XueTr0.36 检测时.可以看到满山的枫叶都盛开了[红了一大片] 金山的钩子全被XueTr检测出来了.但微点的钩子却无法扫描出来
Hook实现起来是比较容易的[但我不会使用],仅仅修改函数几个字节,或修改一部分系统指令,便可完成隐藏文件
及系统监控的各种功能.
就目前我知道的Hook大概有以下几种; object Hook, SSDT Hook, inline Hook, EAT Hook, SYSENTER Hook, IDT Hook, IRP Hook, IAT Hook.这几种Hook各有特点.object Hook的功能十分强大,但实现要对系统内核有比较深的了解, 对系统内核了解不深的,就看看好了.免得蓝屏. 在国内杀毒软件中微点有能力使用object Hook.不相信的自己使用XueTr0.36 检测object Hook,看看国内的杀毒软件的钩子.不过就世界上能使用object Hook的杀毒软件也比较小......虽然object Hook的功能十分强大,但检测object Hook也比较简单.这不就被XueTr0.36 检测出来了. 但是微点的object Hook是有保护的,但是也有人认为保护object Hook也没什么样,毕竟在内核保护object Hook 没啥意思.Object属性结构如下
typedef struct _OBJECT_ATTRIBUTES
{
ULONG Length;
HANDLE RootDirectory;
UNICODE_STRING *ObjectName
ULONG Attributes;
PSECURITY_DESCRIPTOR SecurityDescriptor;
PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService;}
OBJECT_ATTRIBUTES,*POBJECT_ATTRIBUTES
调用API基于如下汇编代码
00411A3F mov esi,esp
00411A41 push looh
00411A46 lea eax,[strDllDir]
00411A4C push eax
00411A4D call dword ptr [_imp_GetWindows DirectoryA@8(42B180h)]
好了,回到主题.那为何微点的钩子无法扫描出来? 在这之前,先讲一下钩子的挂钩方法.常用的挂钩方法方法有如下3种;要注意的是这里的挂钩方法仅限于SSDT表和SSDT shadow表的挂钩.
1,在要挂钩的函数中使用"JMP XXXXXXXX"覆盖原函数的指令,该指令的机器码是E9XXXXXXXX,占用5个字节的地址空间.
2,在要挂钩的函数中使用"JMP FARXXXXXXXX"覆盖原函数的指令,后面的XXXXXXXX是跳转的绝对地址,该函数指令的机器码是EAXXXX0800,该指令占用7个字节的地址空间.
3,在要挂钩的函数中先使用"PUSHXXXXXXXX",之后直接用RETN返回,这样就间接实现了跳转,这两条指令共占用6个字节的地址空间.
如上所述,那要避开挂钩的函数,跳转到函数中不被挂钩的代码段就可以跳出主动防御的重重拦截,即是跳转API函数+10的地址.但是通常情况下API+5就已经可以对付大部分钩子了.为了对付这种API+5的跳转,出现了变形的API函数挂钩技术[变形JMP],变形API函数挂钩是将挂钩的地址进行变形,就是挂钩的地址不再是在API+5的范围内,变成了API函数中数十个字节中任意几个,十几个甚至数十个字节.反正是在 [(API+5<API+X) X>5] 的情况下进行的,但这种技术也不是很好使用的,需要对进行变形API函数挂钩的API函数有比较深的理解,不然是无法使用的.同样微点是使用变形API函数挂钩的,在挂钩深度上,连XueTr0.36和天琊都无法检测出来,这说明微点的工程师对挂钩的API函数有很深的理解.实际上在挂钩深度上,微点比卡巴斯基2011要深,在XueTr0.36的检测下卡巴斯基2011的挂钩还是相当多的. 国内杀毒软件也就江民,当然还有安天防线有能力这样来挂钩[北信源等不知道],中国的杀毒技术不差,但就是和360斗争,空耗实力. 悲剧呀! 那变形API函数挂钩技术和钩子隐藏有何关系呢? 我看了下资料,钩子隐藏技术是无意中被发现的技术,这和变形API函数挂钩技术有很深的关系.一个ARK工具扫描API函数是否被挂钩时,是基于对比来实现的. 简单来说就是检测,封装API函数的原始DLL文件中API函数的地址和内存中的API函数地址是否一样,不一样就可以说该API函数已经被挂钩(要注意的是,这是在通常来讲的情况下,可认为其已被挂钩.) 这是反汇编引擎对其进行扫描,但反汇编引擎通常只扫描API函数地址的前十个字节,也是说万一变形API挂钩,不在前十个字节里,就会被认为其没被挂钩,但事实上API已经被挂钩. 这就实现了API钩子隐藏. 这便是初级的API钩子隐藏技术.
object Hook,变形API函数挂钩技术,微点还有很多的技术是领先的.但是那是微点的工程师们多少个日夜,多少心血才凝成.这对微点,这由几乎没有核心研发能力刚毕业的年轻人[但这年轻人的年龄比自己要大的多,说年轻人时真有点怪异的感觉]占大部分的微点研发部,来说由为艰难. 祝愿你们能苦尽甘来,为微点谱写又一个传奇! |