Function at 0x467730
Capabilities:
Encrypt data using rc4 prga

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x28
push ebx
push esi
mov esi, dword [ebp + 8]
push edi
mov eax, dword [esi + 4]
mov edi, dword [esi]
cdq
xor eax, edx
mov dword [ebp - 0x20], edi
sub eax, edx
mov edx, dword [esi + 0x14]
movzx ebx, word [edx + 0xe]
movzx ecx, word [edx + 0xc]
imul ebx, ecx
imul ebx, dword [edx + 4]
lea edx, [eax - 1]
mov dword [ebp - 8], edx
add ebx, 0x1f
sar ebx, 3
and ebx, 0xfffffffc
mov dword [ebp - 0x28], ebx
test edx, edx
js 0x467a6b
lea eax, [edi - 7]
mov dword [ebp - 0x1c], eax
mov eax, edi
and eax, reloc.OLEAUT32.dll_VariantInit
jns 0x467789
dec eax
or eax, 0xfffffff8
inc eax
mov edi, edx
mov dword [ebp - 0xc], eax
imul edi, ebx
mov ebx, dword [ebp + 0x10]
mov dword [ebp - 0x14], 0
mov dword [ebp - 0x10], edi
nop
xor ecx, ecx
mov dword [ebp - 0x18], ecx
cmp dword [ebp - 0x1c], ecx
jle 0x4679a2
nop
mov eax, dword [esi + 0x18]
mov ebx, edx
mov esi, dword [esi + 0x14]
add eax, edi
shr ecx, 3
cmp dword [esi + 8], 0
mov al, byte [eax + ecx]
cmovge ebx, dword [ebp - 0x14]
imul ebx, dword [ebp + 0xc]
movzx edi, al
shl ecx, 5
mov edx, edi
and edx, 0x80
or edx, 0x500
add ebx, ecx
shr edx, 5
add edx, esi
mov esi, dword [ebp + 0x10]
movzx eax, byte [edx]
mov ecx, dword [esi]
mov byte [ebx + ecx], al
movzx eax, byte [edx + 1]
mov ecx, dword [esi]
mov byte [ecx + ebx + 1], al
movzx eax, byte [edx + 2]
mov edx, edi
mov ecx, dword [esi]
and edx, 0x40
or edx, 0x280
shr edx, 4
mov byte [ecx + ebx + 2], al
mov eax, dword [esi]
mov byte [eax + ebx + 3], 0xff
mov ecx, dword [esi]
mov eax, dword [ebp + 8]
add edx, dword [eax + 0x14]
movzx eax, byte [edx]
mov byte [ecx + ebx + 4], al
movzx eax, byte [edx + 1]
mov ecx, dword [esi]
mov byte [ecx + ebx + 5], al
movzx eax, byte [edx + 2]
mov edx, edi
mov ecx, dword [esi]
and edx, 0x20
or edx, 0x140
shr edx, 3
mov byte [ecx + ebx + 6], al
mov eax, dword [esi]
mov byte [eax + ebx + 7], 0xff
mov eax, dword [ebp + 8]
mov ecx, dword [esi]
add edx, dword [eax + 0x14]
movzx eax, byte [edx]
mov byte [ecx + ebx + 8], al
movzx eax, byte [edx + 1]
mov ecx, dword [esi]
mov byte [ecx + ebx + 9], al
movzx eax, byte [edx + 2]
mov edx, edi
mov ecx, dword [esi]
and edx, 0x10
or edx, 0xa0
shr edx, 2
mov byte [ecx + ebx + 0xa], al
mov eax, dword [esi]
mov byte [eax + ebx + 0xb], 0xff
mov eax, dword [ebp + 8]
mov ecx, dword [esi]
add edx, dword [eax + 0x14]
movzx eax, byte [edx]
mov byte [ecx + ebx + 0xc], al
mov ecx, dword [esi]
movzx eax, byte [edx + 1]
mov byte [ecx + ebx + 0xd], al
mov ecx, dword [esi]
movzx eax, byte [edx + 2]
mov edx, edi
mov byte [ecx + ebx + 0xe], al
mov eax, dword [esi]
mov byte [eax + ebx + 0xf], 0xff
mov ecx, dword [esi]
and edx, 8
mov eax, dword [ebp + 8]
or edx, 0x50
shr edx, 1
add edx, dword [eax + 0x14]
movzx eax, byte [edx]
mov byte [ecx + ebx + 0x10], al
movzx eax, byte [edx + 1]
mov ecx, dword [esi]
mov byte [ecx + ebx + 0x11], al
movzx eax, byte [edx + 2]
mov edx, edi
mov ecx, dword [esi]
and edx, 4
or edx, 0x28
mov byte [ecx + ebx + 0x12], al
mov eax, dword [esi]
mov byte [eax + ebx + 0x13], 0xff
mov ecx, dword [esi]
mov eax, dword [ebp + 8]
add edx, dword [eax + 0x14]
movzx eax, byte [edx]
mov byte [ecx + ebx + 0x14], al
mov ecx, dword [esi]
movzx eax, byte [edx + 1]
mov byte [ecx + ebx + 0x15], al
mov ecx, dword [esi]
movzx eax, byte [edx + 2]
mov byte [ecx + ebx + 0x16], al
mov ecx, edi
mov eax, dword [esi]
and ecx, 2
or ecx, 0x14
and edi, 1
mov byte [eax + ebx + 0x17], 0xff
mov eax, dword [ebp + 8]
mov eax, dword [eax + 0x14]
lea edx, [eax + ecx*2]
mov ecx, dword [esi]
movzx eax, byte [edx]
mov byte [ecx + ebx + 0x18], al
mov ecx, dword [esi]
movzx eax, byte [edx + 1]
mov byte [ecx + ebx + 0x19], al
mov ecx, dword [esi]
movzx eax, byte [edx + 2]
mov byte [ecx + ebx + 0x1a], al
mov eax, dword [esi]
mov byte [eax + ebx + 0x1b], 0xff
mov eax, dword [ebp + 8]
mov ecx, dword [esi]
mov eax, dword [eax + 0x14]
lea edx, [eax + edi*4]
mov edi, dword [ebp - 0x10]
movzx eax, byte [edx + 0x28]
mov byte [ecx + ebx + 0x1c], al
mov ecx, dword [esi]
movzx eax, byte [edx + 0x29]
mov byte [ecx + ebx + 0x1d], al
mov ecx, dword [esi]
movzx eax, byte [edx + 0x2a]
mov edx, dword [ebp - 8]
mov byte [ecx + ebx + 0x1e], al
mov eax, dword [esi]
mov ecx, dword [ebp - 0x18]
mov esi, dword [ebp + 8]
add ecx, 8
mov dword [ebp - 0x18], ecx
mov byte [eax + ebx + 0x1f], 0xff
cmp ecx, dword [ebp - 0x1c]
jl 0x4677b0
mov ebx, dword [ebp + 0x10]
mov eax, dword [ebp - 0xc]
test eax, eax
je 0x467a53
mov eax, dword [ebp - 0x20]
mov ecx, dword [esi + 0x18]
cdq
add ecx, edi
and edx, 7
add eax, edx
mov edx, dword [ebp - 8]
sar eax, 3
mov cl, byte [ecx + eax]
mov byte [ebp - 1], cl
mov ecx, dword [esi + 0x14]
cmp dword [ecx + 8], 0
cmovge edx, dword [ebp - 0x14]
imul edx, dword [ebp + 0xc]
shl eax, 5
add edx, eax
xor eax, eax
mov dword [ebp - 0x18], eax
cmp dword [ebp - 0xc], eax
jle 0x467a4d
movzx ecx, byte [ebp - 1]
mov dword [ebp - 0x24], ecx
nop dword [eax]
mov ecx, eax
mov edi, 0x80
sar edi, cl
and edi, dword [ebp - 0x24]
mov ecx, dword [ebx]
neg edi
sbb edi, edi
and edi, 4
add edi, 0x28
add edi, dword [esi + 0x14]
lea esi, [eax*4]
add ecx, esi
movzx eax, byte [edi]
mov byte [ecx + edx], al
mov ecx, dword [ebx]
movzx eax, byte [edi + 1]
add ecx, esi
mov byte [ecx + edx + 1], al
mov ecx, dword [ebx]
movzx eax, byte [edi + 2]
add ecx, esi
mov byte [ecx + edx + 2], al
mov eax, dword [ebx]
add eax, esi
mov esi, dword [ebp + 8]
mov byte [eax + edx + 3], 0xff
mov eax, dword [ebp - 0x18]
inc eax
mov dword [ebp - 0x18], eax
cmp eax, dword [ebp - 0xc]
jl 0x4679f0
mov edi, dword [ebp - 0x10]
mov edx, dword [ebp - 8]
mov eax, dword [ebp - 0xc]
sub edi, dword [ebp - 0x28]
dec edx
inc dword [ebp - 0x14]
mov esi, dword [ebp + 8]
mov dword [ebp - 8], edx
mov dword [ebp - 0x10], edi
test edx, edx
jns 0x4677a0
pop edi
pop esi
mov al, 1
pop ebx
mov esp, ebp
pop ebp
ret 0xc