Function at 0x438c20
Capabilities:
Encode data using xor

Disassembly:
sub esp, 0x28
mov eax, dword [0x47bdb8]
mov dword [esp + 0x24], eax
cmp dword [ecx], 0
mov dword [esp], ecx
je 0x438c48
mov eax, 0xfffffffb
mov ecx, dword [esp + 0x24]
call fcn.0041723c
add esp, 0x28
ret 0xc
cmp dword [ecx + 8], 1
je 0x438c62
mov eax, 0xfffffffa
mov ecx, dword [esp + 0x24]
call fcn.0041723c
add esp, 0x28
ret 0xc
push esi
mov esi, dword [esp + 0x30]
test esi, esi
je 0x438e83
mov eax, dword [esp + 0x34]
test eax, eax
jle 0x438e83
mov edx, eax
and edx, 0x8000000f
jns 0x438c8a
dec edx
or edx, 0xfffffff0
inc edx
je 0x438ca1
mov eax, 0xfffffff9
pop esi
mov ecx, dword [esp + 0x24]
call fcn.0041723c
add esp, 0x28
ret 0xc
cdq
and edx, 0xf
add eax, edx
mov edx, dword [ecx + 4]
sar eax, 4
sub edx, 0
push ebx
push edi
mov dword [esp + 0x3c], eax
je 0x438de9
dec edx
je 0x438cd4
pop edi
pop ebx
or eax, 0xffffffff
pop esi
mov ecx, dword [esp + 0x24]
call fcn.0041723c
add esp, 0x28
ret 0xc
lea edx, [ecx + 0xc]
mov ebx, dword [edx]
mov edi, dword [edx + 4]
push ebp
mov ebp, dword [edx + 8]
mov edx, dword [edx + 0xc]
dec eax
test eax, eax
mov dword [esp + 0x20], edx
jle 0x438d6a
mov dword [esp + 0x3c], eax
lea eax, [esp + 0x24]
push eax
push esi
call fcn.00437dc0
mov eax, dword [esp + 0x24]
mov ecx, dword [esp + 0x28]
mov edx, dword [esp + 0x20]
xor ecx, edi
mov edi, dword [esp + 0x30]
xor eax, ebx
mov ebx, dword [esp + 0x2c]
xor edi, edx
xor ebx, ebp
mov edx, esi
mov dword [esp + 0x2c], ebx
mov ebx, dword [edx]
mov dword [esp + 0x30], edi
mov edi, dword [edx + 4]
mov ebp, dword [edx + 8]
mov edx, dword [edx + 0xc]
mov dword [esp + 0x20], edx
mov edx, dword [esp + 0x44]
mov dword [edx], eax
mov dword [edx + 4], ecx
mov dword [esp + 0x24], eax
mov eax, dword [esp + 0x2c]
mov dword [esp + 0x28], ecx
mov ecx, dword [esp + 0x30]
mov dword [edx + 8], eax
mov eax, dword [esp + 0x3c]
mov dword [edx + 0xc], ecx
mov ecx, edx
add ecx, 0x10
add esi, 0x10
dec eax
mov dword [esp + 0x44], ecx
mov ecx, dword [esp + 0x10]
mov dword [esp + 0x3c], eax
jne 0x438cf0
lea edx, [esp + 0x24]
push edx
push esi
call fcn.00437dc0
mov eax, dword [esp + 0x24]
mov edx, dword [esp + 0x2c]
mov ecx, dword [esp + 0x30]
mov esi, dword [esp + 0x28]
xor eax, ebx
xor edx, ebp
mov dword [esp + 0x24], eax
mov eax, dword [esp + 0x20]
xor ecx, eax
mov dword [esp + 0x2c], edx
mov edx, ecx
xor esi, edi
shr edx, 0x18
test edx, edx
mov dword [esp + 0x28], esi
mov dword [esp + 0x30], ecx
pop ebp
jle 0x438e6c
cmp edx, 0x10
jg 0x438e6c
mov ecx, 0x10
sub ecx, edx
mov eax, ecx
cmp eax, 0x10
jge 0x438de3
jmp 0x438dd0
movzx esi, byte [esp + eax + 0x20]
cmp esi, edx
jne 0x438e6c
inc eax
cmp eax, 0x10
jl 0x438dd0
mov edi, dword [esp + 0x40]
jmp 0x438e3f
mov edi, dword [esp + 0x40]
lea ebx, [eax - 1]
test ebx, ebx
jle 0x438e08
push edi
push esi
call fcn.00437dc0
mov ecx, dword [esp + 0xc]
add esi, 0x10
add edi, 0x10
dec ebx
jne 0x438df4
lea edx, [esp + 0x20]
push edx
push esi
call fcn.00437dc0
movzx edx, byte [esp + 0x2f]
test edx, edx
jle 0x438e6c
cmp edx, 0x10
jg 0x438e6c
mov ecx, 0x10
sub ecx, edx
mov eax, ecx
cmp eax, 0x10
jge 0x438e3f
nop
movzx esi, byte [esp + eax + 0x20]
cmp esi, edx
jne 0x438e6c
inc eax
cmp eax, 0x10
jl 0x438e30
mov eax, ecx
shr ecx, 2
lea esi, [esp + 0x20]
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
mov eax, dword [esp + 0x3c]
and ecx, 3
rep movsb byte es:[edi], byte [esi]
pop edi
shl eax, 4
pop ebx
sub eax, edx
pop esi
mov ecx, dword [esp + 0x24]
call fcn.0041723c
add esp, 0x28
ret 0xc
pop edi
pop ebx
mov eax, 0xfffffff9
pop esi
mov ecx, dword [esp + 0x24]
call fcn.0041723c
add esp, 0x28
ret 0xc
mov ecx, dword [esp + 0x28]
xor eax, eax
pop esi
call fcn.0041723c
add esp, 0x28
ret 0xc