Function at 0x643f40
Capabilities:
Encrypt data using rc4 prga

Disassembly:
mov ecx, dword [0xe11d80]
mov ecx, dword fs:[ecx]
mov ecx, dword [ecx]
cmp esp, dword [ecx + 8]
jbe 0x644276
sub esp, 0x38
movzx eax, byte [esp + 0x3c]
test al, al
je 0x64425d
cmp al, 8
ja 0x64425d
mov edx, dword [esp + 0x44]
test edx, edx
je 0x644071
mov ebx, dword [esp + 0x40]
movzx ebp, byte [ebx]
cmp al, 8
jae 0x643f9b
movzx ecx, al
mov esi, 1
shl esi, cl
cmp ecx, 0x20
sbb edi, edi
and esi, edi
add esi, 0xffffffff
and ebp, esi
movzx ecx, al
mov eax, 1
shl eax, cl
lea esi, [ecx - 0x20]
mov edi, ecx
mov ecx, esi
mov edx, 1
shl edx, cl
neg ecx
mov ebx, 1
shr ebx, cl
cmp edi, 0x20
sbb edi, edi
and eax, edi
cmp esi, 0x20
sbb esi, esi
and edx, esi
cmp ecx, 0x20
sbb esi, esi
and ebx, esi
or edx, ebx
add eax, 0xffffffff
adc edx, 0xffffffff
test edx, edx
sete dl
seta bl
cmp eax, ebp
seta al
and edx, eax
or edx, ebx
test dl, dl
jne 0x64402b
mov eax, dword [esp + 0x48]
lea edx, [eax - 1]
mov ebx, edx
neg edx
sar edx, 0x1f
and edx, 1
mov esi, dword [esp + 0x40]
add edx, esi
mov edi, dword [esp + 0x44]
lea ecx, [edi - 1]
mov dword [esp + 0x2c], eax
xor eax, eax
mov dword [esp + 0x28], eax
xor eax, eax
mov dword [esp + 0x10], eax
xor eax, eax
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x2c]
jmp 0x6440df
mov dword [esp + 0x50], 0
mov dword [esp + 0x4c], ebp
mov eax, dword [esp + 0x48]
dec eax
mov ecx, eax
neg eax
sar eax, 0x1f
and eax, 1
mov edx, dword [esp + 0x40]
add eax, edx
mov dword [esp + 0x54], eax
mov eax, dword [esp + 0x44]
dec eax
mov dword [esp + 0x58], eax
mov dword [esp + 0x5c], ecx
mov dword [esp + 0x60], 0
mov dword [esp + 0x64], 0
add esp, 0x38
ret
mov eax, dword [0xdc42a0]
mov ecx, dword [0xdc42a4]
mov dword [esp + 0x50], 0
mov dword [esp + 0x4c], 0
mov ebx, dword [esp + 0x40]
mov dword [esp + 0x54], ebx
mov dword [esp + 0x58], edx
mov edx, dword [esp + 0x48]
mov dword [esp + 0x5c], edx
mov dword [esp + 0x60], eax
mov dword [esp + 0x64], ecx
add esp, 0x38
ret
mov ecx, dword [esp + 0x24]
mov esi, dword [esp + 0x34]
mov edi, dword [esp + 0x1c]
mov esi, dword [esp + 0x40]
mov edi, dword [esp + 0x44]
mov ecx, dword [esp + 0x1c]
mov dword [esp + 0x28], ebx
mov dword [esp + 0x10], edx
mov dword [esp + 0x14], ebp
mov edx, dword [esp + 0x34]
mov ebx, dword [esp + 0x24]
mov ebp, eax
mov eax, dword [esp + 0x48]
test ecx, ecx
je 0x644229
movzx eax, byte [edx]
mov byte [esp + 0xf], al
dec ebx
mov dword [esp + 0x24], ebx
neg ebx
sar ebx, 0x1f
and ebx, 1
and eax, 0x7f
mov dword [esp + 0x20], eax
add edx, ebx
mov dword [esp + 0x34], edx
lea ebx, [ecx - 1]
mov dword [esp + 0x1c], ebx
mov edi, dword [esp + 0x14]
cmp edi, 1
sbb ecx, ecx
xor ecx, 0xffffffff
mov esi, dword [esp + 0x10]
or ecx, esi
mov dword [esp + 0x18], ecx
shl eax, cl
lea edx, [ecx - 0x20]
mov ecx, edx
mov ebx, dword [esp + 0x20]
shl ebx, cl
neg ecx
mov edi, dword [esp + 0x20]
shr edi, cl
mov esi, dword [esp + 0x18]
cmp esi, 0x20
sbb esi, esi
and eax, esi
mov esi, eax
add eax, ebp
cmp edx, 0x20
sbb edx, edx
and ebx, edx
cmp ecx, 0x20
sbb edx, edx
and edx, edi
or ebx, edx
add esi, ebp
mov edx, dword [esp + 0x28]
adc ebx, edx
movzx edx, byte [esp + 0xf]
test dl, 0x80
je 0x6441f5
mov edx, dword [esp + 0x10]
add edx, 7
mov ebp, dword [esp + 0x14]
adc ebp, 0
test ebp, ebp
xchg esi, ebx
seta bl
xchg esi, ebx
xchg edi, ebx
sete bl
xchg edi, ebx
cmp edx, 0x3f
setae cl
and ecx, edi
or ecx, esi
test cl, cl
je 0x6440ad
lea eax, [0x905d40]
mov dword [esp], eax
lea eax, [0xdc42a8]
mov dword [esp + 4], eax
call fcn.00409930
mov eax, dword [esp + 8]
mov dword [esp + 0x50], 0
mov dword [esp + 0x4c], 0
mov ecx, dword [esp + 0x40]
mov dword [esp + 0x54], ecx
mov ecx, dword [esp + 0x44]
mov dword [esp + 0x58], ecx
mov ecx, dword [esp + 0x48]
mov dword [esp + 0x5c], ecx
lea ecx, [0xa2dfa0]
mov dword [esp + 0x60], ecx
mov dword [esp + 0x64], eax
add esp, 0x38
ret
mov dword [esp + 0x50], ebx
mov dword [esp + 0x4c], eax
mov eax, dword [esp + 0x34]
mov dword [esp + 0x54], eax
mov eax, dword [esp + 0x1c]
mov dword [esp + 0x58], eax
mov eax, dword [esp + 0x24]
mov dword [esp + 0x5c], eax
mov dword [esp + 0x60], 0
mov dword [esp + 0x64], 0
add esp, 0x38
ret
mov ecx, dword [0xdc42a0]
mov edx, dword [0xdc42a4]
mov dword [esp + 0x50], 0
mov dword [esp + 0x4c], 0
mov dword [esp + 0x54], esi
mov dword [esp + 0x58], edi
mov dword [esp + 0x5c], eax
mov dword [esp + 0x60], ecx
mov dword [esp + 0x64], edx
add esp, 0x38
ret
lea eax, [0x8d9c60]
mov dword [esp], eax
lea eax, [0xa2d1a8]
mov dword [esp + 4], eax
call fcn.00438c00
nop
call fcn.00468280
jmp fcn.00643f40