因此,他们的市场正在保护您的应用免受逆向工程师的窥探。我自己,我觉得那个页面有点太蓬松了,细节也有点太少了。我当然不会仅仅根据该页面上的描述购买他们的产品。
根据描述,看起来他们为每个应用程序生成了一些自定义汇编语言,然后你在他们的汇编翻译器(又名虚拟机)中运行 bizzaro 代码,它在运行时生成实际的汇编代码。我对么?我明白为什么这使得代码难以逆向工程。
现在回答你的问题。由于他们控制您的代码运行的工具,因此他们可以轻松地在启动时添加一个检查,上面写着“他们提供的序列号是否匹配 [我期望的序列号]?如果不匹配,请中止”。那么,对于“有没有新奇的方法可以让代码在没有序列号的情况下无法运行”这个问题的简单答案?是的,但更好的问题是“如何防止逆向工程师找出它期望的序列号?”。
首先,我想知道“序列号”是什么意思。在最严格的意义上,这意味着“取之前发布的号码,并在其上加一”。这不应该太难欺骗。另外,他们如何获得[我期望的序列号]部分进行比较?他们的产品是否需要互联网接入才能获得正确的序列号?当然他们可以做一个 SSL 连接来保护它免受数据包嗅探,但是由于它在我的硬件上运行,我可以做一个内存转储并直接提取 [我期望的序列号] 吗?
也许它们不是“序列号”,而是系统硬件的某种指纹。将 MAC 地址、主板序列号、处理器型号、今天的日期(如果代码仅适用于一天)等哈希在一起是安全行业的常见技巧。那样我不在乎如果您从我的源代码中提取我期望的散列,那么祝你好运虚拟化产生匹配散列的硬件。像这样的把戏与他们“锁定到硬件”的说法是一致的,但不能真正称为“序列号”。
即使他们确实有一些超级花哨的指纹检查器,他们的线束是常规组装的,作为逆向工程师,我可以放一个goto绕过检查吗?
所以更长的答案是:可能有一些方法可以让一个应用程序在没有正确的序列号/密钥/指纹的情况下拒绝运行,但你的直觉可能是正确的,它可以通过足够的努力被破解。此外,他们的描述页面肯定没有提供足够的细节来激发信心。但是*heh*,他们在混淆游戏中,我还能期待什么?无论他们做了什么,都足以让赛门铁克的员工忙上几个月,同时赚取一些现金。