发两个过TerSafe反调的驱动
一个是一年前写的,当时技术太菜,全硬编码通用性不太好,
大概思路就是,tersafe.sys里有个链表里面保存了要清零DebugPort的进程eprocess地址,
访问这个链表前要KfAcquireSpinLock加锁,
因此hook这个函数将其表清空即可饶过DebugPort清零。
其他的就是饶过他的几个钩子没什么好说的。
一年后的今天大概又觉得心里痒痒又跟大牛们学了许多,于是写了个通用点的驱动,
方法大概就是那个加载一个原始内核模块,然后把全局数据引用指向原来的模块(修复重定位),然后修复新模块的ServiceTable里的函数指向新模块,
并把新模块的ServiceTable添加到SSDT中的第三项,
通过hook sysenter判断调用者是否为我们要保护的进程,
将eax即ServiceIndex加上2000h即可调用到新模块的Service函数.
这是对于上层调用的饶过钩子,而对于底层上来的中断什么的,遍历IDT,
将里面在原内核模块范围的ISR,全部指向新模块。
这样大约可以饶过大部分钩子了罢
而对于DebugPort清零,也没什么好说的,搜特征码后改掉偏移。
还有一个要注意的就是有几个地方要把直接使用函数地址的地方改到新模块里,
不然跑着跑着又会跑回旧内核模块里。
在这一年里感觉自己又学习了许多,希望下一年可以写出更好的驱动
参考文章:
http://bbs.pediy.com/showthread.php?t=148815&highlight=tprotect+%E4%BB%A5%E4%B8%8B+%E4%B8%8B
http://bbs.pediy.com/showthread.php?t=143987&highlight=%E5%8A%A0%E8%BD%BD+%E5%86%85%E6%A0%B8+%E6%A8%A1%E5%9D%97
http://bbs.pediy.com/showthread.php?t=140159&highlight=%E5%8A%A0%E8%BD%BD+%E5%86%85%E6%A0%B8+%E6%96%87%E4%BB%B6
http://bbs.pediy.com/showthread.php?t=142443
