在ASM中,我有以下代码加密角色。
输入:
输出:
代码:
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和反之亦然。该子已被改为添加但我仍然迷失。任何人都可以对此有所了解吗?尽可能地坚持原始代码而不遗漏任何东西?
答案 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
我们将以下名称key
和chr
作为加密输入。要点是,在加密中,首先要做的是修改{三个ror
)key
,产生key'
。然后我们从输入字符2中减去,得到chr'
。然后chr'
和key'
与xor
合并,产生chr''
。完成后,chr''
会进一步修改(三个rol
),产生输出值echr
。
对于解密,我们再次输入echr
和key
。然后我们需要从chr''
(解密中的三个chr
)获取ror
。然后,我们需要从key'
和xor-combine key
和key'
获得chr''
,从而产生chr'
。从那里我们只添加2到chr'
以产生chr
作为输出。