In ASM i have the following code which encrypts a character.
Inputs:
- EAX = Encryption Key value
- ECX = the character to be encrypted
Outputs:
- EAX = the encrypted value of the source character
Code:
encrypt11: push edx
push ecx
ror al,1
ror al,1
ror al,1
mov edx,eax
pop eax
sub eax,0x02
xor eax,edx
rol al,1
rol al,1
rol al,1
pop edx
开发者_开发问答 ret
I am stuck on an assignment in which i need to "reverse" this so that i can get the original string that has been 'encrypted'... Im sorry to ask guys but so far ive changed the ROL's to ROR's and vice versa.. The sub has been changed to add but i am still lost. Can anyone shed any light on this? whilst sticking to the original code as much as possible without missing anything?
Okay, give this a try and please ask the questions you have and I'll amend my answer accordingly:
; EAX: en/decryption key
; ECX: plain character
encrypt11:
push edx ; simply save edx
push ecx
ror al,1 ; modify key
ror al,1
ror al,1
mov edx,eax ; edx = <modified key>
pop eax ; eax = <original character>
sub eax,0x02 ; eax -= 2
xor eax,edx ; eax ^= edx
rol al,1 ; modify encrypted character
rol al,1
rol al,1
pop edx ; simply restore edx
ret
; EAX: en/decryption key
; ECX: encrypted character
decrypt11:
push edx ; simply save edx
push ecx
ror al,1 ; modify key
ror al,1
ror al,1
mov edx,eax ; edx = <modified key>
pop eax ; eax = <encrypted character>
ror al,1 ; modify encrypted character
ror al,1
ror al,1
xor eax,edx ; eax ^= edx
add eax,0x02 ; eax += 2
pop edx
ret
Let's take the following names key
and chr
for the input to encryption. The gist is that in the encryption the first thing done is to modify (the three ror
) the key
, which yields key'
. Then we subtract from the input character 2, which yields chr'
. Then chr'
and key'
are being combined with xor
, yielding chr''
. Once that is done chr''
is modified further (the three rol
), yielding the output value echr
.
For decryption we input echr
and key
again. Then we need to get chr''
from chr
(the three ror
in decryption). Then we need to get key'
from key
and xor-combine key'
and chr''
, yielding chr'
. From there we only add 2 to chr'
to yield chr
as output.
精彩评论