我目前正在学校和家中使用8051,我正在使用x86。现在我正在扭转游戏并尝试访问地址。问题是地址是xord。 Normaly我可以轻松找到钥匙。 但现在我有点困惑,无法找到Xor键。 有人可以解释一下他们现在在做什么吗?我试图构建密钥并获得:
^ 0xCDDEED);
这里似乎错了代码:
.text:0052DCF5 mov ecx, [esi+0D2164h] <--- esi is a pointer to an instance of what they call objectmanager
.text:0052DCFB mov [esp+1Ch+var_18], ecx
.text:0052DCFF mov dl, byte ptr [esp+1Ch+var_18+2]
.text:0052DD03 mov al, byte ptr [esp+1Ch+var_18+3]
.text:0052DD07 xor byte ptr [esp+1Ch+var_18+1], 0DEh
.text:0052DD0C xor cl, 0ECh
.text:0052DD0F xor dl, 0D2h
.text:0052DD12 xor al, 0Fh
.text:0052DD14 xor cl, 1
.text:0052DD17 xor dl, 1Fh
.text:0052DD1A not al
.text:0052DD1C mov byte ptr [esp+1Ch+var_18], cl
.text:0052DD20 mov byte ptr [esp+1Ch+var_18+2], dl
.text:0052DD24 mov byte ptr [esp+1Ch+var_18+3], al
.text:0052DD28 cmp [esp+1Ch+var_18], 0
.text:0052DD2D jz short loc_52DD46
.text:0052DD2F push 6EBh
我看到了这个部分:
.text:0052DD07 xor byte ptr [esp+1Ch+var_18+1], 0DEh
.text:0052DD0C xor cl, 0ECh
.text:0052DD0F xor dl, 0D2h
.text:0052DD12 xor al, 0Fh
.text:0052DD14 xor cl, 1
.text:0052DD17 xor dl, 1Fh
.text:0052DD1A not al
.text:0052DD1C mov byte ptr [esp+1Ch+var_18], cl
.text:0052DD20 mov byte ptr [esp+1Ch+var_18+2], dl
.text:0052DD24 mov byte ptr [esp+1Ch+var_18+3], al
试着这样:
.text:0052DD1C mov byte ptr [esp+1Ch+var_18], cl <-- Key 3 = .text:0052DD0C xor cl, 0ECh
.text:0052DD20 mov byte ptr [esp+1Ch+var_18+2], dl <-- Key 2 = .text:0052DD0F xor dl, 0D2h
.text:0052DD24 mov byte ptr [esp+1Ch+var_18+3], al <-- key 1 = .text:0052DD12 xor al, 0Fh
但我也失败了。 通常我习惯这样的xoring:
.text:01410C95 mov eax, dword_1B8F6DC <--- contains ptr to the same objectmanager
.text:01410C9A mov [esp+1Ch+var_C], eax
.text:01410C9E xor byte ptr [esp+1Ch+var_C+2], 35h<-- key 2
.text:01410CA3 xor byte ptr [esp+1Ch+var_C+1], 14h<-- key 3
.text:01410CA8 xor byte ptr [esp+1Ch+var_C+3], 17h <-- key 1
.text:01410CAD mov cl, al
.text:01410CAF xor cl, 6Ah<-- key 4
.text:01410CB2 mov byte ptr [esp+1Ch+var_C], cl
.text:01410CB6 cmp [esp+1Ch+var_C], 0
.text:01410CBB jnz short loc_1410CD6
所以我会到达:XOR Key = 0x1735146A
有人可以用奇怪的xoring帮助我第一个吗?
答案 0 :(得分:0)
检查ecx ==某些常量似乎是一种超级复杂的方法,因为最后它将它与零和分支进行比较。 (当两个输入相同时,XOR只产生零结果。)我没有看到它被用作指针,除非它在以后出现,如果它不是NULL。
为什么不在运行时单步执行此代码,并将加载到ecx
的初始值和[esp+1Ch+var_18]
中的最终值记录下来。这两个32位值的XOR是关键,因为初始值将抵消,只留下由插入指令翻转的位集。根据定义,是 XOR键。