Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use32
- ; rc4_decrypt (uint8_t i, uint8_t j, uint8_t *const key, uint8_t *data_decrypt, uint8_t *data_encrypt, uint length)
- ; ebx: key
- ; ecx: length
- ; ebp: i
- ; edx: j
- ; edi: data_decrypt
- ; esi: data_encrypt
- @@rc4_decrypt_loop:
- ; i++;
- inc ebp
- and ebp,0xFF
- ; a = key[i];
- ; (gleichzeitig werden die höherwertigen drei Byte von eax auf 0 gesetzt)
- movzx eax,byte [ebx+ebp]
- ; j += a;
- add dl,al
- ; b = key[j]
- mov ah,[ebx+edx]
- ; key[i] = b;
- mov [ebx+ebp],ah
- ; key[j] = a;
- mov [ebx+edx],al
- ; k = [(a + b) & 0xFF]
- add al,ah
- xor ah,ah ; Da das Highword immer noch 0 ist (wegen movzx) entspricht dies
- ; einem and eax,0xFF
- mov ah,[ebx+eax]
- ; t = *(data_encrypt++)
- lodsb
- ; t ^= k
- xor al,ah
- ; *(data_decrypt++) = t
- stosb
- ; while (length--)
- @@rc4_decrypt:
- @@loop rc4_decrypt_loop
- rc4_decrypt_return:
- ; return
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement