Function at 0x478048
Capabilities:
Encrypt data using rc4 ksa

Disassembly:
push ebp
mov ebp, esp
add esp, 0xffffff9c
push ebx
push esi
push edi
mov dword [ebp - 0xc], ecx
mov dword [ebp - 8], edx
mov dword [ebp - 4], eax
mov eax, dword [ebp + 0x10]
push eax
lea eax, [ebp - 0x64]
push eax
mov ecx, dword [ebp + 0x14]
mov edx, dword [ebp - 0xc]
mov eax, dword [ebp - 8]
call fcn.0047518c
mov eax, dword [ebp - 4]
cmp byte [eax + 0xf0], 0
jne 0x478718
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x50]
mov edx, dword [ebp - 4]
sub eax, dword [edx + 0x48]
je 0x478728
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x54]
mov edx, dword [ebp - 4]
sub eax, dword [edx + 0x4c]
je 0x478728
mov eax, dword [ebp + 0x14]
sub eax, dword [ebp - 8]
mov dword [ebp - 0x2c], eax
mov eax, dword [ebp + 0x10]
sub eax, dword [ebp - 0xc]
mov dword [ebp - 0x30], eax
mov eax, dword [ebp - 0x2c]
cdq
xor eax, edx
sub eax, edx
mov ecx, eax
mov eax, dword [ebp - 0x30]
cdq
xor eax, edx
sub eax, edx
cmp ecx, eax
jne 0x4780ef
mov eax, dword [ebp + 0x14]
push eax
mov eax, dword [ebp + 0x10]
push eax
mov eax, dword [ebp + 0xc]
push eax
mov al, byte [ebp + 8]
push eax
mov ecx, dword [ebp - 0xc]
mov edx, dword [ebp - 8]
mov eax, dword [ebp - 4]
call fcn.004777e0
jmp 0x478728
cmp dword [ebp - 0x2c], 0
jne 0x478152
cmp dword [ebp - 0x30], 0
jle 0x478114
mov eax, dword [ebp + 0x10]
dec eax
push eax
mov eax, dword [ebp + 0xc]
push eax
mov ecx, dword [ebp - 0xc]
mov edx, dword [ebp - 8]
mov eax, dword [ebp - 4]
call fcn.00477344
jmp 0x478131
cmp dword [ebp - 0x30], 0
jge 0x478131
mov eax, dword [ebp - 0xc]
push eax
mov eax, dword [ebp + 0xc]
push eax
mov ecx, dword [ebp + 0x10]
inc ecx
mov edx, dword [ebp - 8]
mov eax, dword [ebp - 4]
call fcn.00477344
cmp byte [ebp + 8], 0
je 0x478728
mov eax, dword [ebp + 0xc]
push eax
mov ecx, dword [ebp + 0x10]
mov edx, dword [ebp + 0x14]
mov eax, dword [ebp - 4]
call fcn.00476694
jmp 0x478728
cmp dword [ebp - 0x30], 0
jne 0x4781b5
cmp dword [ebp - 0x2c], 0
jle 0x478177
mov eax, dword [ebp + 0x14]
dec eax
push eax
mov eax, dword [ebp + 0xc]
push eax
mov ecx, dword [ebp - 0xc]
mov edx, dword [ebp - 8]
mov eax, dword [ebp - 4]
call fcn.0047711c
jmp 0x478194
cmp dword [ebp - 0x2c], 0
jge 0x478194
mov eax, dword [ebp - 8]
push eax
mov eax, dword [ebp + 0xc]
push eax
mov edx, dword [ebp + 0x14]
inc edx
mov ecx, dword [ebp - 0xc]
mov eax, dword [ebp - 4]
call fcn.0047711c
cmp byte [ebp + 8], 0
je 0x478728
mov eax, dword [ebp + 0xc]
push eax
mov ecx, dword [ebp + 0x10]
mov edx, dword [ebp + 0x14]
mov eax, dword [ebp - 4]
call fcn.00476694
jmp 0x478728
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x48]
mov dword [ebp - 0x10], eax
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x50]
dec eax
mov dword [ebp - 0x14], eax
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x4c]
mov dword [ebp - 0x18], eax
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x54]
dec eax
mov dword [ebp - 0x1c], eax
cmp dword [ebp - 0x2c], 0
jle 0x478202
mov eax, dword [ebp - 8]
cmp eax, dword [ebp - 0x14]
jg 0x478728
mov eax, dword [ebp + 0x14]
cmp eax, dword [ebp - 0x10]
jl 0x478728
mov dword [ebp - 0x24], 1
jmp 0x47823b
mov eax, dword [ebp + 0x14]
cmp eax, dword [ebp - 0x14]
jg 0x478728
mov eax, dword [ebp - 8]
cmp eax, dword [ebp - 0x10]
jl 0x478728
mov dword [ebp - 0x24], 0xffffffff
neg dword [ebp - 8]
neg dword [ebp + 0x14]
neg dword [ebp - 0x2c]
neg dword [ebp - 0x10]
neg dword [ebp - 0x14]
lea edx, [ebp - 0x14]
lea eax, [ebp - 0x10]
call fcn.0046bbd0
cmp dword [ebp - 0x30], 0
jle 0x478262
mov eax, dword [ebp - 0xc]
cmp eax, dword [ebp - 0x1c]
jg 0x478728
mov eax, dword [ebp + 0x10]
cmp eax, dword [ebp - 0x18]
jl 0x478728
mov dword [ebp - 0x28], 1
jmp 0x47829b
mov eax, dword [ebp + 0x10]
cmp eax, dword [ebp - 0x1c]
jg 0x478728
mov eax, dword [ebp - 0xc]
cmp eax, dword [ebp - 0x18]
jl 0x478728
mov dword [ebp - 0x28], 0xffffffff
neg dword [ebp - 0xc]
neg dword [ebp + 0x10]
neg dword [ebp - 0x30]
neg dword [ebp - 0x18]
neg dword [ebp - 0x1c]
lea edx, [ebp - 0x1c]
lea eax, [ebp - 0x18]
call fcn.0046bbd0
mov eax, dword [ebp - 0x2c]
cmp eax, dword [ebp - 0x30]
jge 0x4782f9
lea edx, [ebp - 0xc]
lea eax, [ebp - 8]
call fcn.0046bbd0
lea edx, [ebp + 0x10]
lea eax, [ebp + 0x14]
call fcn.0046bbd0
lea edx, [ebp - 0x30]
lea eax, [ebp - 0x2c]
call fcn.0046bbd0
lea edx, [ebp - 0x18]
lea eax, [ebp - 0x10]
call fcn.0046bbd0
lea edx, [ebp - 0x1c]
lea eax, [ebp - 0x14]
call fcn.0046bbd0
lea edx, [ebp - 0x28]
lea eax, [ebp - 0x24]
call fcn.0046bbd0
lea eax, [ebp - 0x38]
mov dword [ebp - 0x44], eax
lea eax, [ebp - 0x34]
mov dword [ebp - 0x48], eax
mov eax, dword [ebp - 0x28]
mov dword [ebp - 0x20], eax
jmp 0x478311
lea eax, [ebp - 0x34]
mov dword [ebp - 0x44], eax
lea eax, [ebp - 0x38]
mov dword [ebp - 0x48], eax
mov eax, dword [ebp - 4]
mov eax, dword [eax + 0x34]
imul dword [ebp - 0x28]
mov dword [ebp - 0x20], eax
xor eax, eax
mov dword [ebp - 0x3c], eax
mov eax, dword [ebp - 0x30]
shl eax, 0x10
cdq
idiv dword [ebp - 0x2c]
mov word [ebp - 0x4c], ax
mov word [ebp - 0x4a], 0
mov eax, dword [ebp - 8]
mov dword [ebp - 0x34], eax
mov eax, dword [ebp - 0xc]
mov dword [ebp - 0x38], eax
mov byte [ebp - 0x3d], 1
mov byte [ebp - 0x3e], 0
mov eax, dword [ebp - 4]
movzx eax, byte [eax + 0x7a]
mov edx, dword [0x50d3d0]
mov eax, dword [edx + eax*4]
mov dword [ebp - 0x54], eax
mov eax, dword [ebp - 0xc]
cmp eax, dword [ebp - 0x18]
jge 0x4784e1
mov eax, dword [ebp - 0x18]
sub eax, dword [ebp - 0xc]
mov edi, eax
shl edi, 0x10
mov eax, edi
sub eax, 0x10000
mov dword [ebp - 0x3c], eax
movzx ebx, word [ebp - 0x4c]
mov eax, edi
cdq
idiv ebx
test edx, edx
jle 0x478389
mov eax, edi
cdq
idiv ebx
inc eax
mov edi, eax
jmp 0x478390
mov eax, edi
cdq
idiv ebx
mov edi, eax
mov edx, dword [ebp + 0x14]
inc edx
mov eax, dword [ebp - 0x34]
add eax, edi
call fcn.0042e5b8
mov dword [ebp - 0x34], eax
mov eax, edi
imul word [ebp - 0x4c]
mov word [ebp - 0x4a], ax
mov eax, dword [ebp - 0x3c]
cdq
idiv ebx
test edx, edx
jle 0x4783c1
mov eax, dword [ebp - 0x3c]
cdq
idiv ebx
inc eax
mov dword [ebp - 0x3c], eax
jmp 0x4783ca
mov eax, dword [ebp - 0x3c]
cdq
idiv ebx
mov dword [ebp - 0x3c], eax
sub edi, dword [ebp - 0x3c]
mov eax, dword [ebp - 0x34]
cmp eax, dword [ebp - 0x14]
jle 0x4783e7
mov eax, dword [ebp - 0x14]
add eax, edi
cmp eax, dword [ebp - 0x34]
jl 0x478728
mov byte [ebp - 0x3e], 1
mov eax, dword [ebp - 0x34]
cmp eax, dword [ebp - 0x10]
setge al
or al, byte [ebp - 0x3e]
je 0x4784e1
mov eax, dword [ebp - 0x18]
mov dword [ebp - 0x38], eax
mov eax, dword [ebp - 0x34]
mov dword [ebp - 0x3c], eax
mov si, word [ebp - 0x4a]
sub si, word [ebp - 0x4c]
mov eax, dword [ebp - 0x34]
sub eax, edi
mov ecx, dword [ebp - 0x14]
mov edx, dword [ebp - 0x10]
call fcn.0046bc28
mov ebx, eax
cmp byte [ebp - 0x3e], 0
je 0x47843c
mov ax, word [ebp - 0x34]
sub ax, word [ebp - 0x14]
dec eax
imul word [ebp - 0x4c]
sub si, ax
mov eax, dword [ebp - 0x14]
inc eax
mov dword [ebp - 0x34], eax
cmp dword [ebp - 0x28], 0xffffffff
jne 0x478445
neg dword [ebp - 0x38]
cmp dword [ebp - 0x24], 0xffffffff
jne 0x478450
neg dword [ebp - 0x34]
neg ebx
xor eax, eax
push ebp
push 0x4784b4
push dword fs:[eax]
mov dword fs:[eax], esp
cmp ebx, dword [ebp - 0x34]
je 0x4784a1
mov eax, dword [ebp - 0x24]
neg eax
add dword [ebp - 0x34], eax
mov eax, dword [ebp - 0x48]
mov eax, dword [eax]
mov edx, dword [ebp - 4]
imul dword [edx + 0x34]
mov edx, dword [ebp - 0x44]
add eax, dword [edx]
mov edx, dword [ebp - 4]
mov edx, dword [edx + 0x40]
lea edx, [edx + eax*4]
movzx eax, si
shr eax, 8
xor ecx, ecx
mov cl, byte [eax + 0x52ed00]
mov eax, dword [ebp + 0xc]
call dword [ebp - 0x54]
sub si, word [ebp - 0x4c]
cmp ebx, dword [ebp - 0x34]
jne 0x478463
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x4784bb
call fcn.0046c514
ret
cmp byte [ebp - 0x3d], 0
je 0x47852f
mov eax, dword [ebp - 8]
cmp eax, dword [ebp - 0x10]
jge 0x47852f
mov edi, dword [ebp - 0x10]
sub edi, dword [ebp - 8]
movzx eax, word [ebp - 0x4c]
imul edi, eax
mov eax, edi
test eax, eax
jns 0x478507
add eax, 0xffff
sar eax, 0x10
add dword [ebp - 0x38], eax
mov word [ebp - 0x4a], di
mov eax, dword [ebp - 0x10]
mov dword [ebp - 0x34], eax
mov eax, dword [ebp - 0x38]
cmp eax, dword [ebp - 0x1c]
jg 0x478728
mov eax, dword [ebp - 0x38]
cmp eax, dword [ebp - 0x1c]
jne 0x47852f
mov byte [ebp - 0x3e], 1
mov ebx, dword [ebp + 0x14]
xor eax, eax
mov byte [ebp - 0x3d], 0
mov edx, dword [ebp + 0x10]
cmp edx, dword [ebp - 0x1c]
jle 0x4785aa
mov eax, dword [ebp - 0x1c]
sub eax, dword [ebp - 0xc]
mov edi, eax
shl edi, 0x10
movzx ecx, word [ebp - 0x4c]
mov eax, edi
cdq
idiv ecx
mov ebx, eax
add ebx, dword [ebp - 8]
mov eax, edi
cdq
idiv ecx
test edx, edx
jg 0x478563
dec ebx
cmp ebx, dword [ebp - 0x14]
jge 0x4785a8
add edi, 0x10000
mov dword [ebp - 0x3c], edi
mov eax, dword [ebp - 0x3c]
cdq
idiv ecx
test edx, edx
jle 0x47858a
mov eax, dword [ebp - 0x3c]
cdq
idiv ecx
add eax, dword [ebp - 8]
inc eax
mov dword [ebp - 0x3c], eax
jmp 0x478596
mov eax, dword [ebp - 0x3c]
cdq
idiv ecx
add eax, dword [ebp - 8]
mov dword [ebp - 0x3c], eax
mov eax, dword [ebp - 0x3c]
cmp eax, dword [ebp - 0x14]
jle 0x4785a4
mov eax, dword [ebp - 0x14]
mov dword [ebp - 0x3c], eax
mov byte [ebp - 0x3d], 1
mov al, 1
cmp ebx, dword [ebp - 0x14]
jle 0x4785b4
mov ebx, dword [ebp - 0x14]
mov al, 1
inc ebx
cmp dword [ebp - 0x28], 0xffffffff
jne 0x4785be
neg dword [ebp - 0x38]
cmp dword [ebp - 0x24], 0xffffffff
jne 0x4785cc
neg dword [ebp - 0x34]
neg ebx
neg dword [ebp - 0x3c]
cmp byte [ebp - 0x3e], 0
jne 0x478699
xor edx, edx
push ebp
push 0x478692
push dword fs:[edx]
mov dword fs:[edx], esp
or al, byte [ebp + 8]
jne 0x4785fd
cmp byte [ebp - 0x3d], 0
jne 0x4785fd
cmp ebx, dword [ebp - 0x34]
jle 0x4785f7
dec ebx
jmp 0x4785fd
cmp ebx, dword [ebp - 0x34]
jge 0x4785fd
inc ebx
cmp ebx, dword [ebp - 0x34]
je 0x47867f
movzx eax, word [ebp - 0x4a]
shr eax, 8
mov byte [ebp - 0x4d], al
mov eax, dword [ebp - 0x48]
mov eax, dword [eax]
mov edx, dword [ebp - 4]
imul dword [edx + 0x34]
mov edx, dword [ebp - 0x44]
add eax, dword [edx]
mov edx, dword [ebp - 4]
mov edx, dword [edx + 0x40]
lea esi, [edx + eax*4]
mov al, byte [ebp - 0x4d]
xor al, 0xff
and eax, 0xff
xor ecx, ecx
mov cl, byte [eax + 0x52ed00]
mov edx, esi
mov eax, dword [ebp + 0xc]
call dword [ebp - 0x54]
mov eax, dword [ebp - 0x20]
shl eax, 2
add esi, eax
xor eax, eax
mov al, byte [ebp - 0x4d]
xor ecx, ecx
mov cl, byte [eax + 0x52ed00]
mov edx, esi
mov eax, dword [ebp + 0xc]
call dword [ebp - 0x54]
mov ax, word [ebp - 0x4a]
mov dx, word [ebp - 0x4c]
add word [ebp - 0x4a], dx
cmp ax, word [ebp - 0x4a]
jb 0x478674
mov eax, dword [ebp - 0x28]
add dword [ebp - 0x38], eax
mov eax, dword [ebp - 0x24]
add dword [ebp - 0x34], eax
cmp ebx, dword [ebp - 0x34]
jne 0x478602
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x478699
call fcn.0046c514
ret
cmp byte [ebp - 0x3d], 0
je 0x478718
xor eax, eax
push ebp
push 0x478711
push dword fs:[eax]
mov dword fs:[eax], esp
mov eax, dword [ebp - 0x34]
cmp eax, dword [ebp - 0x3c]
je 0x4786fe
mov eax, dword [ebp - 0x48]
mov eax, dword [eax]
mov edx, dword [ebp - 4]
imul dword [edx + 0x34]
mov edx, dword [ebp - 0x44]
add eax, dword [edx]
mov edx, dword [ebp - 4]
mov edx, dword [edx + 0x40]
lea edx, [edx + eax*4]
movzx eax, word [ebp - 0x4a]
shr eax, 8
xor eax, 0xff
xor ecx, ecx
mov cl, byte [eax + 0x52ed00]
mov eax, dword [ebp + 0xc]
call dword [ebp - 0x54]
mov ax, word [ebp - 0x4c]
add word [ebp - 0x4a], ax
mov eax, dword [ebp - 0x24]
add dword [ebp - 0x34], eax
mov eax, dword [ebp - 0x34]
cmp eax, dword [ebp - 0x3c]
jne 0x4786b5
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x478718
call fcn.0046c514
ret
lea edx, [ebp - 0x64]
mov ecx, 0x40000002
mov eax, dword [ebp - 4]
mov ebx, dword [eax]
call dword [ebx + 0x44]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x10