某管家的自我保护很挫啊

2010-8-24 Nie.Meining Debug

今天看了看某管家的自我保护。用XueTr查看发现它的驱动对NtTerminateProcess进行了SSDT Hook。
于是逆向该驱动,把里面的FakeNtTerminateProcess抓出来看了看,发现该管家做事情相当纠结啊!
FakeNtTerminateProcess一开始先调用IoGetCurrentProcess()和PsGetCurrentProcessId()获得当前进程(即调用NtTerminateProcess的进程)的eproc和pid。
由于FakeNtTerminateProcess的参数中有目标进程的handle,于是它接下来通过ObReferenceObjectByHandle()由handle获得了目标进程的eproc。
接着通过对比当前进程的eproc和目标进程(即被terminate的进程)的eproc是否相等,来确定是不是自己结束自己,如果是就放行了。
如果不是自己结束自己,它又通过ObOpenObjectByPointer()将目标进程的eproc转换回参数里本来就有的handle(开始纠结了),然后通过ZwQueryInformationProcess()函数由handle获取目标进程的pid。这下他就有了当前进程和目标进程的pid,接下来他用当前进程和目标进程的pid分别取出这两个进程的名字。取法相当不给力:

阅读全文>>

评论(0) 浏览(23404)

hookport中的自我保护

2010-8-9 Nie.Meining Debug

今天无聊,看了下hookport中的自我保护部分。
360在KiFastCallEntry+0xe5的位置进行了hook,并且是两段跳,如图:
点击查看原图
360在DriverEntry的最后调用sub_18FB2()函数对hook点的第一段跳进行保护,sub_18FB2代码如图:

阅读全文>>

评论(1) 浏览(3711)

Powered by emlog