逆与运算

逆向工程 拆卸 部件 C 补丁反转 异或
2021-06-26 01:48:40

我正在尝试编写一个密钥生成器来破解我正在学习的问题,但我被卡住了。那里发生的事情很简单:

假设我输入了密码:“12121212”

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

正如我们所看到的,第一DWORD密码(0x32313231通知,x86处理器使用 小端布局)正在XORed0x1234567这样0x32313231 ^ 0x1234567的结果与0x56771233然后对被操纵密码AND的第一个字节 ( 0x56) 进行操作0xe,结果为0x6之后,程序重复操作,这次DWORD是密码的第二个

我的问题是:我知道我可以逆转,XORAND手术可以吗?

2个回答

答案是否定的与 bitwise 不同XOR, bitwiseAND不能反转:

0 & 1 = 0
0 & 0 = 0

两者ANDOR是不可逆的。这与可逆的XORNOT运算符相反

虽然无法 100% 确定地知道 AND 运算之前的原始值是什么,但您可以找到一些可能产生相同结果的值,有时这已经足够了。

基本上,x & N = z你可以开始z,并设置任何位1,你已经是0 Nz它本身也将始终有效。

例如,如果我们知道x & 0xE == 6,那么在以下任何值时x都可以工作:6,7, 0x16, 0x17, 0x26, 0x27 等等。