我目前正在寫一個解密例程,並在加密程序中的一個步驟是這樣的:如何在彙編器中反轉XOR操作?
xor eax,edx // xors eax(current character) and edx (the key)
很明顯,我就知道了,所以任何想法如何,我可以扭轉這種運行的關鍵?
我目前正在寫一個解密例程,並在加密程序中的一個步驟是這樣的:如何在彙編器中反轉XOR操作?
xor eax,edx // xors eax(current character) and edx (the key)
很明顯,我就知道了,所以任何想法如何,我可以扭轉這種運行的關鍵?
異或是它自己的逆。 (按位:與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
它可能有助於可視化異或行爲。如果僅在其中一個操作數中設置,XOR操作只設置一個位。如果在這兩個設置,結果爲0。這是「獨家」,否則就只是表現得像OR:與
source : 0011
key : 0101
xor-ed : 0110
所以,如果你只是XOR EAX(現在包含加密後的值)再次在EDX相同的密鑰,你會得到原始出處:
crypted: 0110
key : 0101
xor-ed : 0011
所以,如果我XOR EAX 1,我將得到原始值:)對不起,我還在學習彙編。 – 2012-04-15 18:40:34
@JohnPeters:編輯我的答案澄清。 – aib 2012-04-15 18:47:02