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
注册代码不使用或不需要保留的代码。
我正在尝试制作一个应用程序,该应用程序可以使用 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
注册代码不使用或不需要保留的代码。