Function at 0x405620
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x94
lea edi, [ecx + 3]
mov ebx, ecx
and edi, 0xfffffffc
mov ecx, edi
sub ecx, ebx
cmp ecx, edx
jbe 0x4056d5
movdqa xmm2, xmmword [0x424230]
movdqa xmm3, xmmword [0x424240]
mov esi, edx
lea eax, [ebx + 4]
pxor xmm0, xmm0
pxor xmm1, xmm1
and esi, 0xfffffff8
mov edi, esi
movd xmm5, dword [eax - 4]
movd xmm4, dword [eax]
add eax, 8
add edi, 0xfffffff8
pcmpgtb xmm5, xmm2
pcmpgtb xmm4, xmm2
punpcklbw xmm5, xmm5
punpcklwd xmm5, xmm5
pand xmm5, xmm3
paddd xmm0, xmm5
punpcklbw xmm4, xmm4
punpcklwd xmm4, xmm4
pand xmm4, xmm3
paddd xmm1, xmm4
jne 0x405660
paddd xmm1, xmm0
cmp esi, edx
pshufd xmm0, xmm1, 0xee
paddd xmm0, xmm1
pshufd xmm1, xmm0, 0x55
paddd xmm1, xmm0
movd eax, xmm1
je 0x405bfb
add ebx, esi
sub edx, esi
nop
xor ecx, ecx
cmp byte [ebx], 0xc0
lea ebx, [ebx + 1]
setge cl
add eax, ecx
dec edx
jne 0x4056c0
jmp 0x405bfb
cmp ecx, 4
ja 0x40563e
mov esi, edx
sub esi, ecx
cmp esi, 4
jb 0x40563e
mov dword [esp], esi
and esi, 3
xor ebp, ebp
test ecx, ecx
mov edx, 0
mov dword [esp + 0x14], ecx
je 0x405720
mov ecx, ebx
xor edx, edx
sub ecx, edi
mov edi, ebx
nop dword [eax + eax]
xor eax, eax
cmp byte [edi], 0xc0
lea edi, [edi + 1]
setge al
add edx, eax
inc ecx
jne 0x405710
add ebx, dword [esp + 0x14]
test esi, esi
je 0x405750
mov ecx, dword [esp]
xor ebp, ebp
and ecx, 0xfffffffc
add ecx, ebx
nop word cs:[eax + eax]
nop dword [eax]
xor eax, eax
cmp byte [ecx], 0xc0
lea ecx, [ecx + 1]
setge al
add ebp, eax
dec esi
jne 0x405740
add ebp, edx
mov edx, dword [esp]
movdqa xmm7, xmmword [0x424220]
shr edx, 2
jmp 0x4057ad
xor edx, edx
mov ecx, edx
shr edx, 8
mov edi, dword [esp + 0x10]
and ecx, 0xff00ff
and edx, 0xff00ff
add edx, ecx
mov ecx, dword [esp + 4]
mov ebp, edx
shl ebp, 0x10
add ebp, edx
mov edx, dword [esp]
shr ebp, 0x10
add ebp, eax
mov eax, dword [esp + 0xc]
sub edx, ecx
test edi, edi
lea ebx, [eax + ecx*4]
jne 0x405af7
mov eax, ebp
test edx, edx
je 0x405bfb
cmp edx, 0xc0
mov ebp, 0xc0
mov dword [esp], edx
mov dword [esp + 0xc], ebx
cmovb ebp, edx
mov esi, ebp
mov dword [esp + 4], ebp
shr ebp, 2
mov ecx, ebp
and esi, 3
shl ecx, 4
mov dword [esp + 0x10], esi
je 0x405770
dec ebp
and ebp, 0xfffffff
cmp ebp, 7
jae 0x405800
xor edx, edx
mov edi, ebx
jmp 0x405a80
inc ebp
xorps xmm6, xmm6
xorps xmm5, xmm5
mov edi, ebp
and edi, 0xfffffff8
lea edx, [edi*4]
mov esi, edi
mov dword [esp + 8], edx
lea edx, [ebx + 0x40]
nop dword [eax]
movdqu xmm1, xmmword [edx - 0x20]
movups xmmword [esp + 0x84], xmm6
movdqu xmm2, xmmword [edx - 0x10]
movdqu xmm6, xmmword [edx - 0x40]
movdqu xmm3, xmmword [edx - 0x30]
movups xmmword [esp + 0x74], xmm5
movdqu xmm5, xmmword [edx]
movdqu xmm4, xmmword [edx + 0x10]
movdqa xmm0, xmm1
movdqu xmmword [esp + 0x24], xmm2
movdqu xmmword [esp + 0x64], xmm3
movdqu xmmword [esp + 0x44], xmm4
punpckldq xmm0, xmm2
movdqa xmm2, xmm6
punpckldq xmm2, xmm3
movdqa xmm3, xmm2
punpckhqdq xmm2, xmm0
punpcklqdq xmm3, xmm0
movdqu xmm0, xmmword [edx + 0x20]
movdqu xmmword [esp + 0x14], xmm3
movdqu xmm3, xmmword [edx + 0x30]
sub edx, 0xffffff80
add edi, 0xfffffff8
movdqa xmm7, xmm0
movdqu xmmword [esp + 0x54], xmm3
punpckldq xmm7, xmm3
movdqa xmm3, xmm5
punpckldq xmm3, xmm4
movdqa xmm4, xmm3
punpckhqdq xmm3, xmm7
punpcklqdq xmm4, xmm7
pcmpeqd xmm7, xmm7
movdqu xmmword [esp + 0x34], xmm4
movdqu xmm4, xmmword [esp + 0x24]
punpckhdq xmm1, xmm4
movdqu xmm4, xmmword [esp + 0x64]
punpckhdq xmm6, xmm4
movdqu xmm4, xmmword [esp + 0x54]
punpckhdq xmm0, xmm4
movdqu xmm4, xmmword [esp + 0x44]
punpckhdq xmm5, xmm4
movdqa xmm4, xmm6
punpckhqdq xmm6, xmm1
punpcklqdq xmm4, xmm1
movdqa xmm1, xmm5
punpckhqdq xmm5, xmm0
punpcklqdq xmm1, xmm0
movdqu xmm0, xmmword [esp + 0x14]
movdqu xmmword [esp + 0x24], xmm1
movdqa xmm1, xmm0
psrld xmm0, 6
pxor xmm1, xmm7
pcmpeqd xmm7, xmm7
psrld xmm1, 7
por xmm0, xmm1
movdqu xmm1, xmmword [esp + 0x34]
movdqu xmmword [esp + 0x14], xmm0
movdqa xmm0, xmm1
psrld xmm1, 6
pxor xmm0, xmm7
movdqu xmm7, xmmword [esp + 0x24]
psrld xmm0, 7
por xmm1, xmm0
movdqa xmm0, xmm2
psrld xmm2, 6
movdqu xmmword [esp + 0x34], xmm1
pcmpeqd xmm1, xmm1
pxor xmm0, xmm1
psrld xmm0, 7
por xmm2, xmm0
movdqa xmm0, xmm3
psrld xmm3, 6
pxor xmm0, xmm1
movdqa xmm1, xmmword [0x424220]
psrld xmm0, 7
por xmm3, xmm0
movdqu xmm0, xmmword [esp + 0x84]
pand xmm2, xmm1
pand xmm3, xmm1
pcmpeqd xmm1, xmm1
paddd xmm2, xmm0
movdqu xmm0, xmmword [esp + 0x74]
paddd xmm3, xmm0
movdqa xmm0, xmm4
psrld xmm4, 6
pxor xmm0, xmm1
psrld xmm0, 7
por xmm4, xmm0
movdqa xmm0, xmm7
psrld xmm7, 6
pxor xmm0, xmm1
pcmpeqd xmm1, xmm1
psrld xmm0, 7
por xmm7, xmm0
movdqa xmm0, xmmword [0x424220]
pand xmm4, xmm0
pand xmm7, xmm0
paddd xmm4, xmm2
movdqa xmm2, xmm0
movdqa xmm0, xmm6
psrld xmm6, 6
paddd xmm7, xmm3
movdqu xmm3, xmmword [esp + 0x14]
pxor xmm0, xmm1
psrld xmm0, 7
por xmm6, xmm0
movdqa xmm0, xmm5
psrld xmm5, 6
pxor xmm0, xmm1
movdqu xmm1, xmmword [esp + 0x34]
pand xmm6, xmm2
pand xmm3, xmm2
psrld xmm0, 7
paddd xmm6, xmm4
por xmm5, xmm0
paddd xmm6, xmm3
pand xmm5, xmm2
paddd xmm5, xmm7
pand xmm1, xmm2
paddd xmm5, xmm1
jne 0x405820
paddd xmm5, xmm6
movdqa xmm7, xmm2
cmp ebp, esi
pshufd xmm0, xmm5, 0xee
paddd xmm0, xmm5
pshufd xmm1, xmm0, 0x55
paddd xmm1, xmm0
movd edx, xmm1
je 0x405772
mov esi, dword [esp + 8]
lea edi, [ebx + esi*4]
add ecx, ebx
nop word cs:[eax + eax]
nop dword [eax]
mov ebx, dword [edi]
mov ebp, dword [edi + 4]
mov esi, ebx
shr ebx, 6
not esi
shr esi, 7
or ebx, esi
and ebx, 0x1010101
add ebx, edx
mov edx, ebp
shr ebp, 6
not edx
shr edx, 7
or ebp, edx
and ebp, 0x1010101
add ebp, ebx
mov ebx, dword [edi + 8]
mov edx, ebx
shr ebx, 6
not edx
shr edx, 7
or ebx, edx
mov edx, dword [edi + 0xc]
add edi, 0x10
and ebx, 0x1010101
add ebx, ebp
mov esi, edx
shr edx, 6
not esi
shr esi, 7
or edx, esi
and edx, 0x1010101
add edx, ebx
cmp edi, ecx
jne 0x405a90
jmp 0x405772
and ecx, 0xfc
xor esi, esi
lea ebx, [eax + ecx*4]
mov dword [esp + 4], ecx
lea ecx, [edi - 1]
and ecx, 0x3fffffff
mov edx, ebx
cmp ecx, 6
jbe 0x405bb4
mov esi, eax
mov eax, edi
mov edi, dword [esp + 4]
inc ecx
pxor xmm0, xmm0
pcmpeqd xmm2, xmm2
pxor xmm1, xmm1
mov edx, ecx
and edx, 0xfffffff8
lea esi, [esi + edi*4 + 0x10]
mov edi, edx
nop word [eax + eax]
movdqu xmm4, xmmword [esi - 0x10]
movdqu xmm3, xmmword [esi]
add esi, 0x20
add edi, 0xfffffff8
movdqa xmm5, xmm4
movdqa xmm6, xmm3
psrld xmm4, 6
psrld xmm3, 6
pxor xmm5, xmm2
pxor xmm6, xmm2
psrld xmm5, 7
psrld xmm6, 7
por xmm4, xmm5
por xmm3, xmm6
movdqa xmm5, xmm7
pand xmm4, xmm7
pand xmm3, xmm7
paddd xmm0, xmm4
paddd xmm1, xmm3
jne 0x405b40
paddd xmm1, xmm0
cmp ecx, edx
pshufd xmm0, xmm1, 0xee
paddd xmm0, xmm1
pshufd xmm1, xmm0, 0x55
paddd xmm1, xmm0
movd esi, xmm1
je 0x405bdd
lea edx, [ebx + edx*4]
mov edi, eax
lea eax, [ebx + edi*4]
nop word [eax + eax]
mov ecx, dword [edx]
add edx, 4
mov edi, ecx
shr ecx, 6
not edi
shr edi, 7
or ecx, edi
and ecx, 0x1010101
add esi, ecx
cmp edx, eax
jne 0x405bc0
mov eax, esi
shr esi, 8
and eax, 0xff00ff
and esi, 0xff00ff
add esi, eax
mov eax, esi
shl eax, 0x10
add eax, esi
shr eax, 0x10
add eax, ebp
add esp, 0x94
pop esi
pop edi
pop ebx
pop ebp
ret