Function at 0x477720
Capabilities:
Encrypt data using rc4 prga

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0x1c
mov esi, dword [ebp + 0x10]
test esi, esi
mov dword [ebp - 0x1c], esi
je 0x47784f
js 0x477965
mov eax, dword [0x59ce94]
movzx eax, byte [eax]
push 1
push esi
call sym.___rust_alloc
add esp, 8
test eax, eax
je 0x477970
xor ebx, ebx
cmp esi, 8
jb 0x477856
movaps xmm1, xmmword [0x58e210]
movdqa xmm4, xmmword [0x58e240]
xor ebx, ebx
nop word cs:[eax + eax]
nop
mov ecx, dword [ebp + 0xc]
movq xmm5, qword [ecx + ebx]
movdqa xmm6, xmm5
pand xmm6, xmmword [0x58e200]
movd ecx, xmm6
pshufd xmm6, xmm6, 0x55
movd edx, xmm6
or edx, ecx
jne 0x477856
movd ecx, xmm5
movdqa xmm7, xmm5
mov esi, ecx
shufps xmm7, xmm5, 0x55
mov edi, ecx
shr ecx, 8
shr esi, 0x10
movd edx, xmm7
movd xmm6, ecx
shr edi, 0x18
mov ecx, edx
movd xmm2, esi
mov esi, edx
movd xmm3, edi
shr edx, 8
punpcklqdq xmm6, xmm5
shr esi, 0x10
shr ecx, 0x18
movd xmm7, edx
punpcklqdq xmm3, xmm2
movd xmm2, ecx
movd xmm0, esi
shufps xmm7, xmm5, 0xd4
shufps xmm6, xmm3, 0x22
lea ecx, [ebx + 8]
punpcklqdq xmm2, xmm0
andps xmm6, xmm1
shufps xmm7, xmm2, 0x22
andps xmm7, xmm1
packuswb xmm6, xmm7
packuswb xmm6, xmm6
movdqa xmm0, xmm6
paddb xmm0, xmmword [0x58e220]
movdqa xmm2, xmm0
pmaxub xmm2, xmmword [0x58e230]
pcmpeqb xmm2, xmm0
pandn xmm2, xmm4
pxor xmm2, xmm6
movq qword [eax + ebx], xmm2
add ebx, 0x10
cmp ebx, dword [ebp + 0x10]
mov ebx, ecx
jbe 0x477780
mov ebx, ecx
jmp 0x477856
xor ebx, ebx
mov eax, 1
mov ecx, dword [ebp + 0x10]
cmp ebx, ecx
mov dword [ebp - 0x18], ecx
mov dword [ebp - 0x14], eax
mov dword [ebp - 0x10], ebx
je 0x47794b
mov eax, dword [ebp + 0xc]
add dword [ebp - 0x1c], eax
add ebx, eax
nop word cs:[eax + eax]
nop dword [eax]
movzx ecx, byte [ebx]
test cl, cl
js 0x477890
inc ebx
mov eax, ecx
jmp 0x4778e0
movzx esi, byte [ebx + 1]
mov eax, ecx
and eax, 0x1f
and esi, 0x3f
cmp cl, 0xdf
jbe 0x4778cb
movzx edx, byte [ebx + 2]
shl esi, 6
and edx, 0x3f
or edx, esi
cmp cl, 0xf0
jb 0x4778d5
movzx ecx, byte [ebx + 3]
and eax, 7
shl edx, 6
add ebx, 4
shl eax, 0x12
and ecx, 0x3f
or ecx, edx
or eax, ecx
jmp 0x4778e0
shl eax, 6
add ebx, 2
or eax, esi
jmp 0x4778e0
shl eax, 0xc
add ebx, 3
or eax, edx
nop dword [eax]
push eax
lea eax, [ebp - 0x28]
push eax
call sym.core::unicode::unicode_data::conversions::to_upper::h686c5258c6318937
add esp, 8
mov edi, dword [ebp - 0x24]
test edi, edi
je 0x477920
mov esi, dword [ebp - 0x20]
mov edx, dword [ebp - 0x28]
test esi, esi
je 0x477930
lea ecx, [ebp - 0x18]
call sym.alloc::string::String::push::hbfe57aacf2341135
lea ecx, [ebp - 0x18]
mov edx, edi
call sym.alloc::string::String::push::hbfe57aacf2341135
mov edi, esi
jmp 0x477938
mov edi, dword [ebp - 0x28]
jmp 0x477938
lea ecx, [ebp - 0x18]
call sym.alloc::string::String::push::hbfe57aacf2341135
lea ecx, [ebp - 0x18]
mov edx, edi
call sym.alloc::string::String::push::hbfe57aacf2341135
cmp ebx, dword [ebp - 0x1c]
jne 0x477880
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x10]
movsd xmm0, qword [ebp - 0x18]
mov dword [eax + 8], ecx
movsd qword [eax], xmm0
add esp, 0x1c
pop esi
pop edi
pop ebx
pop ebp
ret
xor eax, eax
push dword [ebp + 0x10]
push eax
call sym.alloc::raw_vec::handle_error::hfb8b40974975e9a6
mov eax, 1
push dword [ebp + 0x10]
push eax
call sym.alloc::raw_vec::handle_error::hfb8b40974975e9a6
mov esi, eax
mov eax, dword [ebp - 0x18]
test eax, eax
je 0x477995
push 1
push eax
push dword [ebp - 0x14]
call sym.___rust_dealloc
add esp, 0xc
push esi
call sym.__Unwind_Resume
nop dword [eax + eax]