我试图编写一个密钥库来破解我正在学习的代码,但我被卡住了。发生的事情很简单:

我输入密码:“ 12121212”

XOR DWORD PTR DS:[ECX+EAX],1234567
AND BYTE PTR DS:[ECX+EAX],0E
ADD ECX,4
CMP ECX,8


如我们所见,密码的DWORD0x32313231,请注意x86处理器使用小尾数布局)是XORed0x1234567,因此0x32313231 ^ 0x1234567的结果是0x56771233AND结果为0x56。之后,程序再次在密码的第二个0xe上重复操作。

我的问题是:我知道我可以反转0x6,但是DWORD操作可以吗? br />

#1 楼

尽管无法100%地确定AND运算之前的原始值是多少,但是您可以找到一些产生相同结果的可能值,有时就足够了。

基本上,对于x & N = z,您可以从z开始,并将1中为0的任何位设置为Nz本身也总是可以工作。例如,如果我们知道x & 0xE == 6,则在x的以下任何值下都可以工作:6,7,0x16,0x17,0x26,0x27等。

评论


这个答案对我有很大帮助!

– Xozu
17年7月21日在17:13

#2 楼

答案是不。与按位XOR不同,按位AND不能反转:这与可逆的ANDOR运算符相反。