Joe1sn's Cabin

windows内核驱动 10-对抗进程回调保护与注册表回调保护

越来越感觉科技树点歪了

注册表回调保护对抗

  1. 可以得到所有回调的cookie信息,从而进行对抗。

  2. 通过MmGetSystenRoutineAddross找到CmUnRegisterCallback的位置,解析保存的回调函数链表做patch

  3. 找到全局保存的当前注册表的回调值,直接清空。

对象回调保护对抗

  1. 可以得到所有回调的handle信息,从而进行对抗。

  2. 通过MmGetSystenRoutineAddross找到ObUnRegisterCallbacks的位置,解析保存的回调函数链表到回调函数做patch

  3. 从这里

    1
    obReg.ObjectType = PsProcessType;   //注册进程的回调

    解析_OBJECT_TYPECallbackList

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    +0x000 TypeList         : _LIST_ENTRY
    +0x010 Name : _UNICODE_STRING
    +0x020 DefaultObject : Ptr64 Void
    +0x028 Index : UChar
    +0x02c TotalNumberOfObjects : Uint4B
    +0x030 TotalNumberOfHandles : Uint4B
    +0x034 HighWaterNumberOfObjects : Uint4B
    +0x038 HighWaterNumberOfHandles : Uint4B
    +0x040 TypeInfo : _OBJECT_TYPE_INITIALIZER
    +0x0b8 TypeLock : _EX_PUSH_LOCK
    +0x0c0 Key : Uint4B
    +0x0c8 CallbackList : _LIST_ENTRY

    而且PsProcessType是一个全局的地址,所以对抗的驱动依旧能够找到(有点像d3d hook中找到SetPresent的方法)