Linux中国  设为主页
 收藏本站
 
当前位置: > 首页 ->网络应用 ->网络安全 ->黑客技巧之安全稳定的实现进线程监控
  相关分类: 
Firefox专题
服务器
搜索引擎优化SEO
网管天地
网络安全
网络工程
网络技术
无线技术
邮件服务器
  站内搜索: 
热门文章排行
热门文章排行 打造模拟视频监控系统 (04-26)
黑客技巧 打造完美远程控制软件Radmi(04-26)
7月23日病毒 (04-26)
深入了解远程登录标准协议Telnet (04-26)
系统安全防范之Windows日志与入侵检(04-26)
精采文章排行
精采文章排行 教你如何防止脚本病毒执行的通用方法(06-07)
Win XP SP2拖放IE窗口可能引发黑客攻(06-07)
恶意网页病毒十三大症状分析及简单修(06-07)
防病毒必务宝典—计算机病毒专杀进程(06-07)
快速有效地封杀—巧利用Iris来查找蠕(06-07)
  ·Win XP SP2拖放IE窗口可能引发黑客攻击·恶意网页病毒十三大症状分析及简单修复方·防病毒必务宝典—计算机病毒专杀进程列表·快速有效地封杀—巧利用Iris来查找蠕虫病·木马病毒清除的通用解法·Win 2000防毒从安装系统时开始·邮件病毒入侵后五个清除步骤·Norton AntiVirus 2005测试版截图大赏·如何根据名称识别计算机病毒

黑客技巧之安全稳定的实现进线程监控

作者:Webmaster   来源:赛迪网安全社区    点击:   日期:2007-04-26 [收藏] [投稿]

  IE是否经常中毒?推荐您

用PsSetCreateProcessNotifyRoutine,PsSetCreateThreadNotifyRoutine来进行进程线程监控我想大家已经都非常熟练了。前一段时间看到网上有人在研究监视远线程的文章,比较有意思。就写代码玩一玩。这之中就出现了一些问题,比方说直接用sinister的代码的话,是不能动态卸载的,因为他在安装了进线程监视函数后没有进行清除动作,造成在动态卸载时蓝屏。

BUGCHECK为0x000000ce,错误码为:

DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS

很显然,在驱动退出后,一些进线程操作仍然在访问原来的地址,造成出错。在XP后,微软给出了一个函数PsRemoveCreateThreadNotifyRoutine用来清除线程监视函数(清除进程监视的就是PsSetCreateProcessNotifyRoutine)。我一直奇怪ICESWORD在Windows2000中是怎么做到进线程监视的。后来才发现,在运行icesword后释放出一个detport.sys文件,然后一直在系统中存在着没有卸载掉。只是把它隐藏了而已。这不是个好消息,难道我为了测试一个驱动,测试一次就得重启一次吗?呵呵,肯定不是啊,所以想办法搞定它。

我们来看一下进线程监视在底层是如何实现的,在Windows2000源代码中先找到创建线程的函数实现:

//////////////////////////////////////////////////////////////////////////////////////////
//
//   \win2k\private\ntos\ps\create.h
//
//////////////////////////////////////////////////////////////////////////////////////////
NTSTATUS
PspCreateThread(
    ...
    ...
    )
{
    ...
        if (PspCreateProcessNotifyRoutineCount != 0) {        //首先调用进程监控函数
            ULONG i;
            for (i=0; i<PSP_MAX_CREATE_PROCESS_NOTIFY; i++) {
                if (PspCreateProcessNotifyRoutine[i] != NULL) {
                    (*PspCreateProcessNotifyRoutine[i])( Process-
>InheritedFromUniqueProcessId,
                                                         Process->UniqueProcessId,
                                                         TRUE
                                                       );
                    }
                }
            }

        }
    ...
    ...
    if (PspCreateThreadNotifyRoutineCount != 0) {
        ULONG i;

        for (i=0; i<PSP_MAX_CREATE_THREAD_NOTIFY; i++) {    //再调用线程监控函数
            if (PspCreateThreadNotifyRoutine[i] != NULL) {
                (*PspCreateThreadNotifyRoutine[i])( Thread->Cid.UniqueProcess,
                                                    Thread->Cid.UniqueThread,
                                                    TRUE
                                                   );
            }
        }
    }
    ...
    ...
}

从上面可以看到,在每创建一个线程后会调用PspCreateProcessNotifyRoutine[i]地址指向的函数。而PsSetCreateThreadNotifyRoutine的作用就是将PspCreateThreadNotifyRoutine[i]数组设置值,该值就是监视函数的地址。

NTSTATUS
PsSetCreateThreadNotifyRoutine(
    IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
    )
{
    ULONG i;
    NTSTATUS Status;

    Status = STATUS_INSUFFICIENT_RESOURCES;
    for (i = 0; i < PSP_MAX_CREATE_THREAD_NOTIFY; i += 1) {
        if (PspCreateThreadNotifyRoutine[i] == NULL) {
            PspCreateThreadNotifyRoutine[i] = NotifyRoutine;
            PspCreateThreadNotifyRoutineCount += 1;
            Status = STATUS_SUCCESS;
            break;
        }
    }

    return Status;
}

上面的一些结构如下:

//////////////////////////////////////////////////////////////////////////////////////////
//
//   \win2k\private\ntos\ps\psp.h
//
//////////////////////////////////////////////////////////////////////////////////////////
#define PSP_MAX_CREATE_THREAD_NOTIFY 8        //最大监视数目

ULONG PspCreateThreadNotifyRoutineCount;    //用来记数
PCREATE_THREAD_NOTIFY_ROUTINE PspCreateThreadNotifyRoutine[ 
PSP_MAX_CREATE_THREAD_NOTIFY ];    //函数地址数组

而PCREATE_THREAD_NOTIFY_ROUTINE定义如下:

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<

上一页12 3 下一页

上一篇:黒客有什么可怕 设个陷阱来逮住他   下一篇:黑客技巧 打造完美远程控制软件Radmin
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论

   相关文章:
·教你如何防止脚本病毒执行的通用方法

   文章评论:(1条)
  
 请留名: 匿名评论   点击查看所有评论 论坛讨论
 

 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。