jacklikesnike
jacklikesnike

Reputation: 3

decryption in asm

In ASM i have the following code which encrypts a character.

Inputs:

Outputs:

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?

Upvotes: 0

Views: 1914

Answers (1)

0xC0000022L
0xC0000022L

Reputation: 21339

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.

Upvotes: 3

Related Questions