青青子衿, 悠悠我心, 但为君故, 沉吟至今
« 软件加密狗破解思路和方法百度搜藏的功能缺陷 »

软件加密锁编程技巧

  本文将介绍软件加密锁的一些编程技巧,以及软件开发者将如何编写安全可靠的代码,如何对付各种各样的加密狗破解,编写加密程序时应该尽量避免的一些问题等等。以下是全文。

  一、加密狗加密的基本原理

  开发商程序通过调用硬件加密狗的接口模块对硬件加密狗操作,硬件加密狗响应该操作并通过接口模块将相应数据返回给开发商的应用程序。开发商的应用程序可以对返回值进行判定并采取相应的动作。如果返回无效的响应,表明没有正确的狗,开发商可以将应用程序终止运行,或者让应用程序以错误的方式执行。简要示意如下:

软件加密锁编程

  二、常用的解密方法

  1、反汇编后静态分析: W32Dasm、IDA Pro

  2、用调试工具跟踪动态分析:SoftICE、TRW2000

  3、针对各种语言的反汇编工具:VB、Delphi、Java等

  4、其他监视工具:FileMon、RegMon 等

  三、如何提高加密强度

  下面,我们以Sentinel SuperPro加密锁为例,详细介绍一下使用如何在编程的过程中提高加密强度的方法。

  1、反DEBUG解密的编程方法和技巧

  访问狗之后不要立即做判断,判断狗不正确后,不要立即提示,或者不提示。开发商在程序各个部分插入校验算法的代码,用以增加程序代码的复杂性,防止解密者轻易跟踪发现全部的校验代码。校验代码插入程序的频率越高,破解难度越大,软件就越安全。

  重要的字符串不要在程序中以明文出现,应该使用算法动态生成。

  在不影响程序效率的情况下,尽量多写一些查狗的函数,彼此要有区别,使用不同的算法,多一些查狗出错的标志,让这些标志参与运算,在不同的模块中,使用不同的查狗函数。

  针对某一具体查询校验,都有三步骤组成:查询得到响应串;比较响应串和查询串是否匹配;根据校验结果执行相应的步骤。建议三个步骤要延时执行。最好将三步骤相互远离些,甚至放到不同的子程序或函数中。例如:执行“查询得到响应串”后,相隔50行执行“比较响应串和查询串是否匹配”,假如程序需要调用一个函数。那么就在这个函数里执行“执行相应的步骤”。解密者在跟踪过程中,即使发现了其中一部分程序代码,但很难发现另外两部分代码和全部三部分之间的关联。程序难于被破解。

  将加密锁返回的“响应串”作为程序中的参数使用。例如:算法单元返回“响应串”是“87611123”,而程序中需要使用“123”这个参数。程序中得到“响应串”后,将“响应串”减去“87611000”得到参数。如果解密者修改代码跳过查询校验加密锁部分,参数将是错误值,从而会使程序运行紊乱。

  程序在验证加密算法过程中,一般情况下验证数据不正确程序就会选择退出。这样一来很容易被解密者发现代码特征,跳过查询校验部分。开发商设计查询校验部分时,如果程序校验数据不正确,程序也不退出可以继续执行一些无用的操作使程序紊乱,用以隐蔽代码迷惑解密者。

  开发商的软件可能有多个模块,查狗的模块或接口不要用显而易见的名字来命名,这样会令解密者更容易找到加密点,当然也可以利用一些名字来迷惑解密者,尤其是dll,引出函数时甚至可以不用函数名。

  给查狗函数加入一定的随机性,例如,随机地执行某一API函数,或者在狗的存储区中划定一小块区域作随机读写,读写地址、读写内容、读写长度都是随机取的,这样可以很好地防止那些模拟工具。

  试用版与正式版要分开,试用版不提供的功能,代码已经删掉,使得不可能利用试用版破解得到正式版。

  在大多数情况下,破解是通过更改exe 或 dll 文件实现的,要在程序中检查exe或dll文件的完整性,即利用某种算法计算出整个文件的校验和,在程序中比较,如果文件被更改,校验和就会变化,这类算法网上有很多,可以查得到。另外,exe和dll之间要相互认证,一方面防止dll被替换,另一方面防止非法exe访问dll。

  小结:应该尽量避免的问题

  1)访问狗、做判断、提示用户写在一起

  2)重要的字符串在程序中以明文出现

  3)在狗中存放字符串,程序中读出比较

  4)调用同一函数或判断同一个全局标志查狗

  5)试用版软件同正式版软件是同一份

  6)查狗的模块或接口名字太明显

  7)程序无随机性,每次运行执行路径都一样

  8)没有检查exe 或 dll 文件的完整性,exe 和 dll 之间也没有相互认证

  2、反“监听仿真”软件保护锁的编程方法

  1)随机查询法:开发商使用SuperPro开发工具生成大量查询、响应对,如:1000 对,并在程序中使用这些校验数据。在程序运行过程中,从1000 对查询、响应对之中,随机的抽出其中一对验证SuperPro加密算法。因为,校验数据很多,每次验证加密算法使用的“查询响应对”可能不同,“监听仿真”软件即使纪录了一部分“查询响应对”,但无法纪录全部“查询响应对”。软件每次运行时,都可能使用新的查询响应校验数据,“监听仿真”软件无法响应这些新的查询。因此,“监听仿真”也就失去了模拟、仿真SuperPro软件保护锁的作用。

  2)延时法:开发商可以事先使用开发工具生成大量的校验数据,即:“查询、响应”对,比如:200000 组“查询、响应”对,开发程序过程中,开发商设计定时查询、校验加密锁的机制。在程序运行过程中,每10分钟查询并校验加密锁一次,使用过的校验数据,4年内不再重复使用。即使监听软件24小时记录数据,也需要4年才能纪录完毕。4年后,软件早已过了“热卖期”了,使用监听软件的解密者也就失去了行动意义。

  3)分组、分时法:开发商可以在程序中把查询响应对分组,比如:1200 对校验数据可分为12组,每100对一组。程序在一年中的第一月使用第一组校验数据,第二月使用第二组校验数据,以此类推。监听软件就算记录了第一月的校验数据,第二个三个月以后校验数据没有纪录,在以后的时间段软件仍然无法正常使用,从而“监听仿真”失去意义。

  4)随机噪声数据法:开发商可以在程序中随机产生查询数据,随机数据和真实数据混合在一起,监听软件即使记录了查询数据,也会被其随机性所迷惑,同时也无法仿真另一个次软件运行产生的随机数,加密软件也就无法破解。

  注:本文部分内容来源于彩虹加密锁Sentinel SuperPro的使用说明文档以及相关技术文档整理而成。



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/707.html
  • 文章排行:
  • 2.加密狗
  • 加密狗破解跟加密锁安全其实就是矛盾的2面。双方都在不断更新的。
  • 2008/4/22 9:45:56   支持(11)反对(7) 回复
  • 3.ititgo
  • VB 我觉得不是很好,努力中.
  • 2007/7/28 13:53:22   支持(13)反对(10) 回复
  • 4.加密狗
  • 加密锁现在运用得地方越来越广了,什么都要讲究安全
  • 2008/1/18 9:46:24   支持(13)反对(10) 回复
  • 5.xiaocainiao
  • qingzhu 兄弟,你说的产品RSA公司已经有了解决方案
  • 2007/6/4 15:28:24   支持(9)反对(9) 回复
  • 6.foxgod
  • 我想问,有没有让批处理文件后台运行的命令?谢谢!
  • 2006/12/5 19:43:13   支持(11)反对(12) 回复
  • 7.dogkiller
  • 有一招比上面说的都要有效的多。到网上找一大堆垃圾代码,把所有的代码编译链接到一个程序里面,生成一个300M bytes 以上的可执行程序,可以让绝大多数的Disassembler,debuger直接挂掉,让破解者望而却步。
    以前破解一个程序,36M,IDA反汇编了2天2夜还没完成,OD加载也很占内存,印象深刻啊。也可能我的机器太老了,啃不动这个大家伙。
  • 2007/10/7 11:12:28   支持(12)反对(13) 回复
  • 8.加密锁
  • 如何对付各种各样的加密狗破解,
  • 2008/1/11 15:00:27   支持(5)反对(8) 回复
  • 9.加密狗破解复制网
  • 加密狗破解加密狗复制,专业破解复制加密狗
    请登陆“加密狗破解复制网”
    联系QQ:2018864143
    “加密狗破解复制网”国内知名破解组织多位大师级人物于2002年创建,长期专注于加解密技术的研发和运营,目前

    已拥有26位具有长期经验的技术员及营运员。现今已成为国内专业的加解密研发和运营团队之一。秉承为用户服务的

    理念,我们不断更新,开发出新的破解软件程序,以更快的速度来解决客户之所需,并保证客户的资料完好无损,我

    们的理念就是以更高的效率来更好的服务于客户!并在国内计算机加解密领域享有良好的声誉。

    任何加密狗都可以破解复制,价格优惠,质量稳定,淘宝交易,安全放心。
    专业破解复制加密狗,专业团队加密狗复制破解
  • 2015/5/22 12:40:45   支持(1)反对(4) 回复
  • 10.qingzhu
  • 网络银行在windows下,无安全可言,除非抛弃现在的windows系统,我建议开发个手机,里面有网络银行模块,当然还要有其他的安全措施,手机不丢就可以拉,
  • 2007/4/9 14:15:13   支持(9)反对(13) 回复
  • 11.heritage
  • 现在加密锁的安全技术也在更新,北京蓝宇风公司新推出一款自定义代码的加密锁。
    提供给用户一个安全、高速、独立于pc资源以外的一个安全硬件。用户可自由规化其用途。用户可自定义算法,载入我们提供的智能卡硬件加密平台中运行(不可读取);用户也可以规划成一个数据存储空间以供关键数据存放之用;用户还可以直接调用各种基于硬件的对称、非对称加密算法、片内真随机数生成等函数应用于客户自身的各种加密场合。比如一种用法是:用户可以把开发的应用程序中比较关键的代码用c代码编写、编译、下载到硬件,这样在PC上运行的客户应用程序将不再是一个完整的程序,这点区别于传统校验加密、数据存取等加密方式(外面始终存在一个完整的客户程序,解密思路在于去除、假骗校验点),且对开发人员的加密技巧依赖性降低,轻松实现高强度加密保护。基于该开放硬件加密平台,客户可以开发出很多适合自身软件的加密方式,产品集成我们用多年的加密经验,旨在为客户提供简单、有效、灵活、可靠的加密解决方案。
  • 2011/6/8 10:30:31   支持(10)反对(15) 回复
  • 12.jack
  • 为什么还要用加密锁?大家可以试一试比特安索的电子授权技术。说到将业务逻辑和产品代码分开,电子授权是最好的方案了。
  • 2010/11/18 18:16:31   支持(7)反对(13) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.