写上未更新的原因是我觉得 当初写这篇文章的时候理解的还是不够彻底,现在又了新的认识,待老夫有时间的时候在来重写一次
这里附上新的突破方法 我已经我写的时候已经写上了
今天发到博客的时候才发现没写,来补上
可以看我发到梦老大论坛的帖子,直接看第三种方法就行,前面两种我都服了,这样获取对象类型,太年轻啊
http://www.mengwuji.net/forum.php?mod=viewthread&tid=2323&page=1
简单说下就是讲线程对象中的SupportsObjectCallbacks域置0
随便说一说 一字节anti创建进程线程等回调 这个不是我知道的,这是论坛一哥们发的
http://www.mengwuji.net/forum.php?mod=viewthread&tid=2498&page=1
需要注意的是梦老大的留言
然后我搜了搜论坛
看到老大说了
PspNotifyEnableMask这个可以控制的,其中第0位代表是否开启模块回调,第一位代表是否开启进程回调(调用PsSetCreateProcessNotifyRoutine设置的情况),第二位代表是否开启进程回调(调用PsSetCreateProcessNotifyRoutineEx设置的情况),第三位代表是否开启线程回调。
如果你想让进程回调失效,就把PspNotifyEnableMask的第一位和第二位设置为零就行了,只是这样做所有的进程回调就会失效,不过也无所谓啦
那它到底控制多少呢?IDA一看就知道了
方向 种类 地址 文本
---- ---- ---- ----
上 r PspExitProcess+55 mov ebp, cs:PspNotifyEnableMask
上 r PspExitProcess+5B mov eax, cs:PspNotifyEnableMask
上 r PspExitThread+BE mov eax, cs:PspNotifyEnableMask
上 r PspInsertThread+3B0 mov r11d, cs:PspNotifyEnableMask
上 r PspInsertThread+4A6 mov ecx, cs:PspNotifyEnableMask
上 r PspInsertThread+4B6 mov eax, cs:PspNotifyEnableMask
上 r DbgkCreateThread:loc_14036BD05 mov ecx, cs:PspNotifyEnableMask
上 r MiMapViewOfImageSection:loc_1403990D6 mov eax, cs:PspNotifyEnableMask
上 r PsCallImageNotifyRoutines+2C mov eax, cs:PspNotifyEnableMask
上 r MmLoadSystemImage+250 mov eax, cs:PspNotifyEnableMask
上 r PsSetLoadImageNotifyRoutine+55 mov eax, cs:PspNotifyEnableMask
上 w PsSetLoadImageNotifyRoutine+5F lock bts cs:PspNotifyEnableMask, 0
上 r PsSetCreateThreadNotifyRoutine+55 mov eax, cs:PspNotifyEnableMask
上 w PsSetCreateThreadNotifyRoutine+5F lock bts cs:PspNotifyEnableMask, 3
r PspSetCreateProcessNotifyRoutine+1BB mov eax, cs:PspNotifyEnableMask
下 w PspSetCreateProcessNotifyRoutine+1C5 lock bts cs:PspNotifyEnableMask, 1
下 r PspSetCreateProcessNotifyRoutine+1D7 mov eax, cs:PspNotifyEnableMask
下 w PspSetCreateProcessNotifyRoutine+1E1 lock bts cs:PspNotifyEnableMask, 2
大概看一下是创建进线程回调,模块加载回调,很多都是重复,那么就是sub
众所周知如果不patch DSE KPP 是不能在x64下进程SSDT HOOK的,那以前x86保护进程都是SSDT HOOK NtOpenprocess 保护线程HOOK NtOpenThread 很有游戏保护也是这么做的到了x64,这样的作法是不可行的,那么如何保护进程呢,微软给我们提供了一个API ObRegisterCallbacks 注册一个Object回调
先看下原型: