首先,郑重感谢海风月影,cvcvxk,zhouws等前辈,也应看雪大侠们的开源精神
这些猥琐的xxoo使我能有很深刻的体会
这套工程是不久前完成的,主要就是自建调试机制
由于精力有限,在重载内核这方面没去做过多研究
下面来简单说说驱动保护的反调试,相信不少同学都知道调试端口,调试互斥体,调试标志...
对于DebugPort检测来说,一般的Pass手段,都是通过修改偏移,但这种方式也有很大的局限性
只要被保护程序调用一下系统调试异常的相关函数,就可以检测到,比如说PP保护...
再就是DbgkpProcessDebugPortMutex,为了让调试器跟系统能够同步,MS引入了调试互斥体这个东东
对于进程PEB->BeingDebugged,是让系统知道这个进程正在被调试,以此做为依据来执行某些操作,比如进程被调试器附加的时候,会调用int 3,很多保护在被附加的时候断不下来,这个东东也会作怪
既然驱动保护可以检测这些特征,那么知道了这些东东的用途,就完全能够自己去构造
编程的重点是面向对象,没错,但是在某些时候,编程的重点是面向自己的对象
天不给我路走,我自己找路走,地不让我路平,我自己去踏平
再来谈谈HP,这个保护系统可谓牛X,不得不佩服海风大侠,也让我死伤了不少脑细胞
SSDT和Inline以及object钩子就不说了,单单一个调试权限的问题,就让我捂了半天,怎么办?从最初的Hide调试对象类型,让HP找不到,到现在干脆自己造一个对象类型ObjectType覆盖过去,int 1和int 3也处理完毕
好了,准备收工,现在万事俱备只欠东风了,工程创建完成后,开启HP调试一试,果然不出乎我所料,太喜欢你了
软的终于搞定了,再来看看硬的,一个he send过去后,马不停蹄地进去捣乱,奇怪了,真的是神马,马不停蹄了
目测看来,应该是GetThreadContext和SetThreadContext这2个鬼,于是乎,开始捉鬼了
当满怀希望再次刺探的时候,鬼又来了
看来鬼真的是太多了,好吧,再次打住...
继续捉了好一阵,终于,最后这个鬼真的是来无影去无踪,很擅长杀人于无形,虽然是硬碰硬,但它也会四两拨千斤,真的是太狠了
让你根本硬不起来
原来它是利用了调试寄存器的特性,而且DPC还会主动触发硬件断点异常来通信,所以恢复IDT表就重启或BSOD
又继续研究了一阵子找到对策,再次来到老地方亮剑,这次总算硬起来了,终于可以软硬通吃,太爽了,爱死你了
最后申明,这套工程的用途和一切后果与本人无关,在xp上面跑,通过符号文件来获取内核函数地址,系统版本不一样,对应的符号文件也不一样,需要自己放进去,界面就2个按钮,是用Delphi写的,把数据通过文件映射传给驱动,一个OD插件来欺骗PEB->BeingDebugged,可以让OD在附加进程的时候能够断下来,驱动里面通过对象隐藏了OD,并自创了2个对象类型,断链表,Hide窗口,抹除句柄啥的,你们都懂的,另外,能Pass内核钩子的同学自己改一下,也可以调试PP和TP...蓝屏自己看着办吧
最后的最后,求收留,求救助,求交流,QQ:14946052,本人三无,无房子无车子无女子,纯属无产阶级
附上工程
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法