网络安全>黑客病毒安全防范安全产品教程恶意软件|产品中心群乐下载Vista频道体验最新杀毒软件IBM RBDE概览
您现在的位置: 天极网 > 软件频道 > 网络安全频道 > 黑客技术 > 巧妙利用成员模板函数为类留下后门
全文

巧妙利用成员模板函数为类留下后门

2007-04-30 08:48作者:出处:论坛整理责任编辑:原野

  【编辑提示:本文内容仅供参考,切勿用于不当之处!】

  如果你的类需要扩展功能,除了修改源码之外,你也可以从这个类派生一个类来对这个类作扩充。比如有如下一个类。

class cls 
{ 
public: 
  int fun( int a) 
  { 
    //一些处理 
    return 0; 
  } 
};

  类cls有一个函数fun能针对一个int型的数据进行一些必要的动作。现在假如,要对这个cls类进行功能扩充。让它能针对一个double型的数据进行一些动作。第一种扩充方法是修改类的源码如下:

class cls 
{ 
public: 
  int fun( int a) 
  { 
    //一些处理 
    return 0; 
  } 
  int fun( double a) 
  { 
    // 一些处理 
    return 0; 
  } 
};

  经过对类cls源码的修改,cls现在有了针对的double功能了。可是这种改源码的方法。会影响到其它的使用到这个cls类的地方。为了降低这种影响,可以采用从cls类再派生新类的做法,如下:

class cls2: public cls 
{ 
public: 
  int fun( double a) 
  { 
    //一些处理 
    return 0; 
  } 

};

  经过对派生,现在cls2这个类扩展了cls的功能。现在cls2可以针对int和double两种数据类型而做必要的处理了。可是这种通过派生新类的扩展,不能使以前就使用cls的用户直接从中受益。这些用户想要使用这个新扩展的功能,就必需修改自己的代码来,添加对cls2的适应。

  如果象上面的这种功能扩充,要是进行多几次的话,采用第一种方法,就会经历多次cls类的代码修改,采用第二种方法,就会产生多次派生过程。象cls3,cls4等等。而且采用第二种方法还有一个非常大的不足。那就是派生类不能访问基类的私有成员。假如扩充出来的功能在进行处理时要对cls中的一些私有成员有所依赖,就不能采用第二种扩展方法。

  从以上的弊端来看,这两种功能扩展的方法都不是好方法。

  下面我们再来说一种进行功能扩展的方法。要采用这种方法,就需要在cls类在设计时就留出扩展口。现在我们重新设计cls类如下:

class cls 
{ 
public: 
  //把要传入的数据的地址转为void型的, 
  //用type来表明进行处理时要对arg进行什么样的转换 
  int fun( void* arg, int type) 
  { 
    switch(type) 
    { 
    case 0: 
      //做针对int型数据的处理 
      break; 
    default: 
      break; 
    } 
    return 0; 
  } 
};

  经过重新设计的cls类,现在要进行功能扩展的话,只需要在它的函数fun中多加一条case就行了,很方便了。但是这样的设计是脆弱的。函数fun的两个参数arg和type,非常的不安全,很容易出现搭配错误。看来我们还要寻找更好的办法。于是我们再次修改我们的cls类如下:

class cls 
{ 
public: 
  template< typename t> 
  int fun( t& arg) 
  { 
    //一些处理 
    return 0; 
  } 
};

  这一次的cls类的模板成员函数fun,可以经得起功能扩充了。扩充它的途径是特化这个成员模板函数。例如现在要对cls进行针对double的处理的扩展,只需对fun进行double类型的特化如下。

template <> 
int cls::fun(double& arg) 
{ 
  //针对double的一些处理 
  return 0; 
}

  特化的过程没有动过cls类的一分一毫,但我们的功能扩展却安全的完成了,这才是我们想要的方便的,安全的功能扩展方法。

  阅读关于 后门技术 网络安全 源代码 的全部文章
相关搜索:
关注此文读者还看过
热门关注
特别推荐
文章排行
本周
本月
最近更新
关于我们|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2008 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 Powered by 天极内容管理平台CMS4i
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众-网站地图