2012-04-15 19 views
0

我目前正在寫一個解密例程,並在加密程序中的一個步驟是這樣的:如何在彙編器中反轉XOR操作?

xor eax,edx // xors eax(current character) and edx (the key) 

很明顯,我就知道了,所以任何想法如何,我可以扭轉這種運行的關鍵?

回答

4

異或是它自己的逆。 (按位:與0異或將不會發生變化,與1異或將翻轉,再次翻轉將會翻轉。)

只需異或「加密」值和密鑰:

encrypted = plain XOR key 
encrypted XOR key = (plain XOR key) XOR key 
encrypted XOR key = plain XOR (key XOR key) 
encrypted XOR key = plain XOR (000...0) 
encrypted XOR key = plain 
+0

所以,如果我XOR EAX 1,我將得到原始值:)對不起,我還在學習彙編。 – 2012-04-15 18:40:34

+0

@JohnPeters:編輯我的答案澄清。 – aib 2012-04-15 18:47:02

0

它可能有助於可視化異或行爲。如果僅在其中一個操作數中設置,XOR操作只設置一個位。如果在這兩個設置,結果爲0。這是「獨家」,否則就只是表現得像OR:與

source : 0011 
key : 0101 
xor-ed : 0110 

所以,如果你只是XOR EAX(現在包含加密後的值)再次在EDX相同的密鑰,你會得到原始出處:

crypted: 0110 
key : 0101 
xor-ed : 0011