【发布时间】:2016-05-11 11:30:47
【问题描述】:
我一直在尝试反转一个看起来很简单的函数。 该功能以汇编形式呈现: (参数加载到 AX 中)
AND AX, 0xFFFE (round down to even number)
MUL AX (Multiply AX by AX ; the result is represented as DX:AX)
XOR AX,DX
函数可以描述为:H(X) = F(X & 0xFFFE); F(X) = ((X * X) mod 2^16) xor ((X * X) div 2^16)
计算从 1 到 2^16 的所有值并在 matlab 上绘制,以便“看到”某些函数。
谁能帮我找到这个问题的答案? (当给定 y 时,参数 x 是什么)。 可能对于某些值有不止一个答案,所以缩小范围是我的目标。
谢谢, 或者。
【问题讨论】:
-
作为一个简单的解决方案,生成一个查找表?
-
你想要多快?由于输入很小,你可以很容易地暴力破解它。
-
你没有128k?这是什么古老的系统:)
-
你能解释一下“反向”是什么意思吗?您是要创建程序集的源代码还是要返回映射到结果的原始值的集合函数?
-
由于
AND操作已经具有破坏性,我想说没有办法扭转这个操作,因为仅仅由于这部分你已经有至少2个输入值给出相同的输出,所以信息丢失。还是我误解了你的问题……?
标签: function assembly reverse-engineering