我有一堆序列号及其相应的激活密钥用于某些旧软件。由于最初安装它们我丢失了许多激活密钥(但仍然有序列号)。我仍然拥有大约20个键的数据集,甚至可以看到它我可以告诉它有一种确定激活键的疯狂方法。鉴于我的大数据集有一种方法可以反过来解决我丢失的信息的激活密钥。
序列号示例#:14051激活密钥:E9E9F-9993432-45543
答案 0 :(得分:1)
您要做的是提供一个将序列号映射到激活密钥的功能。在不了解函数性质的情况下,这可能是非常容易的(只有几个术语的多项式)到非常难的(涉及大量块XOR的多层函数,替换表,复杂的键表,... )。
如果您可以访问密钥验证程序例程(例如,通过反汇编 - 几乎总是对照商业软件的EULA),那么您有一个例程,它返回给定的激活密钥对于给定的序列号是正确的。如果这是通过计算序列号的激活密钥来完成的,那么您就完成了。如果这是通过计算密钥上的反函数来完成的,那么您的任务就更难了:您需要反转该函数来检索密钥派生算法,这可能不那么容易。如果你最终必须解决一些困难的数学问题(例如离散对数问题),因为该方案依赖于公钥加密,那么你希望你所处理的值足够小,你可以蛮力或者在计算上可行的时间内使用已知的算法(例如Pollard的rho算法)。
在任何情况下,您都需要熟悉反汇编和调试,并希望没有适当的反调试器措施。
否则,问题就更难了 - 你需要做一些有根据的猜测并尝试它们(例如试图做多项式拟合),并希望最好。由于可以适应任何输入和输出集的各种不同的可能函数(数学上不可数,但实际上受源代码大小限制),尝试对算法本身进行已知明文攻击通常是不可行的。
答案 1 :(得分:0)
这取决于该计划在多大程度上是愚蠢的,但我的猜测是它不太可能。没有固定的方法,但一般域与断码相同。