个人产品
企业产品
安全信息
病毒专栏 | 漏洞专栏 | 木马专栏 | 防护专栏 | 安全业界 | 毒霸活动 | 热点专题 | 漫画安全 | 期刊订阅
首页 > 木马专栏 > 木马清除防治 > 正文
关门杀“马”(3)— 探讨木马病毒的清除方法
毒霸信息安全网 http://www.duba.net
2004-09-10 18:17:43 来源:赛迪网
推送:
金山毒霸2005正版免费下载
  通过前述可知,枚举出系统中所有进程以及它们所打开的端口,这完成木马病毒的检测与清除工作的关键任务。要做到这一点方法有多种,但最简单的就是调用NTDLL.dll中的几个未公开API,如NtQuerySystemInfomation,NtQueryInfomationProcess。其中NtQuerySystemInfomation函数提供了一个简单的途径以获得系统中所有的HANDLE(句柄),只要找到系统中的SOCKET句柄,就可以通过这个句柄得到该进程所使用的端口号,这样就完成了进程与端口之间的关联,我们正是通过这种关联来判断一个进程是否为木马进程。NtQuerySystemInfomation函数的原型如下:

  DWORD NtQuerySystemInformation( DWORD dwRecordType, PDWORD pdwHandleList, DWORD dwNumBytes, PDWORD pdwNumBytesRet );

  其中,第一个参数dwRecordType用于指定所要查询的系统信息类型,为了查询系统HANDLE列表,此项参数要设置为16,此数值是来自网上资料,由于这个函数是未公开函数暂时无法得到更详细的资料,第二个参数是一个指针,用来返回系统句柄列表,在调用函数之前,必须为这个指针分配足够的内存空间,否则函数调用会出错;第三个参数是指定为HandleList预先所分配的内存空间大小,单位是byte;第四个参数是函数调用后返回的HandleList的大小,如果函数调用成功,返回值将是0,否则可以使用GetLastError()获得详细的错误代码。

  一旦NtQuerySystemInformation函数调用成功,系统中所有的句柄将被存放在pdwHandleList所指向内存空间中,其中,pdwHandleList所指向的第一个32位数,是这个缓冲区所包含的句柄数量,之后是顺序排列的句柄指针pHandleInfo,指向的是HANDLEINFO结构。HANDLEINFO结构定义如下:

  typedef struct _HandleInfo

  {

    USHORT dwPid;

    USHORT CreatorBackTraceIndex;

    BYTE ObjType;

    BYTE HandleAttributes;

    USHORT HndlOffset;

    DWORD dwKeObject;

    ULONG GrantedAccess;

  }HANDLEINFO, *PHANDLEINFO;

  这个结构定义表明,句柄信息中包括了句柄所属进程的PID,只要获取句柄信息可以关联进程和端口了。不过,在NT系统中包含有各种各样的句柄:进程句柄、令牌句柄、文件句柄、窗口句柄……怎样才能判断出一个句柄究竟是不是SOCKET句柄呢?这就要通过HANDLEINFO结构中的ObjType属性了,根据已有资料分析,SOCKET句柄的类型值为0x1A,所以,只要将所有类型为0x1A的句柄取出,进行GetSockName操作就可以得到当前的进程/端口对应列表。不过此时我们得到的句柄都是属于其他的进程,根据在NT系统中进程保护的原则,一个进程不能够直接得到其他进程的各种信息,特别是句柄,不同进程中的同一句柄(句柄的数值相同)可能有完全不样同的意义。因此,得到SOCKET句柄后还必须进行一次转换,将其他进程的句柄转换为本进程的句柄,这个转换工作只要简单地调用DuplicateHandle函数就可以完成了。DuplicateHandle函数的调用方法略。

  这样才可以通过getsockname、getsockopt等函数来获得SOCKET的各种属性了。示例代码段如下:

  ......

  sockaddr_in name = {0};

  name.sin_family = AF_INET;

  int namelen = sizeof(sockaddr_in);

  SOCKET s = (SOCKET)hMyHandle;

  char szSockType[6][6] = { "NUL", "TCP", "UDP", "RAW", "RDM","SEQ" };

  iRet = getsockname( s, (sockaddr*)&name, &namelen );

  if ( iRet != SOCKET_ERROR )

  {

    int sockType = 0;

    int optlen = 4;

    iRet = getsockopt(  s,SOL_SOCKET, SO_TYPE, (char*)&sockType, &optlen );

    printf("PID=%4d PORT=%5d %s ",pHandleInfo->dwPid,

    ntohs( name.sin_port ), szSockType[sockType] );

  }

  ......

  得到系统中正在运行的进程与其打开的端口信息后,就可以通过病毒库并结合黑白端口表来决定什么进程应该清除,什么进程可以放行了。

  近来,在网上不断有新型木马病毒出现,有些可以隐藏到DLL或正常程序;有些则改变通信方式,进程间不再通过端口进行联系,而将要传递的信息嵌入到IGMP包中发出,以躲避杀毒软件的检测与清除,由于要编制这样的木马病毒程序有相当的难度,并非一般的编程爱好者可以胜任,因而这样的木马病毒还比较少见。但这意味着,木马病毒的检测与清除将是一个长期的话题。本文浅述了木马病毒的工作原理与其基本的检测与清除方法,希望能有助于读者的研究、学习,同时欢迎大家一块探讨木马病毒的预防与清除技术。
【责任编辑:Belinda
欢迎订阅金山信息安全RSS资讯: 拷贝地址到您的阅读器 | | 如何订阅 | 下载阅读器 | 什么是RSS?
毒霸网站热点推荐
·手机快速订购金山毒霸2007杀毒套装 10元包月
·金山毒霸2007隆重上市 免费下载
·订防护知识短信每月10元 获赠毒霸2007包月 移动订阅 联通订阅
我要发表评论 内容指正 进入论坛 打印此页 返回顶部
相关文章:
· 国际反病毒大会AVAR2005即将首次在中国举行 2005-10-09 11:56:56
· 10.09病毒预警:病毒伪装成JPG图标欺骗用户 2005-10-08 19:49:27
· 10.8病毒预警:超女演唱会门票作诱饵的病毒 2005-10-08 09:07:14
· 10.8预警:节后警惕“QQ蠕虫”“魔兽木马” 2005-10-07 16:42:57
· 10.7病毒预警:“幽灵”病毒通过邮件干扰用户 2005-10-07 09:56:12
匿名发表  昵称:  验证码:

如果您有关于产品方面的问题,请您登陆客服在线,以便我们尽快为您解答:)
金山毒霸2007隆重上市
[购买毒霸] 店面买·网上买
新闻动态

· 贵州破获首例网银被盗案 作案人竟是11岁男童  08/11
· 美三分之一网民被骗 造成损失高达80亿美元  08/10
· 网络安全形势不容乐观 五天内两政府网站被黑  08/10
· 电子护照安全堪虑 可被恐怖分子用来引爆炸弹  08/08
· FBI认识到黑客的重要性 有助于打击网络犯罪  08/08
· 英国电子护照被破解 安全人员称发现克隆方法  08/08
更多>>

金山简介 | About Kingsoft | 业务合作 | 广告服务 | 招聘信息 | 客服中心 |
© 2001-2005 金山公司 版权所有