首页
社区
课程
招聘
[求助]请教ObRegisterCallbacks为啥总是注册失败呢
发表于: 6天前 301

[求助]请教ObRegisterCallbacks为啥总是注册失败呢

6天前
301

开启了测试模式 也签了测试签名,证书也导入受信任的根 和受信任的发布者了,也换了好几个系统win10 win11,也问了ai,但是ObRegisterCallbacks永远报0xC0000022。我不注册只写个空到底是啥问题呢?很简单的一个代码,搞得头晕,请教各位大佬

#include <ntifs.h>
#include <ntstrsafe.h>

PVOID Globle_Object_Handle = NULL;

// 自定义回调
OB_PREOP_CALLBACK_STATUS
MyLySharkComObjectCallBack(
    _In_ PVOID RegistrationContext,
    _Inout_ POB_PRE_OPERATION_INFORMATION OperationInformation
)
{
    UNREFERENCED_PARAMETER(RegistrationContext);
    UNREFERENCED_PARAMETER(OperationInformation);

    DbgPrint("[lyshark] 执行回调函数... \n");
    return OB_PREOP_SUCCESS;
}

VOID UnDriver(_In_ PDRIVER_OBJECT driver)
{
    UNREFERENCED_PARAMETER(driver);

    if (Globle_Object_Handle) {
        ObUnRegisterCallbacks(Globle_Object_Handle);
        Globle_Object_Handle = NULL;
    }
    DbgPrint("回调卸载完成... \n");
}

NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath)
{
    UNREFERENCED_PARAMETER(RegistryPath);

    DbgPrint("hello lyshark \n");

    OB_OPERATION_REGISTRATION ops[1];
    RtlZeroMemory(ops, sizeof(ops));
    ops[0].ObjectType = PsProcessType;
    ops[0].Operations = OB_OPERATION_HANDLE_CREATE;
    ops[0].PreOperation = MyLySharkComObjectCallBack;
    ops[0].PostOperation = NULL;

    OB_CALLBACK_REGISTRATION reg;
    RtlZeroMemory(&reg, sizeof(reg));
    reg.Version = OB_FLT_REGISTRATION_VERSION;
    reg.OperationRegistration = ops;
    reg.OperationRegistrationCount = ARRAYSIZE(ops);
    reg.RegistrationContext = NULL;
    RtlInitUnicodeString(&reg.Altitude, L"600000");

    NTSTATUS status = ObRegisterCallbacks(&reg, &Globle_Object_Handle);
    if (NT_SUCCESS(status)) {
        DbgPrint("[lyshark message] 回调注册成功...");
    }
    else {
        // 新增:失败日志(不改变你原有的打印)
        DbgPrint("回调注册失败, NTSTATUS = 0x%08X \n", status);
        return status;
    }

    Driver->DriverUnload = UnDriver;
    return STATUS_SUCCESS;
}



[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 8256
活跃值: (4739)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
4d7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8r3!0#2k6q4)9J5k6i4c8W2L8X3y4W2L8Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3x3U0x3I4y4U0p5@1x3R3`.`.
6天前
0
雪    币: 1
活跃值: (69)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
MSGG05 774K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8r3!0#2k6q4)9J5k6i4c8W2L8X3y4W2L8Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3x3U0x3I4y4U0p5@1x3R3`.`.
3q大佬
5天前
0
雪    币: 360
活跃值: (1498)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我记得注册OB回调要改DriverObjet中的一个标志成员吧,好像是DriverObject->Flags |= 0x20?
3天前
0
雪    币: 1
活跃值: (69)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
幸运三叶草 我记得注册OB回调要改DriverObjet中的一个标志成员吧,好像是DriverObject->Flags |= 0x20?
/INTEGRITYCHECK 链接器里面加上这个就可以了
2天前
0
雪    币: 360
活跃值: (1498)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
跟这两行等效:
    //绕过签名检查
    PKLDR_DATA_TABLE_ENTRY pLdrData = (PKLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection;
    pLdrData->Flags = pLdrData->Flags | 0x20;
6小时前
0
游客
登录 | 注册 方可回帖
返回