Function at 0x438f30
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x90
mov ebp, dword [esp + 0xb0]
mov edi, dword [esp + 0xac]
mov eax, 0xffffffff
xor eax, eax
mov eax, ebp
shl eax, 5
add eax, 0x20
xor edx, edx
mov ecx, ebp
nop dword [eax + eax]
test ecx, ecx
jle 0x438f7a
mov esi, dword [edi + ecx*4 - 4]
dec ecx
add eax, 0xffffffe0
test esi, esi
je 0x438f60
bsr ecx, esi
xor ecx, 0x1f
sub eax, ecx
mov edx, eax
lea esi, [edx + 7]
mov eax, esi
and eax, 0x18
mov ecx, esi
shr ecx, 5
cmp eax, 1
sbb ecx, 0xffffffff
mov eax, ebp
sub eax, ecx
mov dword [esp + 0x24], eax
test ecx, ecx
sete byte [esp]
mov eax, dword [esp + 0xa4]
lea edi, [eax + ecx*4]
add edi, 0xfffffffc
mov dword [esp + 0x5c], edi
cmp edi, eax
setb bl
mov eax, 0xfffffffc
cmp ebp, ecx
jb 0x4394bb
mov eax, esi
shr eax, 3
lea edi, [ecx*4]
mov dword [esp + 0x68], eax
sub edi, eax
mov dword [esp + 0x20], edi
shl dword [esp + 0x24], 2
or byte [esp], bl
mov eax, esi
and eax, 0xfffffff8
sub eax, edx
mov ebx, eax
shr ebx, 5
mov dword [esp + 0x58], eax
mov edx, eax
and edx, 0x1f
mov dword [esp + 8], edx
mov eax, ebp
sub eax, ebx
mov dword [esp + 4], eax
mov eax, 0x20
sub eax, edx
mov dword [esp + 0x18], eax
mov edx, ebp
sub edx, ebx
mov dword [esp + 0x14], edx
sete al
setb byte [esp + 0xc]
neg edx
mov dword [esp + 0x3c], edx
test ebp, ebp
setne dl
cmp dword [esp + 8], 0
setne ah
and al, ah
cmp esi, 0x28
mov esi, 0xfa
mov edi, 0x1e
cmovae esi, edi
mov dword [esp + 0x28], esi
or al, byte [esp + 0xc]
mov byte [esp + 3], al
and dl, ah
mov byte [esp + 2], dl
mov dword [esp + 0x4c], ebx
lea eax, [ebx*4]
neg eax
mov ebx, dword [esp + 4]
cmp ebx, 8
setb dl
cmp eax, 0x20
setb al
or al, dl
mov byte [esp + 1], al
mov eax, dword [esp + 0xa4]
lea ecx, [eax + ecx*4]
mov dword [esp + 0x64], ecx
mov ecx, ebx
and ecx, 0xfffffff8
mov dword [esp + 0x10], ecx
mov edi, dword [esp + 0x14]
and edi, 3
mov ecx, ebp
and ecx, 0xfffffff8
mov edx, ebp
and edx, 7
mov dword [esp + 0x34], edx
mov edx, dword [esp + 8]
mov dword [esp + 0x38], edi
mov ebx, edi
neg ebx
mov dword [esp + 0x48], ecx
neg ecx
mov dword [esp + 0x44], ecx
xorps xmm6, xmm6
xorps xmm7, xmm7
movss xmm0, dword [esp + 0x18]
movss xmm7, xmm0
movd xmm0, edx
movss xmm6, xmm0
mov ecx, dword [esp + 0x20]
add ecx, eax
mov dword [esp + 0x60], ecx
lea ecx, [ebp*4]
mov dword [esp + 0x54], ecx
lea ecx, [eax + 4]
mov dword [esp + 0x50], ecx
lea ecx, [eax + 0x10]
mov dword [esp + 0x30], ecx
lea ecx, [eax + 0xc]
mov dword [esp + 0x2c], ecx
lea eax, [eax + ebp*4 - 0x10]
mov dword [esp + 0x40], eax
mov dword [esp + 0x1c], ebx
movups xmmword [esp + 0x80], xmm6
movups xmmword [esp + 0x70], xmm7
jmp 0x43913e
mov eax, dword [esp + 0x6c]
not eax
mov edx, dword [esp + 0xc]
or edx, eax
and edx, esi
xor eax, eax
xor ecx, ecx
cmp edx, ecx
mov ebx, dword [esp + 0x1c]
jne 0x4394bb
push dword [esp + 0x20]
push 0
push dword [esp + 0xac]
call sub.msvcrt.dll_memset
add esp, 0xc
push dword [esp + 0x24]
push 0
push dword [esp + 0x6c]
call sub.msvcrt.dll_memset
add esp, 0xc
push dword [esp + 0x68]
push dword [esp + 0x64]
push dword [esp + 0xc0]
call dword [esp + 0xc0]
add esp, 0xc
test eax, eax
jne 0x4394bb
cmp byte [esp], 0
jne 0x4391ba
mov eax, dword [esp + 0x50]
mov ecx, dword [esp + 0x5c]
nop word cs:[eax + eax]
mov edx, dword [eax - 4]
bswap edx
mov esi, dword [ecx]
bswap esi
mov dword [eax - 4], esi
mov dword [ecx], edx
add ecx, 0xfffffffc
lea edx, [eax + 4]
cmp eax, ecx
mov eax, edx
jbe 0x4391a0
cmp byte [esp + 3], 0
je 0x4391e0
push dword [esp + 0x54]
push 0
mov esi, dword [esp + 0xac]
push esi
call sub.msvcrt.dll_memset
add esp, 0xc
jmp 0x4393e0
cmp dword [esp + 0x58], 0x20
mov esi, dword [esp + 0xa4]
movdqu xmm6, xmmword [esp + 0x80]
movdqu xmm7, xmmword [esp + 0x70]
jb 0x439307
xor ecx, ecx
mov edi, dword [esp + 0x4c]
mov ebp, dword [esp + 0xb0]
cmp ebp, edi
je 0x4392e0
xor eax, eax
cmp byte [esp + 1], 0
jne 0x439262
mov eax, dword [esp + 0x10]
mov ecx, dword [esp + 0x30]
nop word [eax + eax]
movups xmm0, xmmword [ecx + edi*4 - 0x10]
movdqu xmm1, xmmword [ecx + edi*4]
movups xmmword [ecx - 0x10], xmm0
movdqu xmmword [ecx], xmm1
add ecx, 0x20
add eax, 0xfffffff8
jne 0x439230
mov ebx, dword [esp + 0x10]
mov eax, ebx
mov edx, dword [esp + 4]
mov ecx, edx
cmp edx, ebx
mov ebx, dword [esp + 0x1c]
je 0x4392e0
mov edx, eax
cmp dword [esp + 0x38], 0
je 0x439288
lea edx, [esi + eax*4]
xor ecx, ecx
mov esi, dword [edx + edi*4]
mov dword [edx], esi
dec ecx
add edx, 4
cmp ebx, ecx
jne 0x439270
mov edx, eax
sub edx, ecx
mov esi, dword [esp + 0xa4]
add eax, dword [esp + 0x3c]
mov ecx, dword [esp + 4]
cmp eax, 0xfffffffc
ja 0x4392e0
mov eax, dword [esp + 0x2c]
lea eax, [eax + edx*4]
mov ecx, dword [esp + 0x14]
sub ecx, edx
nop word cs:[eax + eax]
mov edx, dword [eax + edi*4 - 0xc]
mov dword [eax - 0xc], edx
mov edx, dword [eax + edi*4 - 8]
mov dword [eax - 8], edx
mov edx, dword [eax + edi*4 - 4]
mov dword [eax - 4], edx
mov edx, dword [eax + edi*4]
mov dword [eax], edx
add eax, 0x10
add ecx, 0xfffffffc
jne 0x4392b0
mov ecx, dword [esp + 4]
nop word cs:[eax + eax]
mov eax, ebp
sub eax, ecx
jbe 0x439307
lea ecx, [esi + ecx*4]
shl eax, 2
push eax
push 0
push ecx
call sub.msvcrt.dll_memset
movdqu xmm7, xmmword [esp + 0x7c]
movdqu xmm6, xmmword [esp + 0x8c]
add esp, 0xc
cmp byte [esp + 2], 0
je 0x4393e0
xor edx, edx
mov edi, dword [esp + 0xb0]
mov eax, edi
cmp edi, 8
jb 0x43939b
xorps xmm0, xmm0
xor eax, eax
mov ecx, dword [esp + 0x44]
mov edx, dword [esp + 0x40]
nop
movaps xmm3, xmm0
movdqu xmm1, xmmword [edx + eax*4 - 0x10]
movdqu xmm4, xmmword [edx + eax*4]
pshufd xmm2, xmm4, 0x1b
pshufd xmm0, xmm1, 0x1b
pslld xmm2, xmm7
pslld xmm0, xmm7
shufps xmm3, xmm2, 3
movaps xmm5, xmm2
psrld xmm4, xmm6
shufps xmm5, xmm3, 0x26
por xmm4, xmm5
movdqu xmmword [edx + eax*4], xmm4
shufps xmm2, xmm0, 3
movaps xmm3, xmm0
shufps xmm3, xmm2, 0x26
psrld xmm1, xmm6
por xmm1, xmm3
movdqu xmmword [edx + eax*4 - 0x10], xmm1
add eax, 0xfffffff8
cmp ecx, eax
jne 0x439330
cmp dword [esp + 0x48], edi
je 0x4393e0
pshufd xmm0, xmm0, 0xff
movd edx, xmm0
mov eax, dword [esp + 0x34]
mov ebp, dword [esp + 0x18]
mov ebx, dword [esp + 8]
nop word cs:[eax + eax]
mov ecx, dword [esp + 0xa4]
mov esi, dword [ecx + eax*4 - 4]
mov edi, esi
mov ecx, ebp
shl edi, cl
mov ecx, ebx
shr esi, cl
or esi, edx
mov ecx, dword [esp + 0xa4]
mov dword [ecx + eax*4 - 4], esi
mov esi, dword [esp + 0xa4]
mov edx, edi
dec eax
jne 0x4393b0
nop
mov eax, dword [esp + 0x28]
dec eax
je 0x4394b6
mov dword [esp + 0x28], eax
mov eax, dword [esi]
mov ecx, dword [esp + 0xa8]
mov ebx, eax
xor ebx, ecx
sub eax, ecx
and ecx, ebx
not ebx
and eax, ebx
or eax, ecx
sar eax, 0x1f
mov dword [esp + 0x6c], eax
xor edi, edi
mov ebp, dword [esp + 0xb0]
cmp ebp, 2
jb 0x439433
mov edx, 1
mov eax, dword [esi + edx*4]
mov ecx, eax
neg ecx
or eax, ecx
sar eax, 0x1f
or edi, eax
inc edx
cmp ebp, edx
jne 0x439420
mov dword [esp + 0xc], edi
xor esi, esi
xor eax, eax
xor edx, edx
test ebp, ebp
je 0x439120
nop word cs:[eax + eax]
mov eax, dword [esp + 0xac]
mov eax, dword [eax + ebp*4 - 4]
mov ecx, dword [esp + 0xa4]
mov ecx, dword [ecx + ebp*4 - 4]
mov ebx, eax
xor ebx, ecx
sub eax, ecx
and ecx, ebx
not ebx
and eax, ebx
or eax, ecx
sar eax, 0x1f
mov edi, eax
or edi, edx
mov eax, dword [esp + 0xa4]
mov eax, dword [eax + ebp*4 - 4]
mov ecx, dword [esp + 0xac]
mov ecx, dword [ecx + ebp*4 - 4]
mov ebx, eax
xor ebx, ecx
sub eax, ecx
and ecx, ebx
not ebx
and eax, ebx
or eax, ecx
sar eax, 0x1f
mov ecx, edi
not ecx
and ecx, eax
or esi, ecx
or edi, eax
mov edx, edi
dec ebp
jne 0x439450
jmp 0x439120
mov eax, 0xfffffff2
add esp, 0x90
pop esi
pop edi
pop ebx
pop ebp
ret