找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 9016|回复: 7

分享 进程拦截的一个标准方法

[复制链接]

9

主题

32

回帖

0

精华

铜牌会员

积分
162
发表于 2013-1-7 13:18:59 | 显示全部楼层 |阅读模式
方法在 WIN2003 X86 X64  WIN2008 X64 测试通过

//1,注册回调
status = PsSetLoadImageNotifyRoutine(MyProcessImageLoadFilter);

//2,
VOID MyProcessImageLoadFilter (
                                                           IN PUNICODE_STRING  puniFullImageName,
                                                           IN HANDLE  hProcessId,
                                                           IN PIMAGE_INFO  pImageInfo
                                                           )
{
        PEPROCESS       pEprocess = NULL;
        PVOID                        pPEBAddr = NULL;

             //这里的 puniFullImageName 就是镜像路径了 有DLL、EXE什么的,过滤进程的话就判断EXE好了

            //如果判断是要进程拦截的进程 那么就销毁它

            KillProcess(hProcessId,  pEprocess, pPEBAddr );

         //这样就达到了 拦截进程的目的
}


//3,销毁进程

void KillProcess(HANDLE hProcessId, PEPROCESS pEprocess, PVOID pPEBAddr)
{
        if( !NT_SUCCESS(PsLookupProcessByProcessId((HANDLE)hProcessId,&pEprocess)) )
        {
                return;
        }

        if(VERSION_CHECK)
        {
                if( !MmIsAddressValid((PULONG64)((ULONG64)pfnGetProcessPeb(pEprocess) + BASEADDRESS_OFFSET)) )
                {   
                        return ;
                }        
                pPEBAddr = (PVOID)((ULONG64)pfnGetProcessPeb(pEprocess) + BASEADDRESS_OFFSET);

                *(ULONG64*)pPEBAddr += BASE_ADDRESS_DESTORY;
        }
        else
        {
                if( !MmIsAddressValid((PULONG)((ULONG)pfnGetProcessPeb(pEprocess) + BASEADDRESS_OFFSET)) )
                {   
                        return ;
                }
                pPEBAddr = (PVOID)((ULONG)pfnGetProcessPeb(pEprocess) + BASEADDRESS_OFFSET);               

                *(ULONG*)pPEBAddr += BASE_ADDRESS_DESTORY;
        }

        ObfDereferenceObject(pEprocess);
}

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2013-1-7 14:07:18 | 显示全部楼层
LZ这神判断。。。
如果程序的后缀名不是EXE的话,那岂不是能bypass你的判断?
你把EXE的后缀名改为scr,照样能运行。

9

主题

32

回帖

0

精华

铜牌会员

积分
162
 楼主| 发表于 2013-1-7 14:35:41 | 显示全部楼层
Tesla.Angela 发表于 2013-1-7 14:07
LZ这神判断。。。
如果程序的后缀名不是EXE的话,那岂不是能bypass你的判断?
你把EXE的后缀名改为scr,照 ...

呵呵,可以在应用层设置规则嘛

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2013-1-7 17:15:49 | 显示全部楼层
xiaoc1026 发表于 2013-1-7 14:35
呵呵,可以在应用层设置规则嘛

规则个毛。你这样子做根本行不通。
标准做法是使用PsSetCreateProcessNotifyRoutine。

9

主题

32

回帖

0

精华

铜牌会员

积分
162
 楼主| 发表于 2013-1-7 18:03:32 | 显示全部楼层
Tesla.Angela 发表于 2013-1-7 17:15
规则个毛。你这样子做根本行不通。
标准做法是使用PsSetCreateProcessNotifyRoutine。 ...

为什么行不通呢,事实上我要拦截 c:\test.exe ,上面的方式是可行的哦

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2013-1-8 18:50:16 | 显示全部楼层
WINDOWS下实现同一效果的方式很少只有一种方法,哈哈.

只要达到目的又没有问题的话就好了{:soso_e113:}
我就是嗷嗷叫的老马了......

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2013-1-13 16:51:27 | 显示全部楼层
xiaoc1026 发表于 2013-1-7 18:03
为什么行不通呢,事实上我要拦截 c:\test.exe ,上面的方式是可行的哦

我的意思是,这么做只能拦截扩展名为EXE的程序,无法拦截扩展名为其他的程序。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2013-1-18 12:48:48 | 显示全部楼层
sb666 发表于 2013-1-17 23:30
在LoadImageNotify回调里获取前两个字节……看看是不是PE……


走LoadImageNotify的,有可能不是PE么?
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表