首页
社区
课程
招聘
[求助]请教各位```
2009-11-12 16:32 4202

[求助]请教各位```

2009-11-12 16:32
4202
#pragma pack(1)
typedef struct ServiceDescriptorEntry
{
        unsigned int *ServiceTableBase;
        unsigned int *ServiceCounterTableBase; //Used only in checked build
        unsigned int NumberOfServices;
        unsigned char *ParamTableBase;
} SSDTEntry;
__declspec(dllimport)  SSDTEntry KeServiceDescriptorTable;

#pragma pack()

NTKERNELAPI NTSTATUS ZwTerminateProcess(
                                                                                IN HANDLE ProcessHandle OPTIONAL,
                                                                                IN NTSTATUS ExitStatus
                                                                                );

typedef NTSTATUS(*_ZwTerminateProcess)(
                                                                           IN HANDLE ProcessHandle OPTIONAL,
                                                                           IN NTSTATUS ExitStatus
                                                                           );
_ZwTerminateProcess Old_ZwTerminateProcess;

#define GetSystemFunc(FuncName) KeServiceDescriptorTable.ServiceTableBase[*(PULONG)((PUCHAR)FuncName+1)]
PMDL  MDSystemCall;
PVOID *MappedSCT;

#define GetIndex(_Function) *(PULONG)((PUCHAR)_Function+1)

#define HookOn(_Old, _New)  \
(PVOID) InterlockedExchange( (PLONG) &MappedSCT[GetIndex(_Old)], (LONG) _New)

#define UnHook(_Old, _New)  \
InterlockedExchange( (PLONG) &MappedSCT[GetIndex(_Old)], (LONG) _New)
UCHAR * PsGetProcessImageFileName( __in PEPROCESS Process );

NTSTATUS NewZwTerminateProcess(IN HANDLE ProcessHandle OPTIONAL,IN NTSTATUS ExitStatus)
{

        PEPROCESS Process;
        NTSTATUS status;
        char *nameptr=NULL;
        status = ObReferenceObjectByHandle(ProcessHandle,0,NULL,KernelMode,&Process,NULL);
        if(!NT_SUCCESS(status))
        {
                DbgPrint("GetProcessNamebyHandle failed\n");
                return STATUS_SUCCESS;
        }
        nameptr =PsGetProcessImageFileName(Process);
    if (strcmp(nameptr,"veSky2.exe")==0)
    {
                return STATUS_SUCCESS;
    }
    status=(_ZwTerminateProcess)Old_ZwTerminateProcess(ProcessHandle,ExitStatus);
        return status;
}

//Unload
VOID UnLoad(IN PDRIVER_OBJECT DriverObject)
{
        DbgPrint("UnLoad Driver.\n");
        //卸载Hook
        UnHook( ZwTerminateProcess, Old_ZwTerminateProcess);
       
        //解锁、释放MDL
        if(MDSystemCall)
        {
                MmUnmapLockedPages(MappedSCT, MDSystemCall);
                IoFreeMdl(MDSystemCall);
        }
}

//EntryPoint.
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
                                         IN PUNICODE_STRING RegistryPath)
{
        DriverObject->DriverUnload = UnLoad;
       
        //找出旧函数地址并保存
        Old_ZwTerminateProcess =(_ZwTerminateProcess)(GetSystemFunc(ZwTerminateProcess));
       
        MDSystemCall = MmCreateMdl(NULL, KeServiceDescriptorTable.ServiceTableBase, KeServiceDescriptorTable.NumberOfServices*4);
        if(!MDSystemCall)
                return STATUS_UNSUCCESSFUL;
        MmBuildMdlForNonPagedPool(MDSystemCall);
        MDSystemCall->MdlFlags = MDSystemCall->MdlFlags | MDL_MAPPED_TO_SYSTEM_VA;
        MappedSCT = MmMapLockedPages(MDSystemCall, KernelMode);
       
        //安装HOOK
        HookOn( ZwTerminateProcess, NewZwTerminateProcess);
        return STATUS_SUCCESS;
}
此代码我想HOOK ZwTerminateProcess 内核函数!在自己函数判断不让veSky2.exe结束!其他进程方个结束!不知道为什么一结束不是veSky2.exe包括veSky2.exe都会出现异常提示0X80003``请各位大侠帮忙!

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 149
活跃值: (193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuheyuan 2009-11-12 16:33
2
0
小弟驱动菜鸟 ```请大侠们帮帮我!
雪    币: 149
活跃值: (193)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuheyuan 2009-11-12 16:39
3
0
大侠们帮帮忙`弄不好没心情吃饭啊``
雪    币: 884
活跃值: (4095)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
kagayaki 2009-11-12 16:39
4
0
我也很菜,帮不了你。

不过, 就 HOOK ZwTerminateProcess, 不用驱动也可以结束你的进程的,方法也很多。
雪    币: 7651
活跃值: (493)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 15 2009-11-12 18:21
5
0
比如Job~
雪    币: 202
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
zerostudy 2009-11-14 08:50
6
0

菜鸟路过看下,驱动啊,太高深了
游客
登录 | 注册 方可回帖
返回