我输入密码:“ 12121212”
XOR DWORD PTR DS:[ECX+EAX],1234567
AND BYTE PTR DS:[ECX+EAX],0E
ADD ECX,4
CMP ECX,8
如我们所见,密码的
DWORD
(0x32313231
,请注意x86处理器使用小尾数布局)是XORed
和0x1234567
,因此0x32313231 ^ 0x1234567
的结果是0x56771233
。 AND
结果为0x56
。之后,程序再次在密码的第二个0xe
上重复操作。我的问题是:我知道我可以反转
0x6
,但是DWORD
操作可以吗? br />#1 楼
尽管无法100%地确定AND运算之前的原始值是多少,但是您可以找到一些产生相同结果的可能值,有时就足够了。基本上,对于
x & N = z
,您可以从z
开始,并将1
中为0的任何位设置为N
。 z
本身也总是可以工作。例如,如果我们知道x & 0xE == 6
,则在x
的以下任何值下都可以工作:6,7,0x16,0x17,0x26,0x27等。 #2 楼
答案是不。与按位XOR
不同,按位AND
不能反转:这与可逆的AND
和OR
运算符相反。
评论
这个答案对我有很大帮助!
– Xozu
17年7月21日在17:13