欢迎光临
我们一直在努力

软件加密锁编程技巧

本文将介绍软件加密锁的一些编程技术,软件开发人员如何编写安全可靠的代码,如何处理各种加密狗漏洞,以及编写加密程序时应避免的一些问题。以下是全文。
一,加密狗加密的基本原理
开发人员程序通过调用硬件加密狗的接口模块来操作加密狗,硬件加密狗响应操作并通过接口模块将相应的数据返回给开发人员的应用程序。开发人员的应用程序可以确定返回值并采取适当的操作。如果返回无效响应,表明没有正确的狗,开发人员可以终止应用程序或导致应用程序以错误的方式执行。简要说明如下:
二,常用的解密方法
1.拆卸后的静态分析:W32Dasm,IDA Pro
2.使用调试工具跟踪动态分析:SoftICE,TRW2000
3.各种语言的反汇编工具:VB,Delphi,Java等。
4,其他监控工具:FileMon,RegMon等
三,如何提高加密强度
下面,我们以Sentinel SuperPro加密锁为例,详细说明如何在编程过程中提高加密强度。
1,反DEBUG解密编程方法和技巧
在进入狗后不要立即做出判断。判断狗是不正确的,不要提示或提示。开发人员在程序的每个部分中插入检查算法的代码,以增加程序代码的复杂性,并防止解密器轻松跟踪所有检查代码。检查代码插入程序的频率越高,破解越困难,软件越安全。
重要的字符串不应该以纯文本形式出现在程序中,而应该使用算法动态生成。
在不影响程序效率的情况下,尝试编写一些函数来检查狗,彼此不同,使用不同的算法,以及更多的标志来检查狗的错误,让这些标志参与操作,使用不同在不同的模块中。检查狗的功能。
对于特定的查询检查,有三个步骤:查询获取响应字符串;将响应字符串与查询字符串进行比较;并根据检查结果执行相应的步骤。建议延迟这三个步骤。最好将三个步骤彼此远离,甚至分成不同的子程序或功能。例如,执行“查询获取响应字符串”后,如果程序需要调用函数,则执行“比较响应字符串和查询字符串匹配”50行。然后在此功能中执行“执行相应的步骤”。在跟踪过程中,即使找到了程序代码的一部分,也很难找到代码的其他两部分和所有三部分之间的关联。该计划很难破解。
加密狗返回的“响应字符串”用作程序中的参数。例如,算法单元返回“响应字符串”为“87611123”,程序中需要参数“123”。在程序中获得“响应字符串”后,从“87611000”中减去“响应字符串”以获取参数。如果解密器修改代码以跳过查询检查加密锁定部分,则参数将是错误值,这将使程序无序运行。
在验证加密算法的过程中,程序通常会在验证数据不正确时选择退出。这使得解密器很容易发现代码特征并跳过查询验证部分。当开发者设计查询验证部分时,如果程序验证数据不正确,程序不会退出并且可以继续执行一些无用的操作以使程序混淆,隐藏代码以使解密器混淆。
开发人员的软件可能有多个模块。不要用明显的名字命名狗的模块或界面。这将使解密器更容易找到加密点。当然,有些名称可以用来混淆解密器,特别是dll。导出函数时甚至可以使用函数名称。
为dog函数添加一定的随机性,例如,随机执行一个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加密算法。因为验证数据非常大,所以验证加密算法使用的“查询响应对”每次可能不同。即使记录了“查询响应对”的一部分,“监视器模拟”软件也不能记录所有“查询响应对”。每次运行软件时,都可以使用新查询响应验证数据,“Monitor Simulation”软件无法响应这些新查询。因此,“监控模拟”也失去了模拟和仿真SuperPro软件保护锁的作用。
2)延迟方法:开发人员可以使用开发工具预先生成大量的验证数据,即:“查询,响应”对,例如:200000组“查询,响应”对,在开发过程中,开发人员设计时序查询。验证加密锁的机制。在程序运行期间,每10分钟查询并验证加密锁,并且使用的验证数据不会在4年内重复使用。即使监控软件记录24小时的数据,也需要4年才能完成录制。四年后,该软件已经过了“热销期”,使用监控软件的解密器已失去其操作意义。 3)分组和分时方法:开发人员可以在程序中对查询响应对进行分组。例如,1200对验证数据可以分成12组,每100对一组。该程序使用一年中第一个月的第一组校验和数据,第二个月使用第二组校验和数据,依此类推。即使监控软件记录了第一个月的验证数据,验证数据也不会在后三个月后记录,并且软件在后期仍然无法正常使用,因此“监听模拟”失去了意义。 4)随机噪声数据方法:开发人员可以在程序中随机生成查询数据。随机数据与实际数据混合。即使记录了查询数据,软件也会因其随机性而混淆,无法模拟另一个。软件运行生成的随机数,加密软件无法破解。注意:本文的部分内容基于使用Rainbow Encryption Lock Sentinel SuperPro文档和相关技术文档。

未经允许不得转载:美国主机评论博客 » 软件加密锁编程技巧

分享到:更多 ()