我正在嘗試制作一個可以使用 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,在這種情況下,使用前一種方法產生的加密文本作為輸入,但它會拋出不同的文本而不是原始文本。
uj5u.com熱心網友回復:
我正在加載一個可以是任意大小的字符陣列,每個字符都隨著回圈旋轉
您從解密中得到不同的文本,因為加密在旋轉本身和遍歷陣列之間使用了混合運算元大小。你改變了一個雙字,但你只前進了一個位元組。這就是使程序不可逆轉的原因!
根據字符大小使用:
; 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注冊代碼不使用或不需要保留的代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/459713.html
