我正在处理一些汇编代码的逆向,并将其处理成一些伪代码,以开始进行逆向尝试。该函数对传入的数据执行某种加密,我正在尝试对其进行解密。然而,我不太确定从哪里开始逆转本身。下面是我试图逆转的算法。
问题:既然编码后的字符串存储在rev3中,那么AND指令运行时,存储在那里的字符串数据不会被抹掉吗?我对此很陌生,但这似乎是不可逆的。AND 与转变相结合让我真的很困惑。我会很感激有一种方法可以扭转这种情况。
string = [102, 111, 111] // the string "foo"
coded[3];
for (i = 0; i < len(string); i++){
rev1 = rev2 = rev3 = string[i]
rev3 = rev3 & 0x30 // obliterate here?
rev1 = rev1 >> 4
rev3 = rev3 ^ rev1
rev1 = rev2
rev1 = rev1 & 1
rev2 = rev2 << 1
rev1 = rev1 ^ rev2
rev3 = rev3 >> 2
rev1 = rev1 << 2
rev3 = rev3 ^ rev1
rev3 = rev3 & 0xff
coded[i] = rev3
}