C# 反转多个异或,添加函数

C# 反转多个异或,添加函数,c#,c++,c,math,reverse-engineering,C#,C++,C,Math,Reverse Engineering,这个问题比编程问题更像是数学问题。 我有解码许可证密钥并检查其正确性的功能 见代码: 从循环后获取的值: local6, local1, local8, local4 知道循环函数的代码吗?我几乎可以肯定这是不可能的,但我想知道你对此有何看法 我分享的代码是我的发明,我真的相信这种循环与反向工程师(串行破解者)相比可以提供很好的保护,除非他们进行暴力破解。我会尝试将其放入类似Z3的SMT解算器中。堆栈可以替换为常量temp2在每一点上也是恒定的。唯一使倒车困难的是temp2。希望SMT解决

这个问题比编程问题更像是数学问题。 我有解码许可证密钥并检查其正确性的功能

见代码:

从循环后获取的值:

local6, local1, local8, local4 
知道循环函数的代码吗?我几乎可以肯定这是不可能的,但我想知道你对此有何看法


我分享的代码是我的发明,我真的相信这种循环与反向工程师(串行破解者)相比可以提供很好的保护,除非他们进行暴力破解。

我会尝试将其放入类似Z3的SMT解算器中。堆栈可以替换为常量
temp2
在每一点上也是恒定的。唯一使倒车困难的是
temp2
。希望SMT解决方案能够解决这个问题

我怀疑这里的扩散很低,因为我看不到任何旋转

更容易反转的是,
temp1
temp2
在每次迭代时都在循环内部重新初始化。如果在整个计算过程中都考虑这些因素,那就更难了


为什么不直接使用加密散列,比如
SHA256

这可能很难,但我看不到任何理论上的单向计算。一切似乎都是可以逆转的。

很抱歉,打断了你的评论。但这立刻让我想起了我对这个问题的“混淆订单id”回答:。我会说(没有想那么难)除非你对代码进行反向工程,否则很难破解,即使你可以访问大量生成的密钥。除非,对于这么多的密钥,您知道它们的顺序,并且您尝试使用所选的可能适用的位/混合操作的多个排列来关联字节。我认为这属于加密SE。为什么您认为这是不可能的?从我看来,这是微不足道的,尽管有点乏味。然而,重要的一点不是验证函数,您已经忽略了它。要生成序列号,首先需要生成通过验证的值
local6
etc,然后反转循环。单独反转循环似乎不够。您可能需要尝试crypto.stackexchange.comBTW:为什么不
…=新的ushort[48]
?“Hard”意思是“手工做起来很乏味”。正如你所指出的,每一步都是可逆的。
ushort[] stack2 = new ushort[52];

for (int i = 0; i < stack2.Length; i++)
{
    stack2[i] = (ushort)i;
}
rand1, rand2, rand3, rand4 
local6, local1, local8, local4