合理设置加密点

所谓加密点,就是开发商在软件中调用比特运行库API的位置。加密点的放置既不能太密集——这样会影响软件的运行效率;也不能太少,以避免破解者轻易地绕过。一般来说,在软件的关键功能执行之前需要放置一个加密点,而且最好加密点的执行结果能够与后面关键功能的运行状态相关。举例来说:如果关键功能需要一个运行参数,可以把这个参数放置在一个“只读”类型的特征项里,而在关键功能执行前通过ReadFeature接口取得这个参数。

有效运用不同的特征类型

比特授权云提供了多种不同的授权特征类型,以满足不同的应用场合。

一般来说“只读”和“读写”类型的特征项适合于存储开发商软件运行中的一些整数类型的参数;“算法”类型的特征项用于执行变换(Convert)操作,然后在变换后校验运算结果;“密钥”类型的特征项用于执行对软件中关键数据的加、解密操作。

通常“算法”类型的特征项的安全强度要比其它类型要高,这是因为变换操作是单向的,而且其算法因子不会在软件中出现。虽然“密钥”因子也不会在软件中出现,但因为它是双向的,既可加密又可解密还原,所以相对来说更容易得到运算之后的结果。但是,相对于其它类型的特征项来说,“算法”类型的运算结果不容易与软件本身的运行数据进行关联。开发商需要结合软件本身的特点,合理地在程序的不同位置选择使用不同的算法调用。

有关特征类型的更多描述可以参考 产品特征项 (Feature)

增加随机性

增加随机性是指在软件中调用比特运行库API以及对调用过程中所使用的参数添加随机因素。随机因素一个是时间,加密点并不一定每次都要调用,可以根据时间来判断是否调用。比如说,某个加密点只在周一调用。随机调用加密点的好处是黑客很难找到软件内所有的加密点,并有针对性的破解。

此外,调用的参数也可以进行随机。比如说对一个“算法”特征,可以在控制台的“功能测试”页面生成多个输入、输出对,然后将这些输入、输出数据放在一个数组里,在进行Convert之前随机选择使用哪一组数据。

将API调用与调用结果的判断分开

不要在API调用之后马上使用或判断返回结果。软件破解者往往根据API调用点来寻找后面的判断点,将调用与结果使用分开,可以极大地提高破解及跟踪的复杂性。在代码中甚至可以尝试把API调用及判断点放在不同的模块或线程里。

合理使用API的返回结果

好的软件保护方法是将软件本身与API及其相关数据变成一个整体,这样任何将软件与保护方案进行分离的尝试都会导致软件无法运行。对于比特运行库的API,可以对软件中的数据用“读写”及“只读”特征项,或者通过“配置项”进行存储,也可以利用“密钥”特征项来对软件使用的关键数据进行加解密。