在asm中解密

时间:2011-04-09 12:14:22

标签: assembly

在ASM中,我有以下代码加密角色。

输入:

  • EAX =加密密钥值
  • ECX =要加密的字符

输出:

  • EAX =源角色的加密值

代码:

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 

我被困在一项任务中,我需要“反转”这个,以便我可以得到已经'加密'的原始字符串...我很抱歉问问,但到目前为止,我已经将ROL改为ROR和反之亦然。该子已被改为添加但我仍然迷失。任何人都可以对此有所了解吗?尽可能地坚持原始代码而不遗漏任何东西?

1 个答案:

答案 0 :(得分:3)

好的,试一试,请问你的问题,我会相应地修改我的答案:

; 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

我们将以下名称keychr作为加密输入。要点是,在加密中,首先要做的是修改{三个rorkey,产生key'。然后我们从输入字符2中减去,得到chr'。然后chr'key'xor合并,产生chr''。完成后,chr''会进一步修改(三个rol),产生输出值echr

对于解密,我们再次输入echrkey。然后我们需要从chr''(解密中的三个chr)获取ror。然后,我们需要从key'和xor-combine keykey'获得chr'',从而产生chr'。从那里我们只添加2到chr'以产生chr作为输出。