x86汇编语言解密

时间:2014-05-07 20:40:08

标签: assembly encryption x86

代码的第一位是加密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

1 个答案:

答案 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

实际上你应该能够运行两次加密例程,它会产生原始输入(纯文本)。