有TPM技术: 维基百科上的tpm
它允许您将二进制文件的加密校验和存储在特殊芯片上,这可以作为单向验证。
注意 :TPM有点糟糕,因为它可以用于DRM。但对于该领域的专家来说,这有点不公平,甚至还有一个 开放式TPM 允许Linux用户准确控制其TPM芯片的使用方式。
我相信这些东西通常比它们的价值更麻烦。
您花了很多精力编写代码来保护二进制文件。坏人花费更少的精力来破解它(他们通常比你更有经验)然后释放破解所以每个人都可以绕过你的保护。你唯一会烦恼的是那些因你的保护而不方便的诚实的人。
只是将盗版视为业务成本 - 如果您确保仅为付费客户提供所有支持,则盗版软件的增量成本为零。
解决这个问题的最有效方法之一是 可信计算 。基本上你会加密应用程序并将解密密钥传输到一个特殊的芯片( 可信平台模块 ),芯片只有在确认计算机处于“可信”状态后才会解密应用程序:没有内存查看器/编辑器,没有调试器等。基本上,您需要特殊的硬件才能查看解密的程序码。
因此,您希望编写一个在开头接受密钥并将其存储在内存中的程序,然后从光盘中检索它。如果它是正确的密钥,则该软件可以正常工作。如果它是错误的密钥,软件崩溃。目标是盗版者很难生成工作密钥,并且很难修补程序以使用未经许可的密钥。
实际上,这可以在没有特殊硬件的情考虑我们的遗传密码。它基于这个宇宙的物理学。我们试图破解它,制造药物等等,我们失败了,通常造成大量不良副作用,因为我们还没有完全逆向设计复杂的“世界”,其中遗传“代码”演变为运作。基本上,如果你在所有人都可以访问的公共处理器(一个普通的“世界”)上运行所有东西,那么编写这样一个安全代码几乎是不可能的,正如当前软件很容易被破解所证明的那样。
为了实现软件的安全性,您基本上必须编写自己的足够复杂的平台,其他人必须完全彻底地进行逆向工程,以便修改代码的行为而不会产生不可预测的副作用。然而,一旦你的平台被逆向设计,你就会回到原点。
问题是,您的平台可能会在通用硬件上运行,这使您的平台更容易进行逆向工程,这反过来又使您的代码更容易进行逆向工程。当然,这可能仅仅意味着提升了一点,因为您的平台所需的复杂程度很难进行逆向工程。
一个足够复杂的软件平台会是什么样子?例如,可能在每6次加法运算之后,第7次加法返回结果乘以PI除以自系统初始化以来执行的减法和乘法运算总数之差的模数5的对数的平方根。平台必须独立地跟踪这些数字,代码本身也是如此,以便解码正确的结果。因此,您的代码将基于您设计的平台的复杂底层行为的知识编写。是的,它会占用处理器周期,但是有人必须对这种小的惊喜行为进行逆向工程,并将其重新设计成任何新代码以使其正常运行。此外,你自己的代码一旦编写就很难改变,因为它会崩溃成不可简化的复杂性,每一行都依赖于先前发生的一切。当然,在足够安全的平台上会有更多的复杂性,但重点是有人会在他们可以对您的代码进行逆向工程和修改之前对您的平台进行逆向工程,而不会造成副作用。
关于复制保护和保护的伟大文章 将海盗留在海湾: 实施Spyro的裂缝保护:龙年
在那里提到的最有趣的想法是尚未提到的级联故障 - 你有校验和修改单个字节导致另一个校验和失败。最终其中一个校验和导致系统崩溃或做一些奇怪的事情。这使得盗版程序的尝试看起来不稳定,并且导致原因从崩溃中走了很长一段路。
你正在进入“反转技术”。这基本上是一门艺术。更糟糕的是,即使你踩到新手,也有olly和IDA Pro的“反反转插件”,他们可以下载并绕过你的大部分对策。
对策包括通过陷阱调试器API检测调试器,或检测“单步执行”。您可以插入在检测到调试器中断后继续运行的代码,但在程序中稍后开始随机执行。这真的是一场猫捉老鼠的游戏,而破解者则占据了重要的优势。
查看... http://www.openrce.org/reference_library/anti_reversing - 那里有一些东西。
http://www.amazon.com/Reversing-Secrets-Engineering-Eldad-Eilam/dp/0764574817/ - 这本书有一个非常好的反转信息和步骤通过技术。一般来说,如果你正在进行逆转,那么一个好的开始。