Function 反向函数

Function 反向函数,function,assembly,reverse-engineering,Function,Assembly,Reverse Engineering,我一直在尝试反转一个非常简单的函数。 该功能在汇编中显示: (参数已加载到AX中) 该函数可以描述为:H(X)=F(X&0xFFFE);F(X)=((X*X)模2^16)异或((X*X)模2^16) 计算从1到2^16的所有值,并绘制在matlab上,以便“查看”某些函数 有人能帮我找到答案吗?(当给定y时,什么是参数x)。 也许对于某些价值观,答案不止一个,所以缩小范围是我的目标 谢谢, 或者 这是一个 您不能反转哈希函数,因为它的关键是它是单向函数。 乘法显然是可逆的,不是异或。通过组合乘

我一直在尝试反转一个非常简单的函数。 该功能在汇编中显示: (参数已加载到AX中)

该函数可以描述为:H(X)=F(X&0xFFFE);F(X)=((X*X)模2^16)异或((X*X)模2^16)

计算从1到2^16的所有值,并绘制在matlab上,以便“查看”某些函数

有人能帮我找到答案吗?(当给定y时,什么是参数x)。 也许对于某些价值观,答案不止一个,所以缩小范围是我的目标

谢谢, 或者

这是一个
您不能反转哈希函数,因为它的关键是它是单向函数。
乘法显然是可逆的,不是异或。通过组合乘法的高低部分,您将丢失信息

正如您在绘图中所看到的,有一些空格,因为该绘图中有2^16个空格,这意味着也有不同的输入值散列为相同的值。
这在散列函数中很常见

“反转”它的唯一方法是构建一个查找表,将输出值转换为可能的输入值。但是,您会发现,对于每个输出值,都有一个或多个输入值

偶数x偶数始终是4的倍数。
因此低2位总是0,因此结果的低2位是乘法的16+17位。
位2..15是位2..15异或位18..31的混合。
快速模拟显示24350个唯一输出,每个输入值平均有1.34个0.34个重复,不错。
碰撞的最大数目为6,但大多数数目不碰撞


对于所有不冲突的数字,您可以在查找表中唯一地查找您的输入值(所有这些显然都忽略了奇数输入值)

作为一个简单的解决方案,生成一个查找表?需要多快?因为输入很小,你可以很容易地强制它。你没有128k?这是什么古老的系统:)你能澄清一下你所说的“反向”是什么意思吗?你是在问创建程序集的源代码还是返回映射到结果的原始值的集合函数吗?因为
操作已经是破坏性的,我想说没有办法反向这个操作,由于这一部分,您已经有至少两个输入值提供相同的输出,因此信息丢失。还是我误解了你的问题。。。?
AND AX, 0xFFFE (round down to even number)
MUL AX (Multiply AX by AX ; the result is represented as DX:AX)
XOR AX,DX