按位异或的逆代数方程

时间:2018-11-07 21:51:42

标签: assembly encryption reverse-engineering

我正在尝试逆转加密方案,但是在使用代数逆转时,我似乎陷入了困境。

对于单个字符(使用寄存器和常量)的加密方案如下:

encrypted_char= (original_char XOR dl) + al
where:
eax = eax.previous * c1 +c2
edx = (eax >> c3)
eax.0 is a known seeded constant.

我想为original_char代数求解该方程式,但是我遇到了一些问题,即独自获取原始char的操作顺序。考虑使用负数进行环绕也使我头疼。

如果有人对如何解决original_char有任何指示,将不胜感激。我最初的想法是先减去al,然后再与dl进行异或运算,但此时我开始感到困惑。

1 个答案:

答案 0 :(得分:1)

在发布之前,我曾玩过一个玩具示例,答案如下:

按位异或的优先级与乘法相同,我将其翻转。我已经知道XOR是XOR的逆,但是我认为我应该在这里声明。 结果公式如下:     (encrypted_char - al) XOR dl = al 不需要为了获得正确的解决方案而弄弄较大的寄存器中的内容。

我将使用模数运算以正确的变量大小来解决环绕问题。

使用上述方法,我可以将代码反转。