Function at 0x10053860
Capabilities:
Encrypt data using rc4 prga

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff0
sub esp, 0x30
mov ecx, dword [ebp + 8]
mov ebx, dword [ebp + 0x10]
xor esi, esi
mov edi, dword [ecx + 8]
mov eax, dword [ecx + 4]
mov ecx, 0
cmp edi, 3
jb 0x100538b8
movzx edx, byte [edi + eax - 2]
xor esi, esi
mov ecx, edx
and cl, 0xf0
cmp cl, 0xa0
mov ecx, 0
jne 0x100538b8
xor esi, esi
cmp byte [edi + eax - 3], 0xed
jne 0x100538b8
movzx esi, byte [edi + eax - 1]
and edx, 0xf
mov cl, 1
shl edx, 0x10
and esi, 0x3f
shl esi, 0xa
or esi, edx
mov edx, dword [ebp + 0xc]
cmp ebx, 3
jb 0x100538ec
cmp byte [edx], 0xed
jne 0x100538f4
movzx ebx, byte [edx + 1]
mov edx, ebx
and dl, 0xf0
cmp dl, 0xb0
setne dl
xor cl, 1
or cl, dl
jne 0x100538f4
cmp edi, 3
jae 0x10053973
mov ecx, dword [ebp + 8]
jmp 0x1005397c
test ebx, ebx
je 0x10053a2a
mov ecx, dword [ebp + 0x10]
mov esi, dword [ebp + 0xc]
add ecx, esi
jmp 0x1005391a
add esi, 2
cmp edx, ecx
cmovne edx, esi
nop word cs:[eax + eax]
cmp edx, ecx
mov esi, edx
je 0x10053a2a
movzx ebx, byte [esi]
lea edx, [esi + 1]
test bl, bl
jns 0x10053910
cmp bl, 0xe0
jb 0x100538fe
cmp bl, 0xed
jne 0x10053952
cmp edx, ecx
je 0x10053a2a
lea edx, [esi + 2]
cmp edx, ecx
je 0x10053a2a
cmp byte [esi + 1], 0x9f
ja 0x10053a23
add esi, 3
mov edx, esi
jmp 0x10053910
add esi, 2
cmp edx, ecx
cmove esi, edx
xor edx, edx
cmp esi, ecx
setne dl
add edx, esi
cmp bl, 0xf0
jb 0x10053910
xor ebx, ebx
cmp edx, ecx
setne bl
add edx, ebx
jmp 0x10053910
mov ecx, dword [ebp + 8]
add edi, 0xfffffffd
mov dword [ecx + 8], edi
mov eax, dword [ebp + 0xc]
mov edx, dword [ecx]
shl ebx, 6
movzx eax, byte [eax + 2]
mov ecx, edx
sub ecx, edi
mov dword [esp + 0x10], eax
mov eax, dword [ebp + 0x10]
inc eax
cmp ecx, eax
jb 0x10053a6d
mov dword [esp + 0xc], edx
and ebx, 0x3c0
or ebx, esi
mov esi, dword [esp + 0x10]
or esi, ebx
shl ebx, 0xa
lea edx, [esi + 0x10000]
and ebx, 0xff0000
shl esi, 0x18
mov eax, edx
shr edx, 4
shr eax, 0x12
and edx, 0xff00
or edx, eax
or ebx, edx
or esi, ebx
cmp ecx, 3
movd xmm0, esi
mov esi, dword [ebp + 8]
pand xmm0, xmmword [str._a___]
por xmm0, xmmword [0x100eecd0]
jbe 0x10053a92
mov ebx, dword [ebp + 0x10]
mov edx, dword [esp + 0xc]
mov ecx, dword [esi + 4]
mov eax, dword [ebp + 0xc]
add ebx, 0xfffffffd
movd dword [ecx + edi], xmm0
add edi, 4
add eax, 3
sub edx, edi
mov dword [esi + 8], edi
cmp edx, ebx
jb 0x10053abd
add ecx, edi
push ebx
push eax
push ecx
jmp 0x10053a3f
mov ecx, dword [ebp + 8]
mov byte [ecx + 0xc], 0
mov esi, dword [ebp + 8]
mov ebx, dword [ebp + 0x10]
mov ecx, dword [esi]
sub ecx, edi
cmp ecx, ebx
jb 0x10053a54
add eax, edi
push ebx
push dword [ebp + 0xc]
push eax
call sub.msvcrt.dll_memcpy
add esp, 0xc
add edi, ebx
mov dword [esi + 8], edi
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret
mov ecx, esi
mov edx, edi
push 1
push 1
push ebx
call sym.alloc::raw_vec::RawVecInner_LT_A_GT_::reserve::do_reserve_and_handle::h35901dc27c78f3f2
add esp, 0xc
mov eax, dword [esi + 4]
mov edi, dword [esi + 8]
jmp 0x10053a38
mov ecx, dword [ebp + 8]
mov edx, edi
push 1
push 1
push eax
call sym.alloc::raw_vec::RawVecInner_LT_A_GT_::reserve::do_reserve_and_handle::h35901dc27c78f3f2
add esp, 0xc
mov eax, dword [ebp + 8]
mov ecx, dword [eax]
mov edi, dword [eax + 8]
mov dword [esp + 0xc], ecx
sub ecx, edi
jmp 0x100539a0
mov edx, edi
mov ecx, esi
push 1
push 1
push 4
movdqa xmmword [esp + 0x1c], xmm0
call sym.alloc::raw_vec::RawVecInner_LT_A_GT_::reserve::do_reserve_and_handle::h35901dc27c78f3f2
movdqa xmm0, xmmword [esp + 0x1c]
add esp, 0xc
mov edx, dword [esi]
mov edi, dword [esi + 8]
mov ebx, dword [ebp + 0x10]
jmp 0x100539fb
mov ecx, esi
mov dword [esp + 0x10], eax
mov edx, edi
push 1
push 1
push ebx
call sym.alloc::raw_vec::RawVecInner_LT_A_GT_::reserve::do_reserve_and_handle::h35901dc27c78f3f2
mov eax, dword [esp + 0x1c]
add esp, 0xc
mov ecx, dword [esi + 4]
mov edi, dword [esi + 8]
jmp 0x10053a1c