您当前的位置:   首页 > 新闻中心
提升软件安全性,软件加密的终极攻略(一)
发布时间:2019-07-11 10:42:14   阅读次数:

此文章为揽阁信息JACK撰写,未经授权,禁止一切复制和转发行为!


提升软件安全性,软件加密的终极攻略(图1)

在上一篇文章《Sentinel LDK究竟安全吗?看“爱好者”的破解之路!》中,我对客户提出的一些问题进行了总结,并提供了一个案例。今天将多年从业的一些技术干货分享给大家。


提升软件安全性,软件加密的终极攻略(图2)

经过几十年的发展,在软件开发过程中,加密保护已经成为一个必须且必要的环节。软件开发商需要清楚的理解一个问题,我们的软件究竟需要保护什么?


软件的版权数量

对于非SaaS类软件来说,软件开发商通过销售软件的拷贝来获取利润,因此软件版权数量的可控性是一个非常重要议题。确保市面上不出现盗版软件,是保障软件开发商核心利益的重点。


软件的核心算法

软件开发商在自己开发的软件中内置了很多核心算法,这些算法体现了软件价值度,是软件售价定位的重要依据。将核心算法进行安全有效的保护,即可确保长期利益,也可免去软件开发商的顾虑。


在软件加密时,我们不能闭门造车,要知子之矛,才能造己之盾。下面我们来了解一下对软件攻击的基本类型。

提升软件安全性,软件加密的终极攻略(图3)

对于采用的加密锁或加密狗加密保护的软件来说,破解“爱好者”们可以攻击的点,正式软件开发商发布到市场上的东西,这里面包括了:

  • 软件开发商发布到市场上的软件程序

  • 软件和加密锁/加密狗进行数据交互的驱动程序

  • 硬件/软件加密产品。(硬锁或软锁)


对软件程序的破解

“爱好者”们对软件程序进行逆向,直接将程序内的加密点全部排除后,重新编译软件。在这一点上,对框架解释型的软件(.net和Java)进行逆向是非常轻而易举的。而C语言开发的程序,逆向后通过对汇编语言进行跟踪,在所有报错指令上方加入goto,即完成了破解。


对驱动层的破解

通过对驱动层进行破解,监听驱动层内软件和加密锁之间的每一次对话,将交互数据做成彩虹表(Rainbow Table)。当全部交互数据都被监听后,就可以利用Rainbow Table制作一个模拟锁,将软件的请求转到Rainbow Table中进行匹配并返回。可参考二十年前带CD Key的游戏破解方式,将游戏套件中的CD Key光盘制作成虚拟光盘,通过虚拟光驱加载。


对加密锁/加密狗的破解

“爱好者”们通过读取加密锁/加密狗内的信息,并将信息自行写入一只空白的同型号产品中,即完成了加密锁/加密狗的复制工作。


软件安全的一个重要问题!你是否每天都在编写安全代码?

提升软件安全性,软件加密的终极攻略(图4)

对保护不善的应用程序,只需要执行数个快速更改就可以使它在不附加加密锁的情况下运行,例如:“爱好者”们可能会使用“代码补丁”或“ 伪造应用程序组件”。


在这种情况下,软件开发商需要组织专业的人员与团队,不停的研究黑客破解技术以及行业最新动态,从而不断的对软件进行安全升级。这种成本无疑是高昂的。

这也是为什么众多软件开发商会选择揽阁信息。通过我们所提供的专业性产品,以及依据软件开发商实际产品情况而定制的解决方案,软件开发商可以轻松的面对现在的问题和未来可能出现的问题。


现在让我们进入正题,谈谈如何保护你的软件产品。

首先选择一款可以放心使用的加密锁产品!

提升软件安全性,软件加密的终极攻略(图5)

这里插入一个基础性的信息安全知识。如上图所示,当一个明文数据通过加密算法,用指定的密钥进行加密后,可以得到密文。通常情况下加密算法有“对称算法”、“非对称算法”、“哈希运算”等,此处我们不对算法本身展开说明。

被加密的数据或软件程序,如果没有加密时的密钥,是无法进行逆向的。因此密钥的安全是加密安全的核心!


以Sentinel LDK加密锁为例

  • 密钥被封装在硬件内,任何人(包括软件开发商)无法获知密钥的实际Value。

  • 只有软件开发商可以通过SDK创建密钥并将密钥写入硬件。

  • 软件只能使用密钥。

  • 加密锁采用专有芯片,硬件的制作、序列号的烧制都有一系列的安全机制进行管控。

提升软件安全性,软件加密的终极攻略(图6)

这样的机制,确保加密锁本身很难被破解,加密锁被复制的可能性也就不存在了。


提升软件安全性,软件加密的终极攻略(图7)

在驱动层上,软件每次与加密锁之间的会话和数据传递,都通过白盒安全通道的技术方式进行保护,以防止驱动层被破解监听。


技巧一:使用API+外壳的方式,对程序进行保护

提升软件安全性,软件加密的终极攻略(图8)

将您基于API 元素的自定义保护与外壳保护结合起来。增加额外的保护层。即使攻击者成功地删除了外壳,应用程序内部依然是受到保护的-因为这两种保护方式都是独立运行的。


提升软件安全性,软件加密的终极攻略(图9)

在对加密锁的任何一次访问过程中,通常都会涉及到以上的二叉树判断,这里包含2个重要的关注点:正确与错误的判断、判断接点数量。


如果每次程序运行到加密点都进行正确或错误的判断,那么“爱好者”们也很容易跟踪到这个加密点。

如果加密点的数量非常少,那么将全部加密点找到,也变得很简单。


技巧二:频繁查询

提升软件安全性,软件加密的终极攻略(图10)

我们在程序中可以多加入一些加密点,使查询变得频繁,以增加破解难度。


技巧三:将增加查询点的复杂度

提升软件安全性,软件加密的终极攻略(图11)

查询内容单一,容易被跟踪、被识别。

查询内容复杂,就耗费时间进行分析判断,破解难度增加。

这里我们可以通过建立明密文表(查询响应机制)的形式来增加复杂度。让每一个加密点每次发送请求和返回结果都不一样。

提升软件安全性,软件加密的终极攻略(一)(图12)

例如:创建一个1000行的随机字符串表,并且将这个表内数据用加密锁内的密钥进行加密,得到密文表。每次查询时,可以用循环或随机数的形式,将明文表内的单行数据进行加密,密文值到密文表内进行比对。


其他技巧,放在后续的文章中介绍。请您关注揽阁信息官网!


连载文章列表:

如需购买相关加密锁/加密狗产品,或希望获取更多信息安全解决方案,请随时与我们揽阁信息联系。




揽阁信息可提供的部分安全产品和解决方案信息

联系揽阁信息,您可以获取到更多满足全球合规性要求的信息安全产品资料,以及相关的整体解决方案的相关资料。如:


您还可以得到揽阁信息所提供的优质服务。

揽阁信息 · 值得您信赖的信息安全顾问!


相关阅读

购买咨询电话
021-54410609