应用开发及部署 » 常用软件保护技巧
合理设置加密点所谓加密点,就是开发商在软件中调用比特运行库API的位置。 加密点的放置既不能太密集——这样会影响软件的运行效率;也不能太少,以避免破解者轻易地绕过。 一般来说,在软件的关键功能执行之前需要放置一个加密点,而且最好加密点的执行结果能够与后面关键功能的运行状态相关。 举例来说:如果关键功能需要一个运行参数,可以把这个参数放置在一个“只读”类型的特征项里, 而在关键功能执行前通过ReadFeature接口取得这个参数。 有效运用不同的特征类型比特授权云提供了多种不同的授权特征类型,以满足不同的应用场合。 一般来说“只读”和“读写”类型的特征项适合于存储开发商软件运行中的一些整数类型的参数; “算法”类型的特征项用于执行变换(Convert)操作,然后在变换后校验运算结果; “密钥”类型的特征项用于执行对软件中关键数据的加、解密操作。 通常“算法”类型的特征项的安全强度要比其它类型要高,这是因为变换操作是单向的,而且其算法因子不会在软件中出现。 虽然“密钥”因子也不会在软件中出现,但因为它是双向的,既可加密又可解密还原,所以相对来说更容易得到运算之后的结果。 但是,相对于其它类型的特征项来说,“算法”类型的运算结果不容易与软件本身的运行数据进行关联。 开发商需要结合软件本身的特点,合理地在程序的不同位置选择使用不同的算法调用。 有关特征类型的更多描述可以参考 产品特征项 (Feature)。 增加随机性增加随机性是指在软件中调用比特运行库API以及对调用过程中所使用的参数添加随机因素。 随机因素一个是时间,加密点并不一定每次都要调用,可以根据时间来判断是否调用。比如说,某个加密点只在周一调用。 随机调用加密点的好处是黑客很难找到软件内所有的加密点,并有针对性的破解。 此外,调用的参数也可以进行随机。比如说对一个“算法”特征,可以在控制台的“功能测试”页面生成多个输入、输出对, 然后将这些输入、输出数据放在一个数组里,在进行Convert之前随机选择使用哪一组数据。 将API调用与调用结果的判断分开不要在API调用之后马上使用或判断返回结果。软件破解者往往根据API调用点来寻找后面的判断点, 将调用与结果使用分开,可以极大地提高破解及跟踪的复杂性。 在代码中甚至可以尝试把API调用及判断点放在不同的模块或线程里。 合理使用API的返回结果好的软件保护方法是将软件本身与API及其相关数据变成一个整体,这样任何将软件与保护方案进行分离的尝试都会导致软件无法运行。 对于比特运行库的API,可以对软件中的数据用“读写”及“只读”特征项,或者通过“配置项”进行存储, 也可以利用“密钥”特征项来对软件使用的关键数据进行加解密。 |