Function at 0x436a60
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 0x436aaa
mov esi, dword [edi + ecx*4 - 4]
dec ecx
add eax, 0xffffffe0
test esi, esi
je 0x436a90
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 0x436feb
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 0x436c6e
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 0x436feb
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 0x436feb
cmp byte [esp], 0
jne 0x436cea
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 0x436cd0
cmp byte [esp + 3], 0
je 0x436d10
push dword [esp + 0x54]
push 0
mov esi, dword [esp + 0xac]
push esi
call sub.msvcrt.dll_memset
add esp, 0xc
jmp 0x436f10
cmp dword [esp + 0x58], 0x20
mov esi, dword [esp + 0xa4]
movdqu xmm6, xmmword [esp + 0x80]
movdqu xmm7, xmmword [esp + 0x70]
jb 0x436e37
xor ecx, ecx
mov edi, dword [esp + 0x4c]
mov ebp, dword [esp + 0xb0]
cmp ebp, edi
je 0x436e10
xor eax, eax
cmp byte [esp + 1], 0
jne 0x436d92
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 0x436d60
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 0x436e10
mov edx, eax
cmp dword [esp + 0x38], 0
je 0x436db8
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 0x436da0
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 0x436e10
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 0x436de0
mov ecx, dword [esp + 4]
nop word cs:[eax + eax]
mov eax, ebp
sub eax, ecx
jbe 0x436e37
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 0x436f10
xor edx, edx
mov edi, dword [esp + 0xb0]
mov eax, edi
cmp edi, 8
jb 0x436ecb
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 0x436e60
cmp dword [esp + 0x48], edi
je 0x436f10
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 0x436ee0
nop
mov eax, dword [esp + 0x28]
dec eax
je 0x436fe6
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 0x436f63
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 0x436f50
mov dword [esp + 0xc], edi
xor esi, esi
xor eax, eax
xor edx, edx
test ebp, ebp
je 0x436c50
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 0x436f80
jmp 0x436c50
mov eax, 0xfffffff2
add esp, 0x90
pop esi
pop edi
pop ebx
pop ebp
ret