Assembly x86汇编语言解密

Assembly x86汇编语言解密,assembly,encryption,x86,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

代码的第一位是加密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
代码的第二位是我修改过的解密位,但是它不能正常工作。例如,如果加密的单词是“goal”,那么我得到的解密单词将是“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

我发现的第一件事是解密函数中的第二次旋转:

rol al,3
这可能是:

ror al, 3
第二件事是
xor

xor eax,edx
可能应在第二次旋转和
mov
之前移动,并更改异或寄存器:

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


事实上,您应该能够运行加密例程两次,它将生成原始输入(纯文本)。

您的代码中没有任何注释,这将大大降低人们尝试提供帮助的可能性。哦,谢谢。。我现在就把它们放在上面,你为什么要用汇编来写这个?我很确定gcc会生成更好的代码。你在加密和解密中向左旋转
ror
会将字节向右旋转。@uraf是一名计算机科学专业的学生,我们在本模块(计算机体系结构)中只使用汇编语言实际上我试过了,它会给出正确的第一个和第三个字母,而不是像前面的解决方案那样的第二个和第四个字母。解密例程应该与加密例程完全相同。这是一个简单的异或加密算法的变种。当然,除非你想在加密程序中只向左旋转。那么你只需要在解密过程中向右旋转。但是它仍然是Xor加密算法的一种变体,您还应该记住使用相同的密钥进行加密和解密(您使用1进行加密,使用3进行解密)@tloveless:我们在任何地方都看不到密钥。您所指的
1
3
是要旋转的位数。在加密例程中,它旋转1位三次。在解密例程中,它一次旋转3位。这其实是一样的。@SaniHuttunen-这就是阅读速度过快可能导致的原因-谢谢你指出,我会相应地更新我的答案。