Function at 0x420565
Capabilities:
Encode data using xor
Encrypt data using rc4 ksa

Disassembly:
push ecx
and byte [0x97800b], 0
push ebx
push ebp
push esi
push edi
push 1
xor ecx, ecx
pop eax
mov edx, eax
and dl, 0x80
neg dl
sbb dl, dl
mov bl, al
shl bl, 1
mov byte [ecx + 0x977f04], al
mov byte [eax + 0x978004], cl
movzx esi, bl
and edx, 0x1b
movzx edx, dl
xor edx, esi
movzx eax, al
xor eax, edx
inc ecx
cmp ecx, 0x100
jb 0x420576
and byte [0x978005], 0
push 1
pop eax
mov ecx, 0x977cdc
mov edx, eax
and dl, 0x80
neg dl
sbb dl, dl
mov dword [ecx], eax
shl al, 1
movzx eax, al
add ecx, 4
and edx, 0x1b
movzx edx, dl
xor eax, edx
cmp ecx, 0x977d04
jb 0x4205b7
xor ebx, ebx
test ebx, ebx
je 0x4205f3
movzx eax, byte [ebx + 0x978004]
mov ecx, 0x978003
sub ecx, eax
movzx eax, byte [ecx]
jmp 0x4205f5
xor eax, eax
xor edx, edx
mov dl, al
mov cl, dl
shl cl, 1
movzx ecx, cl
mov eax, edx
shr eax, 7
movzx eax, al
or eax, ecx
xor edx, eax
mov ecx, eax
shr ecx, 7
shl al, 1
movzx ecx, cl
movzx eax, al
or ecx, eax
xor edx, ecx
mov eax, ecx
shl cl, 1
shr eax, 7
movzx ecx, cl
movzx eax, al
or eax, ecx
xor edx, eax
mov ecx, eax
shr ecx, 7
shl al, 1
movzx ecx, cl
movzx eax, al
or ecx, eax
xor ecx, edx
xor ecx, 0x63
mov byte [ebx + 0x977e04], cl
mov byte [ecx + 0x977d04], bl
inc ebx
cmp ebx, 0x100
jb 0x4205dc
xor ebx, ebx
movzx edi, byte [ebx + 0x977e04]
mov esi, ebx
push 8
shl esi, 2
push edi
mov dword [esi + 0x974cdc], edi
call fcn.0087a35a
push 0x10
push edi
mov dword [esi + 0x9750dc], eax
call fcn.0087a35a
push 0x18
push edi
mov dword [esi + 0x9754dc], eax
call fcn.0087a35a
add esp, 0x18
test edi, edi
mov dword [esi + 0x9758dc], eax
je 0x4206bd
movzx ecx, byte [0x978006]
movzx eax, byte [edi + 0x978004]
add eax, ecx
cdq
mov ecx, 0xff
idiv ecx
movzx ecx, byte [edx + 0x977f04]
jmp 0x4206bf
xor ecx, ecx
test edi, edi
je 0x4206e4
movzx edx, byte [0x978007]
movzx eax, byte [edi + 0x978004]
add eax, edx
cdq
mov ebp, 0xff
idiv ebp
movzx eax, byte [edx + 0x977f04]
jmp 0x4206e6
xor eax, eax
shl eax, 8
or eax, edi
shl eax, 8
or eax, edi
shl eax, 8
or eax, ecx
mov edi, eax
push 8
push edi
mov dword [esi + 0x976cdc], edi
call fcn.0087a35a
push 0x10
push edi
mov dword [esi + 0x9770dc], eax
call fcn.0087a35a
push 0x18
push edi
mov dword [esi + 0x9774dc], eax
call fcn.0087a35a
movzx edi, byte [ebx + 0x977d04]
push 8
push edi
mov dword [esi + 0x9778dc], eax
mov dword [esi + 0x973cdc], edi
call fcn.0087a35a
push 0x10
push edi
mov dword [esi + 0x9740dc], eax
call fcn.0087a35a
push 0x18
push edi
mov dword [esi + 0x9744dc], eax
call fcn.0087a35a
xor ebp, ebp
add esp, 0x30
cmp edi, ebp
mov dword [esi + 0x9748dc], eax
je 0x42078c
movzx ecx, byte [0x978012]
movzx eax, byte [edi + 0x978004]
add eax, ecx
cdq
mov ecx, 0xff
idiv ecx
movzx eax, byte [edx + 0x977f04]
mov dword [esp + 0x10], eax
jmp 0x420790
mov dword [esp + 0x10], ebp
cmp edi, ebp
je 0x4207b3
movzx ecx, byte [0x97800d]
movzx eax, byte [edi + 0x978004]
add eax, ecx
cdq
mov ecx, 0xff
idiv ecx
movzx ebp, byte [edx + 0x977f04]
test edi, edi
je 0x4207d8
movzx ecx, byte [0x978011]
movzx eax, byte [edi + 0x978004]
add eax, ecx
cdq
mov ecx, 0xff
idiv ecx
movzx ecx, byte [edx + 0x977f04]
jmp 0x4207da
xor ecx, ecx
test edi, edi
je 0x4207ff
movzx eax, byte [edi + 0x978004]
movzx edx, byte [0x97800f]
add eax, edx
cdq
mov edi, 0xff
idiv edi
movzx eax, byte [edx + 0x977f04]
jmp 0x420801
xor eax, eax
shl eax, 8
or eax, ecx
shl eax, 8
or eax, ebp
shl eax, 8
or eax, dword [esp + 0x10]
push 8
mov edi, eax
push edi
mov dword [esi + 0x975cdc], edi
call fcn.0087a35a
push 0x10
push edi
mov dword [esi + 0x9760dc], eax
call fcn.0087a35a
push 0x18
push edi
mov dword [esi + 0x9764dc], eax
call fcn.0087a35a
add esp, 0x18
inc ebx
cmp ebx, 0x100
mov dword [esi + 0x9768dc], eax
jb 0x420659
pop edi
pop esi
pop ebp
mov byte [0x978104], 1
pop ebx
pop ecx
ret