Function at 0x406a60
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x14
mov ebp, dword [esp + 0x28]
mov dword [esp], ecx
add dword [ecx + 0x38], ebp
mov eax, dword [ecx + 0x3c]
test eax, eax
je 0x406aa9
mov esi, 8
mov dword [esp + 8], eax
sub esi, eax
cmp ebp, esi
mov ecx, esi
cmovb ecx, ebp
cmp ecx, 3
mov dword [esp + 0xc], ecx
jbe 0x406ab0
mov ecx, dword [edx]
xor edi, edi
mov ebx, 4
mov eax, ebx
or eax, 1
cmp eax, dword [esp + 0xc]
jb 0x406ac1
jmp 0x406afa
xor esi, esi
jmp 0x406c57
xor ecx, ecx
xor edi, edi
xor ebx, ebx
mov eax, ebx
or eax, 1
cmp eax, dword [esp + 0xc]
jae 0x406afa
movzx eax, word [edx + ebx]
mov dword [esp + 0x10], ecx
mov dword [esp + 4], edi
lea ecx, [ebx*8]
xor edi, edi
shld edi, eax, cl
shl eax, cl
test cl, 0x20
mov ecx, 0
cmovne edi, eax
cmovne eax, ecx
mov ecx, dword [esp + 0x10]
or ebx, 2
or dword [esp + 4], edi
mov edi, dword [esp + 4]
or ecx, eax
cmp ebx, dword [esp + 0xc]
jae 0x406b40
mov dword [esp + 4], edi
movzx edi, byte [edx + ebx]
shl ebx, 3
mov eax, ecx
mov dword [esp + 0xc], 0
mov ecx, ebx
shld dword [esp + 0xc], edi, cl
shl edi, cl
test bl, 0x20
mov ecx, 0
mov ebx, dword [esp + 0xc]
cmovne ebx, edi
cmovne edi, ecx
or dword [esp + 4], ebx
or eax, edi
mov ebx, dword [esp + 8]
mov edi, dword [esp + 4]
jmp 0x406b46
mov ebx, dword [esp + 8]
mov eax, ecx
lea ecx, [ebx*8]
xor ebx, ebx
shld edi, eax, cl
shl eax, cl
test cl, 0x20
mov ecx, dword [esp + 8]
cmovne edi, eax
cmove ebx, eax
mov eax, dword [esp]
or edi, dword [eax + 0x34]
or ebx, dword [eax + 0x30]
cmp esi, ebp
mov dword [eax + 0x30], ebx
mov dword [eax + 0x34], edi
jbe 0x406b7f
add ecx, ebp
mov dword [esp + 8], ecx
jmp 0x406e13
mov eax, dword [eax + 0x1c]
mov ecx, dword [esp]
xor eax, edi
mov ecx, dword [ecx + 0x18]
movd xmm2, eax
mov eax, dword [esp]
xor ecx, ebx
movdqu xmm1, xmmword [eax]
mov eax, dword [esp]
movd xmm0, ecx
punpcklqdq xmm2, xmm0
movdqu xmm0, xmmword [eax + 0x10]
mov eax, dword [esp]
movdqa xmm3, xmm0
movdqa xmm4, xmm0
psllq xmm0, 0xd
shufps xmm3, xmm2, 0x24
psrlq xmm4, 0x33
movaps xmm2, xmm3
paddq xmm1, xmm3
psllq xmm3, 0x10
psrlq xmm2, 0x30
shufps xmm0, xmm3, 0xe4
shufps xmm4, xmm2, 0xe4
orps xmm0, xmm4
pxor xmm0, xmm1
pshufd xmm1, xmm1, 0x1e
movdqa xmm2, xmm0
movdqa xmm3, xmm0
movdqa xmm4, xmm0
paddq xmm1, xmm0
psllq xmm0, 0x15
psllq xmm4, 0x11
psrlq xmm2, 0x2f
psrlq xmm3, 0x2b
movsd xmm3, xmm2
movsd xmm0, xmm4
orpd xmm0, xmm3
xorpd xmm0, xmm1
movupd xmmword [eax + 0x10], xmm0
mov eax, dword [esp]
pshufd xmm0, xmm1, 0x55
movd dword [eax + 0xc], xmm1
mov eax, dword [esp]
movd dword [eax + 8], xmm0
pshufd xmm0, xmm1, 0xff
movd eax, xmm0
pshufd xmm0, xmm1, 0xee
xor eax, edi
mov edi, dword [esp]
movd ecx, xmm0
xor ecx, ebx
mov dword [edi + 4], eax
mov edi, dword [esp]
mov dword [edi], ecx
mov ecx, dword [esp]
sub ebp, esi
mov eax, ebp
and ebp, 0xfffffff8
and eax, 7
cmp esi, ebp
mov dword [esp + 8], eax
jae 0x406d6e
movdqu xmm1, xmmword [ecx]
movdqu xmm0, xmmword [ecx + 0x10]
nop word cs:[eax + eax]
mov ecx, dword [edx + esi]
mov eax, dword [edx + esi + 4]
pshufd xmm2, xmm0, 0xee
movdqa xmm4, xmm0
add esi, 8
movd edi, xmm2
pshufd xmm2, xmm0, 0xff
psrlq xmm4, 0x33
movd ebx, xmm2
xor ebx, eax
xor edi, ecx
movd xmm2, edi
movd xmm3, ebx
punpcklqdq xmm3, xmm2
movdqa xmm2, xmm0
psllq xmm0, 0xd
shufps xmm2, xmm3, 0x24
movaps xmm3, xmm2
paddq xmm1, xmm2
psllq xmm2, 0x10
psrlq xmm3, 0x30
shufps xmm0, xmm2, 0xe4
pshufd xmm2, xmm1, 0x1e
shufps xmm4, xmm3, 0xe4
orps xmm0, xmm4
pxor xmm0, xmm1
movdqa xmm1, xmm0
movdqa xmm3, xmm0
paddq xmm2, xmm0
psrlq xmm1, 0x2f
psrlq xmm3, 0x2b
movsd xmm3, xmm1
movdqa xmm1, xmm0
psllq xmm0, 0x15
psllq xmm1, 0x11
movsd xmm0, xmm1
pshufd xmm1, xmm2, 0xff
movd edi, xmm1
pshufd xmm1, xmm2, 0xee
orpd xmm0, xmm3
movd ebx, xmm1
xor edi, eax
xorpd xmm0, xmm2
xor ebx, ecx
movd xmm1, edi
cmp esi, ebp
movd xmm3, ebx
punpcklqdq xmm1, xmm3
shufps xmm1, xmm2, 0x12
jb 0x406c80
mov ebp, dword [esp]
movd eax, xmm2
pshufd xmm1, xmm2, 0x55
movd ecx, xmm1
movdqu xmmword [ebp + 0x10], xmm0
mov dword [ebp + 0xc], eax
mov eax, dword [esp + 8]
mov dword [ebp + 8], ecx
mov dword [ebp], ebx
mov dword [ebp + 4], edi
cmp eax, 3
jbe 0x406d96
mov ebp, dword [edx + esi]
mov dword [esp + 4], 0
mov ebx, 4
mov ecx, ebx
or ecx, 1
cmp ecx, eax
jb 0x406dab
mov ecx, dword [esp + 4]
cmp ebx, eax
jb 0x406de5
jmp 0x406e0a
xor ebp, ebp
xor ebx, ebx
mov dword [esp + 4], 0
mov ecx, ebx
or ecx, 1
cmp ecx, eax
jae 0x406d8c
lea ecx, [ebx + esi]
mov edi, ebp
xor eax, eax
movzx ebp, word [edx + ecx]
lea ecx, [ebx*8]
shld eax, ebp, cl
shl ebp, cl
test cl, 0x20
mov ecx, 0
cmovne eax, ebp
cmovne ebp, ecx
mov ecx, dword [esp + 4]
or ebx, 2
or edi, ebp
mov ebp, edi
or ecx, eax
mov eax, dword [esp + 8]
cmp ebx, eax
jae 0x406e0a
add esi, ebx
shl ebx, 3
mov edi, ecx
xor eax, eax
movzx edx, byte [edx + esi]
xor esi, esi
mov ecx, ebx
shld esi, edx, cl
shl edx, cl
test bl, 0x20
mov ecx, edi
cmovne esi, edx
cmovne edx, eax
or ecx, esi
or ebp, edx
mov eax, dword [esp]
mov dword [eax + 0x30], ebp
mov dword [eax + 0x34], ecx
mov ecx, dword [esp + 8]
mov dword [eax + 0x3c], ecx
add esp, 0x14
pop esi
pop edi
pop ebx
pop ebp
ret