代码的第一位是加密bi,它加密一个六个字符的单词,它可以正常工作。
push ebp
mov ebp,esp
push edx
push ecx
push eax
movzx eax,byte ptr [eax]
rol al,1
rol al,1
rol al,1
mov edx,eax
pop eax
mov byte ptr [eax],dl
pop ecx
xor ecx,edx
mov eax,ecx
ror al,1
ror al,1
ror al,1
pop edx
pop ebp
第二位代码意味着是我已经改变的解密位但是不能正常工作。例如,如果加密的单词是“目标”,我将回来的去加密的单词将是“yoxl”,注意第二个和最后一个字母是正确的但第一个和第三个字母是不同的。任何人都可以告诉我哪里出错或至少在正确的方向上吗?
push ebp
mov ebp,esp
push edx // Push values of the edxregister onto stack
push ecx // push the characters onto the stack so that they can be returned
push eax// push the address of the ekey onto the stack
movzx eax,byte ptr [eax] // set eax to the 8- bit value in memory that eax is pointing at - eax holds the value of the key
mov edx,eax // move the ekey into the edx register
pop eax // return the address of the ekey from the stack into eax
mov byte ptr [eax],dl
pop ecx // restore the character from the stack
rol al,3
mov eax,ecx // move the address of the encrypted character into the eax register
rol al,3
xor eax,edx
pop edx // restore to original values form the stack into EDX
pop ebp
ret
答案 0 :(得分:1)
我发现的第一件事是你在解密函数中的第二次轮换:
rol al,3
这应该是:
ror al, 3
第二件事是xor
:
xor eax,edx
应该在第二次轮换之前移动到mov
,并且还要更改xored寄存器:
xor ecx,edx
mov eax,ecx
ror al,3
总结解密:
push ebp
mov ebp,esp
push edx
push ecx
push eax
movzx eax,byte ptr [eax]
mov edx,eax
pop eax
mov byte ptr [eax],dl
pop ecx
rol al,3
xor ecx,edx
mov eax,ecx
ror al,3
pop edx
pop ebp
ret
修改强>
您的加密订单是:rol, xor, ror
这会产生解密顺序:rol, xor, ror
实际上你应该能够运行两次加密例程,它会产生原始输入(纯文本)。