博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高强度的加密软件怎么制作
阅读量:4677 次
发布时间:2019-06-09

本文共 2985 字,大约阅读时间需要 9 分钟。

本文来自:

提示与技巧

攻击应用程序由于大多数软件开发商不是每天都在编写安全代码,应用程序经常成为最容易受到攻击的目标。对保护不善的应用程序,只需要执行数个快速更改就可以使它在不附加圣天狗的情况下运行,例如:黑客可能会使用代码补丁或伪造应用程序组件。下面提供的很多技巧可以使这种攻击变得极难成功。

(一)使用外壳加密您的可执行文件

将您基于API 元素的自定义保护与外壳保护结合起来,增加额外的保护层。外壳加密您的最终可执行文件,使通过拆解或调试方法对您的应用程序实施的攻击难以实现。即使攻击者成功地删除了外壳,应用程序内部依然是受到保护的-因为这两种保护方式都是独立运行的。

(二)执行查询-响应保护

查询-响应保护是一种由设定在圣天狗中的AES 算法驱动的,询问-响应式的技术。应用程序向圣天狗发送查询请求,圣天狗则发送使用AES算法计算出的响应,进行评估。如果获得的响应与预期的响应相匹配,则认为存在圣天狗,允许应用程序运行。利用编程到圣天狗中的AES 特征项,您可以通过调用SFNTQueryFeature 函数发送几乎无限数量的查询请求,这种机制是您保护策略的中心,因为它使复制正确的响应变得极难。

但是,仅在应用程序中使用一次API 是不够的;还应该尽量使用以下很多技巧。

(三)创建大的查询/ 响应表

如果应用程序仅向圣天狗发布少量的查询,它们会很容易被预测到。而使用大的查询/ 响应表需要较长的时间才能使用到每种可能性;从而可以增加模拟每种可能的查询所需要的时间。

(四)分割大表

必须将大表分割为数个小表。这样可以将表置于应用程序中的多个位置,使它们很难被全部找到。

(五)频繁查询

如果仅依靠代码开始位置的一次调用,很容易使技术高超的黑客分离该调用,破解保护。仅查询一次另外的一个潜在问题是用户可以在启动程序后移除圣天狗。然后该狗可以被用于运行应用程序的其它副复本。

(六)随机查询

必须精心设计保护策略,使应用程序可以从查询/ 响应表中随机抽取询问。这可以使得询问内容很难预料。如果应用程序每次都使用不同的询问,那么破解者将很难去对每一次运行进行侦听和模拟。

(七)向您的查询检查添加噪音

生成随机查询,然后摒弃结果。这会在有用数据中生成大量未使用的数据。试图记录程序与硬件狗之间的通讯的需要记录大量的数据,而且很难破解哪些是有用的数据。

(八)频繁地生成新表每次为应用程序创建升级程序时,重新生成查询/ 响应表。如果攻击者能够记录加密程序使用的所有询问,升级会突然使他必需重复这项工作。如果已经使用上述技巧,这项工作将变得非常费时,非法用户就只能使用过期软件了。

(九)使用AES 算法加密数据

使用圣天狗中的AES 算法加密16 字节的数据。它可以提供无法突破的安全屏障,因为嵌入在圣天狗中的AES 算法及其使用的128 位随机生成的密钥是任何调试或存储区转载程序都无法使用的。您需要:

■ 调用SFNTEncrypt API 函数发送明码数据,硬件狗在内部进行加密,并将结果返回。

■ 调用SFNTDecrypt API 函数获取解密后的数据。如果解密后的数据与明码数据相匹配,则认为存在正确的圣天狗。跳过圣天狗复制这些结果是不可能的,因为所有操作都在硬件中执行。

SFNTEncrypt 和SFNTDecrypt 操作

(十)加密查询/ 响应表

加密查询/ 响应表,使攻击者无法通过查看代码寻找和使用该表。如果只在使用的时候解密表数据,那么攻击者永远都无法看到完整的解密表。

(十一)加密应用程序使用的关键数据

所有的应用程序在某些点都需要数据才能运行。加密重要的数据文件或程序所使用的常量,使它只有在插入正确的圣天狗时才能解密运行。

(十二)使用ECC 签名与验证验证数据的完整性

ECC 是一种基于离散对数的公钥算法(使用公钥和私钥对),和其它算法相比,在使用相同的密钥长度时,更难以破译。可以在应用程序中使用ECC 算法按照以下步骤执行安全检查:

1. 生成随机信息。

2. 调用SFNTSign API 函数,使用保存于圣天狗的私钥对该信息进行签名。

3. 调用SFNTVerify API 函数,使用已知的对应的公钥验证签名。如果该函数返回成功信息,则认为存在正确的圣天狗。

 
SFNTVerify 操作

(十三)分散您的安全检查

在整个代码中分散安全检查是一种很好的做法。这样,如果要使应用程序在没有硬件狗的情况下运行,就需要对代码的每一个位置都进行修改。将安全检查局限于少数位置会使它们很容易被发现和删除。以下给出了更多技巧:

(十四)使用分散函数代替集中的封装函数

创建检查硬件狗的单一功能调用,然后在整个代码中执行该功能调用将无法实现安全检查的分散性。可以使用分散的封装函数替代单一的封装函数,提高程序的安全性。

(十五)将安全检查置于难以跟踪的操作中

例如,如果您将检查分散于一系列的数据库操作中,要想追踪到调用动作将耗费大量的时间。

(十六)分散安全检查

安全检查通常由多个步骤组成:调用硬件狗、评估返回值和对评估结果做出反应。您不应将整个策略都放置在您代码中的一个位置上,而是应当四处分散安全检查,模糊它们之间的关系。如果安全检查的代码组件实体分散于应用程序的各个不同部分,而不是集中在一起,那么它的安全保护策略将更难被攻破。

(十七)使用多线程增强您的保护

如果单项安全检查在多线程上进行,那么对其运行的跟踪将会非常复杂。这会使代码调试跟踪变得极为困难。

(十八)使用返回值作为变量

在高级语言中隐藏安全检查的一种有效方法是使用返回值控制应用程序的流程。使用这种方法,硬件狗返回的值将变成应用程序下一执行步骤或子程序的逻辑指针或选择密钥。这会使攻击者更难分析您的代码。使用返回值的另一种方法是将它加到变量值中,这样它们的和就是需要的变量值。如果该变量在代码的其他部分使用,那么该代码依靠调用硬件狗才能运行。

例如,假设在您应用程序的某一点,您需要一个变量来包含浮点值12345。假设您发送到硬件狗的一个查询字符串返回的十进制数字为2345,那么:

■ 设置浮点变量为10000。

■ 发送该查询。

■ 将响应增加到该变量。

 注意: 使用浮点值进行比较

 您可以向API 返回值增加浮点值(如1.5),而不是仅使用SP_SUCCESS 十进制值与API 返回值进行比较。这可以更好的防御汇编代码的逆向工程攻击。

如果插入了正确的狗,变量将包含正确的值。在实际操作中,如果正确值背后的数字运算比简单的加法更为复杂,这种技术是非常有用的。

(十九)校验您的代码

您应采用对您的关键数据进行检验和校验的作法。您还应该校验应用程序本身和任何DLL 文件或它使用的共享库的合法性。

(二十)更改您的策略

最后,当您升级您的应用程序时,请尽量多投入时间修改和增强您的安全保护机制。您原有安全保护机制存在的时间越长,该机制受到攻击的次数就越多。最终,即使是最强大的保护机制都可能被突破。但是,如果您不断地升级您的保护机制,就可以领先一步。请把此措施当作您维护计划的一部分,使您的安全水平保持在顶峰水平。

转载于:https://www.cnblogs.com/kttec/archive/2011/11/23/2259953.html

你可能感兴趣的文章
熟悉常用的HDFS操作
查看>>
Linux自动化运维第十八课
查看>>
web 10
查看>>
jquery--动态篇
查看>>
npm 是干什么的
查看>>
Android开发之蓝牙(Bluetooth)操作(一)--扫描已经配对的蓝牙设备
查看>>
查找路径php.ini文件到底在哪里?
查看>>
传统认知PK网络认知 刚子扯谈烤串认知
查看>>
字节数组java加密与解密
查看>>
矩形运算
查看>>
php 备份mysql数据库(joomla数据库可直接使用,其他数据库稍作修改即可)
查看>>
使用HttpSessionListener接口监听Session的创建和失效
查看>>
Windows Phone XNAでアニメーション - ぐるぐる
查看>>
20181029 T2 寻宝游戏
查看>>
C++变量作用域、生存期、存储类别
查看>>
数据结构期末复习(四)
查看>>
最最简单的菜单代码
查看>>
js 俩组数据根据id合并
查看>>
POJ2987 Firing 最大权闭合图
查看>>
ItelliJ IDEA下载及获取注册码详解
查看>>