开发者

decryption in asm

开发者 https://www.devze.com 2023-02-23 10:55 出处:网络
In ASM i have the following code which encrypts a character. Inputs: EAX = Encryption Key value ECX = the character to be encrypted

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消