代码保护者声称它“确保没有序列号就无法运行代码”这是一个骗局吗?

信息安全 逆向工程 混淆 产品密钥
2021-08-26 17:32:19

VMProtect Software(可在http://vmpsoft.com/找到)声称它:

"允许生成和验证序列号。支持手动和自动生成。序列号可以受时间或日期限制并锁定到硬件,同时也可以限制免费升级期限。VMProtect 确保物理上不可能运行没有序列号的代码。”

我认为“不可能”这个词显然是不正确的,因为我认为任何序列号保护机制都可以通过花足够的时间进行逆向工程来破解。

但是,我在网上搜索过,VMProtect 被用作打包程序,通过虚拟化保护来混淆恶意软件,如此处所述https://www.f-secure.com/v-descs/vmprotect.shtml所以它似乎确实实现了“保护代码”正如它声称的那样,通过在虚拟机上执行它我了解虚拟化混淆软件的想法,并且不寻求对此的回应(我只是用它作为 VMProtector 声称要做的一件事的一个例子,它确实做到了)。

这是虚假广告,还是有新奇的方法让代码在没有序列号的情况下无法运行?

1个回答

因此,他们的市场正在保护您的应用免受逆向工程师的窥探。我自己,我觉得那个页面有点太蓬松了,细节也有点太少了。我当然不会仅仅根据该页面上的描述购买他们的产品。

根据描述,看起来他们为每个应用程序生成了一些自定义汇编语言,然后你在他们的汇编翻译器(又名虚拟机)中运行 bizzaro 代码,它在运行时生成实际的汇编代码。我对么?我明白为什么这使得代码难以逆向工程。

现在回答你的问题。由于他们控制您的代码运行的工具,因此他们可以轻松地在启动时添加一个检查,上面写着“他们提供的序列号是否匹配 [我期望的序列号]?如果不匹配,请中止”。那么,对于“有没有新奇的方法可以让代码在没有序列号的情况下无法运行”这个问题的简单答案?是的,但更好的问题“如何防止逆向工程师找出它期望的序列号?”。

首先,我想知道“序列号”是什么意思。在最严格的意义上,这意味着“取之前发布的号码,并在其上加一”。这不应该太难欺骗。另外,他们如何获得[我期望的序列号]部分进行比较?他们的产品是否需要互联网接入才能获得正确的序列号?当然他们可以做一个 SSL 连接来保护它免受数据包嗅探,但是由于它在我的硬件上运行,我可以做一个内存转储并直接提取 [我期望的序列号] 吗?

也许它们不是“序列号”,而是系统硬件的某种指纹。将 MAC 地址、主板序列号、处理器型号、今天的日期(如果代码仅适用于一天)等哈希在一起是安全行业的常见技巧。那样我不在乎如果您从我的源代码中提取我期望的散列,那么祝你好运虚拟化产生匹配散列的硬件。像这样的把戏与他们“锁定到硬件”的说法是一致的,但不能真正称为“序列号”。

即使他们确实有一些超级花哨的指纹检查器,他们的线束是常规组装的,作为逆向工程师,我可以放一个goto绕过检查吗?

所以更长的答案是:可能有一些方法可以让一个应用程序在没有正确的序列号/密钥/指纹的情况下拒绝运行,但你的直觉可能是正确的,它可以通过足够的努力被破解。此外,他们的描述页面肯定没有提供足够的细节来激发信心。但是*heh*,他们在混淆游戏中,我还能期待什么?无论他们做了什么,都足以让赛门铁克的员工忙上几个月,同时赚取一些现金。