软件防破解

 

     为了保证公司的软件能够防止别人破解,最近我在研究软件防破解。应该说学习软件防破解更合适点,呵呵。道高一尺,魔高一丈,没有所谓的绝对安全。因而只有采用多种技术防止软件被破解了。我想到的就是采用加壳防止软件静态分析,采用Hook API完成进程防杀,最后采用反调试技术防止软件被动态分析。

      加壳技术我感觉已经比较成熟,现成的壳很多,有些也相当牛B。但是用别人的壳总是感觉没安全感,如果可以自己写一个壳那么自然就相当安全了,但是听好友的描述,这个似乎不太现实。最终决定就用现成的壳吧。

      Hook API感觉是种思想,不是种技术。实现的方式也很多,我采用的是修改导入表的方式实现的,对于普通的程序当然可以,但是对于牛B的AVer目前还是搞不定。现在就用这种方法讲究着用吧。

      反调试技术我一直都认为很复杂,今天突然看到了篇资料,了解到些软件调试的基本原理。原来软件调试只是Windows为软件提供的一项服务,Windows明确知道当前哪个进程在被调试,在被谁调试。利用API调用IsDebuggerPresent可以判断当前进程是否在被调试。因而问题变得异常简单,只要在消息泵中检测进程是否在被调试,如果在被调试则直接退出就可以了, 示例代码如下:

#if !defined DEBUG && !defined _DEBUG
 virtual BOOL PumpMessage()
 {
  // TODO: 在此添加专用代码和/或调用基类
  if(IsDebuggerPresent())
  {
   return FALSE;
  }

  return CWinApp::PumpMessage();
 }
#endif

      只需要把这段代码添加到APP类的申明中就可以了,对于程序的发行版本就可以自动反调试。当然,道高一尺,魔高一丈,对于高手肯定有相关的应对策略,呵呵。

      我感觉研究软件安全还是很有前景的,可惜我现在没时间研究这个,对汇编的慧根也不够。希望公司能招到个牛人,在软件安全方面不要让别人钻了空子。

你可能感兴趣的:(软件防破解)