x86 汇编语言旋转字符位以加密/混淆

x86 assembly language rotate bits of characters to encrypt / obfuscate

我正在尝试制作一个应用程序,该应用程序可以使用 encrypt/decrypt 的 ROR/ROL 指令使用汇编语言加密和解密字符串。 我使用下面的代码使用char数组进行加密加密:

    push EAX
    push EBX
    push ECX
    push EDX

    MOV ECX, ArraySize
    LEA EDI, CharArray

    CICLE :
    MOV EAX, [EDI]
        ROR EAX, 03
        MOV[EDI], EAX
        INC EDI
        LOOP CICLE

        pop EDX
        pop ECX
        pop EBX
        pop EAX

我曾尝试使用相同的方法进行解密,但使用的是 ROL 而不是 ROR,在这种情况下,我使用的是前一种方法生成的加密文本作为输入,但它会给我一个不同的文本,而不是原始文本。

I am loading an array of characters that can be any size and each character rotates with the loop

您从解密中得到了不同的文本,因为加密在旋转本身和遍历数组之间使用了混合的操作数大小。你改变了一个 dword 但你只前进了一个 byte。这就是使过程不可逆!

的原因

根据字符大小使用:

; bytes
CICLE :
  ror  byte ptr [edi], 3
  inc  edi
  dec  ecx
  jnz  CICLE

; words
CICLE :
  ror  word ptr [edi], 3
  add  edi, 2
  dec  ecx
  jnz  CICLE

; dwords
CICLE :
  ror  dword ptr [edi], 3
  add  edi, 4
  dec  ecx
  jnz  CICLE

不要push / pop 注册代码不使用或不需要保留的代码。