HoviDelphic 发表于 2010-3-27 14:30:49

[半原创]进程保护示例 - HdProcessProtectDemo

本帖最后由 HoviDelphic 于 2010-5-7 11:22 编辑

进程保护和窗体保护的代码,刚学驱动时写的。
有些地方的处理得不太好,可能会蓝屏。
不推荐在自己的软件里使用。
最新版本在9楼。

xiaoly99 发表于 2010-3-28 19:09:35

PspExitThread+KiInsertQueueApc完美结束

HoviDelphic 发表于 2010-4-3 16:52:03

PspExitThread+KiInsertQueueApc完美结束
xiaoly99 发表于 2010-3-28 19:09 http://www.m5home.com/bbs/images/common/back.gif

干掉这个是无需驱动的,用句柄劫持+CreateRemoteThread即可。

sanaman 发表于 2010-4-21 10:30:35

顶!顶!顶!

乔丹二世 发表于 2010-4-23 11:14:31

很不错的代码,支持大牛!

HoviDelphic 发表于 2010-4-23 22:51:25

回复 5# 乔丹二世

其实这个写得并不好,很容易BSOD的。

Tesla.Angela 发表于 2010-4-25 10:55:20

一些修改:
NTSTATUS fake_NtUserBuildHwndList(
                        IN HDESK hdesk,
                                IN HWND hwndNext,
                                        IN ULONG fEnumChildren,
                                                IN DWORD idThread,
                                                        IN UINT cHwndMax,
                                                                OUT HWND *phwndFirst,
                                                                        OUT ULONG* pcHwndNeeded)
{
        NTSTATUS ntStatus;
        ULONG j=0,i=0;
        if (PsGetCurrentProcess()!= ProtectedProcess)
        {
                if (fEnumChildren==1)//是否是枚举子窗口
                {        //如果是枚举本程序子窗体返回失败
                        if (Old_NtUserQueryWindow((ULONG)hwndNext, 0) == (ULONG)PsGetProcessId(ProtectedProcess))
                        {
                                return STATUS_UNSUCCESSFUL;
                        }
                }
                //枚举顶层窗口
                ntStatus = Old_NtUserBuildHwndList(hdesk, hwndNext, fEnumChildren, idThread, cHwndMax, phwndFirst, pcHwndNeeded);
                if (NT_SUCCESS(ntStatus))
                {
                        while (i<*pcHwndNeeded)
                        {
                                if (Old_NtUserQueryWindow((ULONG)phwndFirst,0) == (ULONG)PsGetProcessId(ProtectedProcess))
                                {
                                        phwndFirst=0;//直接把保护的句柄置0
                                }
                                i++;
                        }
                }
                return ntStatus;
        }
        return Old_NtUserBuildHwndList(hdesk, hwndNext, fEnumChildren, idThread, cHwndMax, phwndFirst, pcHwndNeeded);
}

NTSTATUS fake_NtDuplicateObject(
                       IN HANDLE SourceProcessHandle,
                               IN HANDLE SourceHandle,
                                       IN HANDLE TargetProcessHandle,
                                               OUT PHANDLE TargetHandle OPTIONAL,
                                                       IN ACCESS_MASK DesiredAccess,
                                                               IN ULONG Attributes,
                                                                       IN ULONG Options)
{
        NTSTATUS ntStatus,Tmp,Tmd;
        THREAD_BASIC_INFORMATION TBI;
        PROCESS_BASIC_INFORMATION PBI;
        ntStatus=Old_NtDuplicateObject(SourceProcessHandle,SourceHandle,TargetProcessHandle,TargetHandle,DesiredAccess,Attributes,Options);
        if (NT_SUCCESS(ntStatus) )
        {        //在当前进程上下文直接查询输出句柄所属ID是我们的直接CLOSE掉
                //这里 用内核提供的查询句柄函数似乎更精确 可以直接获取对象 然后对比是否是我们的进线程对象.
                Tmp=ZwQueryInformationProcess(*TargetHandle,ProcessBasicInformation,&PBI,sizeof(PBI),NULL);
                if (NT_SUCCESS(Tmp))
                {       
                        if (PBI.UniqueProcessId ==(ULONG)PsGetProcessId(ProtectedProcess))
                        {
                                ZwClose(*TargetHandle);
                                *TargetHandle=0;
                                ntStatus= STATUS_UNSUCCESSFUL;
                        }
                }
                Tmd=ZwQueryInformationThread(*TargetHandle,0,&TBI,sizeof(TBI),NULL);
                if (NT_SUCCESS(Tmd))
                {
                        if (TBI.ClientId.UniqueProcess==(HANDLE)inpid)
                        {
                                ZwClose(*TargetHandle);
                                *TargetHandle=0;
                                ntStatus= STATUS_UNSUCCESSFUL;
                        }
                }
        }
        return ntStatus;
}

BOOLEAN fake_KeInsertQueueApc(IN PKAPC Apc,IN PVOID SystemArgument1,IN PVOID SystemArgument2,IN KPRIORITY PriorityBoost)
{
        PETHREAD ThreadInApc;
        PEPROCESS ThreadInApcOfProcess;
        if( MmIsAddressValid((PVOID)(Apc->Thread))==FALSE ) //如果线程地址无效
                return FALSE; //直接返回失败
        ThreadInApc=(PETHREAD)(Apc->Thread);
        ThreadInApcOfProcess=IoThreadToProcess(ThreadInApc);
        if (ProtectedProcess!=ThreadInApcOfProcess)
        {
                //不是自己的线程,直接把参数传递给原始函数
                return Old_KeInsertQueueApc(Apc,SystemArgument1,SystemArgument2,PriorityBoost);
        }
        else
        {
                //如果是自己的线程,就判断一下是否会对自己造成损害
                if (PriorityBoost==2||PriorityBoost==0)
                {
                        return FALSE;
                }
                else
                {
                        return Old_KeInsertQueueApc(Apc,SystemArgument1,SystemArgument2,PriorityBoost);
                }
        }
}

Tesla.Angela 发表于 2010-4-25 10:56:41

建议放过的进程:自己、csrss.exe、explorer.exe(特别是有小图标的时候)。

Tesla.Angela 发表于 2010-4-25 10:58:57

本帖最后由 HoviDelphic 于 2010-4-25 11:00 编辑

TaProcPt build 20100424,For 2000/xp/2003/vista/2008/7。
完整的垃圾代码,蓝屏别怪我。

flexdm 发表于 2010-5-6 02:53:28

good

eaaca123 发表于 2010-7-31 13:19:31

soulper 发表于 2010-8-10 13:53:43

顶顶更健康

jzy1115 发表于 2011-1-15 11:21:52

加载保护就不能运行程序了

vanlaw 发表于 2011-2-10 14:20:22

学习一下!

hotnetbar 发表于 2011-2-10 18:41:23

學習學習

ty0625 发表于 2011-7-15 18:52:15

good

ty0625 发表于 2011-7-15 18:54:29

才发现我的UID 很多9

Tesla.Angela 发表于 2011-7-15 21:27:14

ty0625 发表于 2011-7-15 18:52 static/image/common/back.gif
good

这个不good,很bad。。。
小心蓝屏。

ty0625 发表于 2011-7-22 00:47:04

Tesla.Angela 发表于 2011-7-15 21:27 static/image/common/back.gif
这个不good,很bad。。。
小心蓝屏。

xp SP1SP2SP3通过 不会蓝2003直接蓝!!

w3297425 发表于 2015-1-6 17:54:48

新手来学习啦 ,不知道有没有钱购买

upring 发表于 2015-4-16 10:20:07

支持一下各位大侠

iop02008 发表于 2022-5-16 20:29:43

先马克一下
页: [1]
查看完整版本: [半原创]进程保护示例 - HdProcessProtectDemo