函数名:PsSetCreateProcessNotifyRoutine //添加或删除进程创建退出例程!
原型:
NTSTATUS PsSetCreateProcessNotifyRoutine(
[in] PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
[in] BOOLEAN Remove
);
参数
[in] NotifyRoutine
指定调用方提供的进程创建回调例程的入口点。请参阅PCREATE_PROCESS_NOTIFY_ROUTINE。
[in] Remove
指示是否应将 NotifyRoutine 指定的例程添加到系统的通知例程列表中,或从中删除该例程。如果为 FALSE,则将指定的例程添加到列表中。如果为 TRUE,则从列表中删除指定的例程。
返回值
PsSetCreateProcessNotify 例程可以返回下列值之一:
返回代码 描述
STATUS_SUCCESS
给定的 NotifyRoutine 现在已向系统注册。
STATUS_INVALID_PARAMETER
给定的 NotifyRoutine 已注册,因此此调用是冗余调用,或者系统已达到注册进程创建回调的限制。
1. `打开WinDbg`
2. WinDbg->U PsSetCreateProcessNotifyRoutine
3. 取出红色框中的地址 fffff807`0ddfdc80
4. WinDbg->U fffff807`0ddfdc80 L200
5. 继续取出地址 - 这其实就是一个进程回调数组首地址
6. WinDbg->DQ fffff807`0dbbb060
数一数是十个回调,嗯我看下PChunter或其他工具,都一致。
7. 取第一个地址试试ffffe706`2105042f->掩码->&0xFFFFFFFFFFFFFFF8 = 0xFFFFE70621050428
8. 得到的还不是真正的对象地址,需要WinDbg->DQ 0xFFFFE70621050428
这时候就得到了所谓的回调入口地址,对比下方PChunter的内容确实是一致,是第一个回调对象!
如果创建的是EX好像有HANDLE的什么,就不细研究了。