Function at 0x45b900
Capabilities:
Encrypt data using rc4 prga

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x20
mov ebx, dword [esp + 0x44]
mov eax, dword [esp + 0x38]
mov edi, dword [esp + 0x34]
mov ecx, 0xfffffffe
nop dword [eax + eax]
cmp word [eax + ecx + 2], 0
lea ecx, [ecx + 2]
jne 0x45b920
sar ecx, 1
mov edx, ecx
and edx, 0xfffd
mov esi, ecx
and esi, 2
or ecx, 2
imul ecx, esi
xor esi, 2
imul esi, edx
lea edx, [esi + ecx]
mov word [esp + 0x18], dx
add ecx, esi
add ecx, 2
mov word [esp + 0x1a], cx
mov dword [esp + 0x1c], eax
lea ebp, [esp + 8]
lea esi, [esp + 0x18]
push ebp
push 0
push 0
push 2
push esi
push edi
push 0x15bd542c
call fcn.0045bb70
add esp, 0x1c
cmp eax, 0xc0000023
jne 0x45bad7
push dword [esp + 8]
call fcn.0044d930
add esp, 4
push ebp
push dword [esp + 0xc]
push eax
push 2
push esi
push edi
mov ebp, eax
push 0x15bd542c
call fcn.0045bda0
add esp, 0x1c
mov dword [esp + 0x14], eax
test eax, eax
js 0x45baca
mov ecx, dword [esp + 0x3c]
test ecx, ecx
je 0x45b9c3
mov eax, dword [ebp + 4]
mov dword [ecx], eax
mov edi, dword [esp + 0x40]
test edi, edi
je 0x45bac1
mov ecx, dword [ebp + 8]
lea edx, [ebp + 0xc]
mov eax, ecx
and eax, 3
je 0x45b9ef
cmp eax, 2
jne 0x45b9fd
shr ecx, 1
xchg esi, edx
rep movsw word es:[edi], word [esi]
xchg esi, edx
jmp 0x45bac1
shr ecx, 2
xchg esi, edx
rep movsd dword es:[edi], dword [esi]
xchg esi, edx
jmp 0x45bac1
test ecx, ecx
je 0x45bac1
cmp ecx, 8
jb 0x45ba1a
mov eax, edi
sub eax, ebp
add eax, 0xfffffff4
cmp eax, 0x10
jae 0x45badf
mov eax, edx
mov edx, edi
mov edi, ecx
mov dword [esp], ebp
lea ecx, [edi - 1]
mov ebp, edi
and edi, 7
je 0x45ba5a
mov dword [esp + 4], ecx
xor esi, esi
nop word cs:[eax + eax]
movzx ecx, byte [eax + esi]
mov byte [edx + esi], cl
inc esi
cmp edi, esi
jne 0x45ba40
add eax, esi
add edx, esi
mov edi, ebp
sub edi, esi
mov ecx, dword [esp + 4]
jmp 0x45ba5c
mov edi, ebp
cmp ecx, 7
mov ebp, dword [esp]
jb 0x45bac1
xor ecx, ecx
nop word cs:[eax + eax]
mov esi, ebx
movzx ebx, byte [eax + ecx]
mov byte [edx + ecx], bl
movzx ebx, byte [eax + ecx + 1]
mov byte [edx + ecx + 1], bl
movzx ebx, byte [eax + ecx + 2]
mov byte [edx + ecx + 2], bl
movzx ebx, byte [eax + ecx + 3]
mov byte [edx + ecx + 3], bl
movzx ebx, byte [eax + ecx + 4]
mov byte [edx + ecx + 4], bl
movzx ebx, byte [eax + ecx + 5]
mov byte [edx + ecx + 5], bl
movzx ebx, byte [eax + ecx + 6]
mov byte [edx + ecx + 6], bl
movzx ebx, byte [eax + ecx + 7]
mov byte [edx + ecx + 7], bl
mov ebx, esi
add ecx, 8
cmp edi, ecx
jne 0x45ba70
test ebx, ebx
je 0x45baca
mov eax, dword [ebp + 8]
mov dword [ebx], eax
push ebp
call fcn.0044d950
add esp, 4
mov eax, dword [esp + 0x14]
add esp, 0x20
pop esi
pop edi
pop ebx
pop ebp
ret
xor esi, esi
cmp ecx, 0x10
jb 0x45bb11
mov esi, ecx
and esi, 0xfffffff0
xor eax, eax
movups xmm0, xmmword [edx + eax]
movups xmmword [edi + eax], xmm0
add eax, 0x10
cmp esi, eax
jne 0x45baed
cmp ecx, esi
je 0x45bac1
test cl, 8
jne 0x45bb11
and ecx, 0xf
add edi, esi
add edx, esi
jmp 0x45ba1a
mov eax, ecx
and eax, 0xfffffff8
mov dword [esp], eax
mov eax, dword [esp]
add eax, edx
mov dword [esp + 4], edx
mov edx, dword [esp]
add edx, edi
mov dword [esp + 0x10], ecx
and ecx, 7
mov dword [esp + 0xc], ecx
mov ecx, dword [esp + 4]
nop word cs:[eax + eax]
movsd xmm0, qword [ecx + esi]
movsd qword [edi + esi], xmm0
add esi, 8
cmp dword [esp], esi
jne 0x45bb40
mov ecx, dword [esp]
cmp dword [esp + 0x10], ecx
mov edi, dword [esp + 0xc]
jne 0x45ba20
jmp 0x45bac1