程序拒绝非法访问

 在程序设计中,我们通常都只关心程序的结果是不是可靠,健不健壮,容错性如何,但却很少关注程序的访问是不是合法。尤其我们在C++中,本身这种语言设置的访问 机制 都不是针对程序级别的,他们的出现只是帮助人们在编程时尽量少犯错误,免去人们因操作不当而引起某些本身不该接触的数据,结果却被意外的修改了,在编译时期,编译器遇到此类情况时,会给出用户错误警告。但是,对于程序的非法访问,却仍只字未提。
    为了实现对类的函数访问权限的限制,我们将引入内嵌于每个将要收保护的类的一个基础类,这个类将记录那些类将会顺利通过访问,哪些地址段的程序访问将得不到结果。
//VisitProctect.CPP
//Write by:Guangbao Xie
//Email:redand_007black@163.com
//Welcome to contact with me .
//Time:2009-06-19
//CopyRight@Reserved
   #include<iostream.h>
   #include<conio.h>
   typedef unsigned long DWROD ;
   typedef bool BOOL;
   class CVisitToken
{
DWORD dwAddr;
public:
CVisitToken(DWORD dw):dwAddr(dw){}
    BOOL operator==(const CVisitToken &ctk)
{
  return (ctk.dwAddr==dwAddr);
}
void broadcast(DWORD dw)
{
  dwAddr=dw;
}
};
class NEW
{
private:
  CVisitToken vkToken;
  BOOL Verify(const CVisitToken&ctk)
  {
   return ((vkToken)==ctk);
  }
public:
NEW():vkToken((DWORD)this)
{
  
}
    ~NEW()
{
}
   void Service(const CVisitToken &ctk)
   {
if(!Verify(ctk))
{
   cout<<"就你还想骚扰我,门都没有!"<<endl;
   return;
}
cout<<"Servicing..."<<endl;
   }
   void Interface()
   {
Service(vkToken);
   }
};
int main(int argc, char* argv[])
{
    CVisitToken ctk(0x23456677);
    NEW n;
    n.Interface();
    n.Service(ctk);
    getch();
    return 0;
}
大家可以利用这个原理把CVisitToken里面的私有数据改为一种密钥机制,这样别人即使知道原函数与地址,但是一样不可访问。不过,对于汇编语言就不是这样啦。所以,有时,为防止人们容易用汇编语言破解,通常靠牺牲一些效率,在程序中渗透许多函数调用,且对函数出现位置不要有规律。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值