首先我使用 MASM,我打开一个加密文件并将其内容放入缓冲区并将其导出到一个新文件。除了解密部分,我一切正常。
我不确定我是否需要对缓冲区本身进行异或,或者我是否引用 edx(我存储缓冲区的位置),或者我是否需要对我放入 eax 寄存器中读取的字节进行异或。
离开我的头顶(没有测试)......
mov esi,dword ptr [buffer]
mov ecx,dword ptr [bufsize]
shr ecx,2
jz startloop1
toploop4:
mov eax,dword ptr [esi]
xor eax,ffffffffh
mov dword ptr [esi],eax
dec ecx
jnz toploop4
startloop1:
mov ecx,dword ptr [bufsize]
and ecx,3
jz end
toploop1:
mov al,byte [esi]
xor al,ffh
mov dword ptr [esi],al
dec ecx
jnz toploop1
end:
如果您使用简单的 XOR 函数进行解密和加密,则函数与船调用相同。XOR 二进制函数是可逆的!
通过异或,我假设您的意思是反转缓冲区中的所有位,即与全 1 进行异或。
我对 ASM 生疏了,但我认为要做的事情是将 $FFFF 加载到某个寄存器中,然后循环遍历缓冲区,将每个字节或字或 dword 加载到 AX 中,与其他寄存器进行异或并将值存储回来进入缓冲区。