Function at 0x420730
Capabilities:
Encrypt data using rc4 prga

Disassembly:
sub esp, 0x34
push ebx
push ebp
push esi
mov esi, dword [esp + 0x44]
push edi
mov dword [esp + 0x40], 8
mov eax, dword [esi + 0x1c]
mov edx, dword [esi + 0x38]
mov ebp, dword [esi + 0x20]
mov ebx, dword [esi + 0x28]
mov edi, dword [esi + 0x2c]
mov dword [esp + 0x14], eax
mov eax, dword [esi + 0x24]
mov dword [esp + 0x1c], eax
mov eax, dword [esi + 0x3c]
mov dword [esp + 0x24], eax
mov dword [esp + 0x10], edx
mov edx, dword [esp + 0x14]
mov eax, edx
and eax, 0x7fff
mov dword [esp + 0x20], ebp
mov dword [esp + 0x18], ebx
mov dword [esp + 0x28], edi
mov dword [esp + 0x2c], eax
mov ecx, dword [esi + 0x88]
test ecx, ecx
jne 0x4207a1
cmp dword [esi + 0x80], ecx
je 0x420867
test ebp, ebp
je 0x420867
lea ebx, [edx + ebp]
mov eax, 0x1000
sub eax, ebp
and ebx, 0x7fff
cmp ecx, eax
mov ebp, ecx
cmovae ebp, eax
add dword [esp + 0x20], ebp
sub ecx, ebp
mov dword [esi + 0x88], ecx
test ebp, ebp
je 0x42083a
nop dword [eax + eax]
mov edi, 0x8000
lea eax, [ebx + 0x90]
sub edi, ebx
cmp edi, ebp
cmovae edi, ebp
add eax, esi
push edi
push dword [esi + 0x84]
push eax
call sub.msvcrt.dll_memcpy
add esp, 0xc
cmp ebx, 0x101
jae 0x420820
mov eax, 0x101
sub eax, ebx
cmp edi, eax
cmovb eax, edi
push eax
push dword [esi + 0x84]
lea eax, [esi + 0x8090]
add eax, ebx
push eax
call sub.msvcrt.dll_memcpy
add esp, 0xc
add dword [esi + 0x84], edi
add ebx, edi
and ebx, 0x7fff
sub ebp, edi
jne 0x4207d0
mov edi, dword [esp + 0x28]
mov edx, dword [esp + 0x14]
mov ebp, dword [esp + 0x20]
mov eax, 0x8000
sub eax, ebp
cmp eax, dword [esp + 0x1c]
cmovae eax, dword [esp + 0x1c]
cmp dword [esi + 0x80], 0
mov dword [esp + 0x1c], eax
jne 0x420895
cmp ebp, 0x1000
jae 0x4208a2
mov ebx, dword [esp + 0x18]
mov eax, dword [esp + 0x1c]
mov dword [esi + 0x24], eax
mov eax, dword [esp + 0x24]
mov dword [esi + 0x3c], eax
mov eax, dword [esp + 0x10]
mov dword [esi + 0x2c], edi
pop edi
mov dword [esi + 0x20], ebp
mov dword [esi + 0x28], ebx
mov dword [esi + 0x38], eax
mov eax, 1
mov dword [esi + 0x1c], edx
pop esi
pop ebp
pop ebx
add esp, 0x34
ret
mov dword [esp + 0x1c], eax
cmp ebp, 4
jb 0x420b23
mov dword [esp + 0x1c], eax
nop word [eax + eax]
mov eax, dword [esp + 0x2c]
mov ebx, 1
add eax, 0x90
add eax, esi
mov dword [esp + 0x3c], eax
mov eax, dword [eax]
and eax, 0xffffff
mov ecx, eax
mov dword [esp + 0x38], eax
shr ecx, 0x11
xor ecx, eax
mov eax, dword [esp + 0x14]
and ecx, 0xfff
movzx eax, ax
movzx edx, word [esi + ecx*2 + 0x29272]
mov word [esi + ecx*2 + 0x29272], ax
sub eax, edx
movzx ebp, ax
mov dword [esp + 0x30], ebp
cmp ebp, dword [esp + 0x1c]
ja 0x420a38
and edx, 0x7fff
lea edi, [edx + 0x90]
add edi, esi
mov eax, dword [edi]
and eax, 0xffffff
cmp eax, dword [esp + 0x38]
jne 0x420a38
mov eax, dword [esp + 0x3c]
lea esi, [ebx + 0x1f]
nop dword [eax]
movzx ebx, word [eax + 2]
add eax, 2
movzx edx, word [edi + 2]
cmp bx, dx
jne 0x420991
movzx edx, word [eax + 2]
add eax, 2
movzx ecx, word [edi + 4]
mov bl, dl
mov byte [esp + 0x34], cl
cmp dx, cx
jne 0x42098d
movzx edx, word [eax + 2]
add eax, 2
movzx ecx, word [edi + 6]
mov bl, dl
mov byte [esp + 0x34], cl
cmp dx, cx
jne 0x42098d
movzx ecx, word [eax + 2]
add edi, 8
add eax, 2
mov bl, cl
movzx ebp, word [edi]
movzx edx, word [edi]
cmp cx, bp
jne 0x420991
movzx edx, word [edi]
sub esi, 1
jne 0x420930
jmp 0x420991
mov edx, dword [esp + 0x34]
sub eax, dword [esp + 0x3c]
xor ecx, ecx
sar eax, 1
cmp bl, dl
sete cl
test esi, esi
mov esi, dword [esp + 0x48]
lea eax, [ecx + eax*2]
mov ecx, dword [esp + 0x30]
jne 0x4209b8
mov eax, ecx
neg eax
sbb eax, eax
and eax, 0x102
cmp eax, 3
jb 0x420a33
jne 0x4209c7
cmp ecx, 0x2000
jae 0x420a33
mov ebx, dword [esp + 0x20]
cmp eax, ebx
mov edx, dword [esp + 0x18]
mov edi, dword [esp + 0x28]
cmovb ebx, eax
dec ecx
mov dword [esp + 0x30], ecx
mov word [edx + 1], cx
and ecx, 0x1ff
lea eax, [ebx - 3]
mov byte [edx], al
mov al, byte [edi]
movzx ecx, byte [ecx + 0x433a00]
shr al, 1
or al, 0x80
mov byte [edi], al
mov eax, dword [esp + 0x30]
shr eax, 8
cmp dword [esp + 0x30], 0x200
movzx eax, byte [eax + 0x433e00]
cmovb eax, ecx
inc word [esi + eax*2 + 0x83d2]
movzx eax, word [ebx*2 + 0x4336fa]
inc word [esi + eax*2 + 0x8192]
mov eax, 3
jmp 0x420a55
mov ebx, 1
mov edx, dword [esp + 0x18]
mov eax, dword [esp + 0x38]
mov edi, dword [esp + 0x28]
mov byte [edx], al
movzx eax, al
shr byte [edi], 1
inc word [esi + eax*2 + 0x8192]
mov eax, ebx
add edx, eax
mov ebp, 8
mov eax, dword [esp + 0x10]
sub eax, 1
mov ecx, eax
cmove eax, ebp
test ecx, ecx
mov dword [esp + 0x10], eax
lea ebp, [edx + 1]
cmovne ebp, edx
mov eax, edx
mov edx, dword [esp + 0x24]
cmovne eax, edi
add dword [esp + 0x14], ebx
mov edi, eax
mov eax, dword [esp + 0x1c]
add edx, ebx
add eax, ebx
mov dword [esp + 0x28], edi
mov ecx, 0x8000
mov dword [esp + 0x18], ebp
cmp eax, ecx
mov dword [esp + 0x24], edx
cmovb ecx, eax
mov eax, dword [esp + 0x2c]
add eax, ebx
mov dword [esp + 0x1c], ecx
and eax, 0x7fff
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0x20]
sub eax, ebx
lea ebx, [esi + 0x1926a]
mov dword [esp + 0x20], eax
cmp ebp, ebx
jbe 0x420b16
mov ebx, dword [esp + 0x14]
mov dword [esi + 0x20], eax
mov eax, dword [esp + 0x10]
push 0
push esi
mov dword [esi + 0x1c], ebx
mov dword [esi + 0x24], ecx
mov dword [esi + 0x3c], edx
mov dword [esi + 0x28], ebp
mov dword [esi + 0x2c], edi
mov dword [esi + 0x38], eax
call fcn.004217b0
mov ecx, eax
add esp, 8
test ecx, ecx
jne 0x420c2a
mov eax, dword [esi + 0x3c]
mov edi, dword [esi + 0x2c]
mov dword [esp + 0x24], eax
mov eax, dword [esi + 0x28]
mov dword [esp + 0x18], eax
mov eax, dword [esi + 0x38]
mov dword [esp + 0x28], edi
mov dword [esp + 0x10], eax
mov ebp, dword [esp + 0x20]
cmp ebp, 4
jae 0x4208b0
mov ebx, dword [esp + 0x18]
mov edx, dword [esp + 0x14]
test ebp, ebp
je 0x420783
mov ecx, dword [esp + 0x10]
mov eax, dword [esp + 0x24]
nop dword [eax + eax]
mov edx, dword [esp + 0x2c]
inc eax
mov dword [esp + 0x24], eax
lea eax, [ebx + 1]
mov dl, byte [edx + esi + 0x90]
mov byte [ebx], dl
shr byte [edi], 1
sub ecx, 1
mov ebp, ecx
mov dword [esp + 0x10], ecx
cmove ebp, dword [esp + 0x40]
test ecx, ecx
mov dword [esp + 0x10], ebp
cmovne eax, edi
mov ebp, dword [esp + 0x20]
mov edi, eax
neg ecx
movzx eax, dl
mov edx, dword [esp + 0x14]
sbb ecx, ecx
add ecx, 2
mov dword [esp + 0x28], edi
add ebx, ecx
inc edx
inc word [esi + eax*2 + 0x8192]
mov ecx, 0x8000
mov eax, dword [esp + 0x1c]
inc eax
mov dword [esp + 0x18], ebx
cmp eax, ecx
mov dword [esp + 0x14], edx
cmovb ecx, eax
mov eax, dword [esp + 0x2c]
inc eax
mov dword [esp + 0x1c], ecx
and eax, 0x7fff
dec ebp
mov dword [esp + 0x2c], eax
lea eax, [esi + 0x1926a]
cmp ebx, eax
mov dword [esp + 0x20], ebp
mov eax, dword [esp + 0x24]
jbe 0x420c19
mov dword [esi + 0x3c], eax
mov eax, dword [esp + 0x10]
push 0
push esi
mov dword [esi + 0x1c], edx
mov dword [esi + 0x20], ebp
mov dword [esi + 0x24], ecx
mov dword [esi + 0x28], ebx
mov dword [esi + 0x2c], edi
mov dword [esi + 0x38], eax
call fcn.004217b0
mov ecx, eax
add esp, 8
test ecx, ecx
jne 0x420c2a
mov eax, dword [esi + 0x3c]
mov ebx, dword [esi + 0x28]
mov edi, dword [esi + 0x2c]
mov ecx, dword [esi + 0x38]
mov edx, dword [esp + 0x14]
mov dword [esp + 0x24], eax
mov dword [esp + 0x18], ebx
mov dword [esp + 0x28], edi
mov dword [esp + 0x10], ecx
jmp 0x420c1d
mov ecx, dword [esp + 0x10]
test ebp, ebp
jne 0x420b40
jmp 0x420783
pop edi
xor eax, eax
test ecx, ecx
pop esi
pop ebp
setns al
pop ebx
add esp, 0x34
ret