Assembly 在IDA中反转X86,Ptr上的Xor键到对象
我目前在学校使用8051,在家使用x86。现在我正在逆转一个游戏,并试图访问一个地址。问题是地址是xord。通常我很容易找到钥匙。 但是现在我有点困惑,找不到Xor键。 有人能解释一下他们现在在做什么吗?我尝试构建密钥,并得到:Assembly 在IDA中反转X86,Ptr上的Xor键到对象,assembly,reverse-engineering,ida,Assembly,Reverse Engineering,Ida,我目前在学校使用8051,在家使用x86。现在我正在逆转一个游戏,并试图访问一个地址。问题是地址是xord。通常我很容易找到钥匙。 但是现在我有点困惑,找不到Xor键。 有人能解释一下他们现在在做什么吗?我尝试构建密钥,并得到: ^ 0xCDDEED); 似乎这是错误的代码: .text:0052DCF5 mov ecx, [esi+0D2164h] <--- esi is a pointer to an instance of what they
^ 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: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
.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
.text:0052DD1C mov byte ptr[esp+1Ch+var_18],cl检查ecx==某个常数似乎是一种非常复杂的方法,因为最后它会将其与零和分支进行比较。(只有当两个输入相同时,XOR才会产生零结果。)我不认为它会被用作指针,除非它不是空的时候会出现
为什么不在代码运行时单步执行此代码,并在ecx
中记录加载的初始值,在[esp+1Ch+var_18]
中记录最终值呢。这两个32位值的异或是关键,因为初始值将被抵消,只留下被中间指令翻转的位集。根据定义,这就是XOR键。有一个整体。不过,这可能也太宽泛了。你能澄清一下你到底想弄明白什么吗?
.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