Function at 0x446ad2
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x2c
mov eax, dword [esp + 0x40]
movzx esi, word [eax]
mov dword [esp], 0x898a2d5f
mov dword [esp + 4], 0
mov eax, dword [esp + 4]
cmp eax, 3
ja 0x446609
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov eax, dword [esp + 4]
movzx eax, byte [esp + eax]
push dword [esp + 4]
push eax
call fcn.00446c30
add esp, 8
mov ecx, dword [esp + 4]
mov byte [esp + ecx], al
inc dword [esp + 4]
mov eax, dword [esp + 4]
cmp eax, 4
jb 0x4465e0
xor ecx, ecx
cmp dword [esp], esi
setne cl
xor eax, eax
jmp dword [ecx*4 + 0x45340c]
mov eax, dword [esp + 0x40]
mov esi, dword [eax + 0x3c]
mov edi, dword [eax + esi]
mov dword [esp + 4], 0xf10ec8bc
mov dword [esp + 8], 0
mov dword [esp], 0
mov eax, dword [esp]
cmp eax, 7
ja 0x446676
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov eax, dword [esp]
movzx eax, byte [esp + eax + 4]
push dword [esp]
push eax
call fcn.00446cb0
add esp, 8
mov ecx, dword [esp]
mov byte [esp + ecx + 4], al
inc dword [esp]
mov eax, dword [esp]
cmp eax, 8
jb 0x446650
xor ecx, ecx
cmp edi, dword [esp + 4]
setne cl
xor eax, eax
jmp dword [ecx*4 + 0x453414]
mov eax, dword [esp + 0x40]
mov edi, dword [eax + esi + 0x78]
cmp dword [eax + esi + 0x7c], 0
mov esi, eax
sete al
test edi, edi
sete cl
or cl, al
movzx eax, cl
jmp dword [eax*4 + 0x45341c]
mov eax, dword [esi + edi + 0x20]
add eax, esi
mov dword [esp + 0x28], eax
mov eax, dword [esi + edi + 0x24]
add eax, esi
mov dword [esp + 0x20], eax
mov eax, dword [esi + edi + 0x1c]
add eax, esi
mov dword [esp + 0x1c], eax
mov ebp, dword [0x454df8]
xor eax, eax
test ebp, ebp
sete al
mov dword [esp + 0x14], edi
jmp dword [eax*4 + 0x453424]
mov eax, esi
mov esi, dword [0x454df4]
mov eax, dword [eax + edi + 0x18]
add eax, esi
mov ecx, 0xffffffff
cmp eax, 0x20000000
jae 0x446700
shl eax, 3
mov ecx, eax
push ecx
call fcn.0040c4d0
add esp, 4
mov ebx, eax
mov ecx, esi
and ecx, 8
mov edi, esi
or esi, 8
imul esi, ecx
xor ecx, 8
and edi, 0xfffffff7
imul edi, ecx
lea edx, [edi + esi]
lea eax, [edx + ebp]
cmp ebx, ebp
jbe 0x4467ff
cmp eax, ebx
jbe 0x4467ff
test edx, edx
je 0x44679d
lea ecx, [edi + ebp]
dec ecx
lea edx, [ebx + edi]
dec edx
neg edi
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx eax, byte [ecx + esi]
mov byte [edx + esi], al
movzx eax, byte [ecx + esi - 1]
mov byte [edx + esi - 1], al
movzx eax, byte [ecx + esi - 2]
mov byte [edx + esi - 2], al
movzx eax, byte [ecx + esi - 3]
mov byte [edx + esi - 3], al
movzx eax, byte [ecx + esi - 4]
mov byte [edx + esi - 4], al
movzx eax, byte [ecx + esi - 5]
mov byte [edx + esi - 5], al
movzx eax, byte [ecx + esi - 6]
mov byte [edx + esi - 6], al
movzx eax, byte [ecx + esi - 7]
mov byte [edx + esi - 7], al
add esi, 0xfffffff8
cmp edi, esi
jne 0x446750
xor eax, eax
test ebp, ebp
sete al
jmp dword [eax*4 + 0x45342c]
xor eax, eax
jmp 0x446bf9
mov eax, dword [esi + edi + 0x18]
mov ecx, 0xffffffff
cmp eax, 0x20000000
jae 0x4467c7
shl eax, 3
mov ecx, eax
push ecx
call fcn.0040c4d0
add esp, 4
mov dword [0x454df8], eax
xor ecx, ecx
lea eax, [esp + 8]
mov dword [esp + 0x18], eax
xor eax, eax
mov dword [esp + 0x10], 0
cmp ecx, dword [esi + edi + 0x18]
setb al
mov dword [esp + 0xc], 0
jmp dword [eax*4 + 0x453444]
mov ecx, edx
shr ecx, 2
mov edi, ebx
xchg esi, ebp
rep movsd dword es:[edi], dword [esi]
xchg esi, ebp
mov edi, ebx
add edi, edx
xor ecx, ecx
xchg esi, eax
rep movsw word es:[edi], word [esi]
xchg esi, eax
mov ebp, dword [0x454df8]
xor eax, eax
test ebp, ebp
sete al
jmp dword [eax*4 + 0x45342c]
push ebp
call fcn.0040c4e0
add esp, 4
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov dword [0x454df8], ebx
jmp dword [0x45343c]
xor edx, edx
lea eax, [esp + 8]
mov dword [esp + 0x18], eax
xor eax, eax
mov esi, dword [esp + 0x40]
mov ecx, dword [esp + 0x14]
mov dword [esp + 0x10], 0
cmp edx, dword [esi + ecx + 0x18]
setb al
mov dword [esp + 0xc], 0
jmp dword [eax*4 + 0x453444]
mov eax, dword [esp + 0x20]
mov edx, dword [esp + 0xc]
movzx eax, word [eax + edx*2]
mov ecx, dword [esp + 0x1c]
mov eax, dword [ecx + eax*4]
mov dword [0x454dfc], eax
inc edx
xor eax, eax
mov ecx, dword [esp + 0x14]
mov dword [esp + 0xc], edx
cmp edx, dword [esi + ecx + 0x18]
setb al
jmp dword [eax*4 + 0x453444]
jmp dword [0x453450]
mov dword [esp + 4], 0x121e1ca9
mov eax, dword [esp + 0x18]
mov byte [eax + 2], 0
mov word [eax], 0
mov dword [esp], 0
mov eax, dword [esp]
cmp eax, 6
ja case.0x446824.9
nop
nop
nop
nop
nop
mov eax, dword [esp]
movzx eax, byte [esp + eax + 4]
push dword [esp]
push eax
call fcn.00446d30
add esp, 8
mov ecx, dword [esp]
mov byte [esp + ecx + 4], al
inc dword [esp]
mov eax, dword [esp]
cmp eax, 7
jb 0x4468e0
jmp case.0x446824.9
mov edi, 0xb14a5e2
jmp dword [0x453454]
mov eax, dword [esp + 0x28]
mov ecx, dword [esp + 0xc]
mov edi, dword [eax + ecx*4]
add edi, esi
mov ebx, 0xffffffff
xor eax, eax
nop
mov ebp, eax
cmp byte [edi + ebx + 1], 0
lea ebx, [ebx + 1]
lea eax, [eax + 1]
jne 0x446930
mov dword [esp + 4], 0x121e1ca9
mov word [esp + 8], 0
mov byte [esp + 0xa], 0
mov dword [esp], 0
mov eax, dword [esp]
cmp eax, 6
ja 0x446996
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov eax, dword [esp]
movzx eax, byte [esp + eax + 4]
push dword [esp]
push eax
call fcn.00446d30
add esp, 8
mov ecx, dword [esp]
mov byte [esp + ecx + 4], al
inc dword [esp]
mov eax, dword [esp]
cmp eax, 7
jb 0x446970
test ebx, ebx
mov dword [esp + 0x24], edi
je 0x446910
mov ecx, dword [esp + 4]
lea eax, [ebx - 1]
cmp eax, 3
jae 0x4469c0
mov eax, 0xb14a5e2
mov edx, edi
jmp 0x4469ff
mov edx, edi
mov edi, ebp
and edi, 0xfffffffc
mov eax, 0xb14a5e2
nop
nop
nop
nop
movsx esi, byte [edx]
xor esi, eax
imul esi, ecx
movsx eax, byte [edx + 1]
xor eax, esi
imul eax, ecx
movsx esi, byte [edx + 2]
xor esi, eax
imul esi, ecx
movsx eax, byte [edx + 3]
add edx, 4
xor eax, esi
imul eax, ecx
add edi, 0xfffffffc
jne 0x4469d0
mov esi, dword [esp + 0x40]
mov edi, eax
test bl, 3
je 0x446a20
and ebp, 3
xor ebx, ebx
nop
nop
nop
nop
nop
movsx edi, byte [edx + ebx]
xor edi, eax
imul edi, ecx
inc ebx
mov eax, edi
cmp ebp, ebx
jne 0x446a10
jmp dword [0x453454]
mov eax, edi
xor eax, 0x43ac3278
xor ecx, ecx
or eax, dword [0x454dfc]
sete cl
jmp dword [ecx*4 + 0x45345c]
xor eax, eax
mov ecx, dword [esp + 0x24]
cmp byte [ecx], 0x4e
setne al
mov ecx, dword [esp + 0x10]
jmp dword [eax*4 + 0x453464]
jmp dword [0x453478]
xor eax, eax
mov edx, dword [esp + 0x24]
cmp byte [edx + 1], 0x74
setne al
jmp dword [eax*4 + 0x45347c]
mov eax, dword [esp + 0x20]
mov ecx, dword [esp + 0xc]
movzx eax, word [eax + ecx*2]
mov ecx, dword [esp + 0x1c]
mov edx, dword [ecx + eax*4]
add edx, esi
xor esi, esi
mov ebx, dword [case.0x446824.28]
xor eax, eax
cmp esi, 0x20
setb al
mov ebp, 0xffffffff
jmp dword [eax*4 + 0x453484]
movzx eax, byte [edx + esi]
xor ecx, ecx
cmp al, 0xc2
sete cl
jmp dword [ecx*4 + 0x45348c]
jmp ebx
xor ecx, ecx
cmp al, 0xc3
sete cl
jmp dword [ecx*4 + 0x4534a4]
xor ecx, ecx
cmp al, 0xb8
sete cl
jmp dword [ecx*4 + 0x4534ac]
inc esi
xor eax, eax
cmp esi, 0x20
setb al
jmp dword [eax*4 + 0x453484]
xor eax, eax
cmp ebp, 0xffffffff
setne al
mov esi, dword [esp + 0x40]
mov ecx, dword [esp + 0x10]
jmp dword [eax*4 + 0x4534b4]
mov ebp, dword [edx + esi + 1]
xor eax, eax
cmp ebp, 0xffffffff
setne al
mov esi, dword [esp + 0x40]
mov ecx, dword [esp + 0x10]
jmp dword [eax*4 + 0x4534b4]
xor eax, eax
xor ebx, ebx
cmp eax, dword [0x454df4]
setb bl
xor edx, edx
jmp dword [ebx*4 + 0x4534bc]
mov dword [ecx + edx*8 + 4], ebp
xor ecx, ecx
mov al, 1
jmp dword [ecx*4 + 0x4534cc]
inc edx
xor ebx, ebx
cmp edx, dword [0x454df4]
setb bl
jmp dword [ebx*4 + 0x4534bc]
mov ecx, dword [0x454df8]
xor ebx, ebx
cmp dword [ecx + edx*8], edi
sete bl
jmp dword [ebx*4 + 0x4534c4]
mov ecx, 1
jmp dword [ecx*4 + 0x4534cc]
and al, 1
movzx eax, al
jmp dword [eax*4 + 0x4534d4]
mov eax, dword [0x454df8]
mov ecx, dword [0x454df4]
lea edx, [ecx + 1]
mov dword [0x454df4], edx
mov dword [eax + ecx*8], edi
mov dword [eax + ecx*8 + 4], ebp
mov eax, dword [case.0x446824.15]
nop
mov cl, 1
jmp eax
mov dword [esp + 0x10], ecx
mov edi, dword [esp + 0xc]
inc edi
xor eax, eax
mov ecx, dword [esp + 0x14]
mov edx, edi
mov dword [esp + 0xc], edi
cmp edi, dword [esi + ecx + 0x18]
setb al
jmp dword [eax*4 + 0x453444]
mov eax, dword [esp + 0x10]
and al, 1
mov ecx, dword [case.0x446681.1]
nop
jmp ecx
add esp, 0x2c
pop esi
pop edi
pop ebx
pop ebp
ret