Just something i needed translated from MASM for FASM.
Maybe someone can use it to, so i might as well post it here
Credits for original MASM version go to the tiny banker bot coder.
--------------------------------------------------------------------------------------
proc crypt stdcall lpData:dword, dwLen:dword
locals
dwlpKeyTable dd ?
endl
pushad
invoke VirtualAlloc, 0, 256, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE
mov [dwlpKeyTable], eax
stdcall RC4SetKey, [dwlpKeyTable], szPassword, 20; <-- Lenght of password
stdcall RC4Crypt, [dwlpKeyTable], [lpData], [dwLen]
invoke VirtualFree,[dwlpKeyTable], 0, MEM_RELEASE
popad
ret
endp
proc RC4SetKey stdcall lpKeyTable:dword, lpPass:dword, nPass:dword
pushad
mov edi,[lpKeyTable]
xor ecx, ecx
@@: mov [edi + ecx], cl
inc ecx
cmp ecx, 256
jne @b
mov esi,[lpPass]
xor ebx, ebx
xor ecx, ecx
xor edx, edx
@@: mov al, [edi + ecx]
add bl, [esi + edx]
add bl, al
mov ah, [edi + ebx]
mov [edi + ecx], ah
mov [edi + ebx], al
inc ecx
cmp ecx, 256
je @f
inc edx
cmp edx,[nPass]
jl @b
xor edx, edx
jmp @b
@@: popad
leave
retn 4*3; Size of dword * 3
endp
proc RC4Crypt stdcall pKeyTable:dword, lpData:dword, nData:dword
pushad
mov edi,[pKeyTable]
mov esi,[lpData]
xor eax, eax
xor ebx, ebx
xor ecx, ecx
xor edx, edx
@@:inc bl
mov dl, [edi + ebx]
add al, dl
mov cl, [edi + eax]
mov [edi + ebx], cl
mov [edi + eax], dl
add cl, dl
mov cl, [edi + ecx]
xor [esi], cl
inc esi
dec [nData]
jnz @b
popad
leave
retn 4*3; Size of dword * 3 params pushed by this proc
endp