Function at 0x404670
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x10
mov ebp, dword [esp + 0x24]
mov dword [esp + 8], ecx
add dword [ecx + 0x38], ebp
mov eax, dword [ecx + 0x3c]
test eax, eax
je 0x4046b4
mov esi, 8
mov dword [esp + 4], eax
sub esi, eax
cmp ebp, esi
mov ecx, esi
cmovb ecx, ebp
xor ebp, ebp
cmp ecx, 3
jbe 0x4046bd
mov edi, dword [edx]
mov ebx, 4
mov eax, ebx
or eax, 1
cmp eax, ecx
jb 0x4046ca
jmp 0x404703
mov edi, ecx
xor esi, esi
jmp 0x404847
xor ebx, ebx
xor edi, edi
mov eax, ebx
or eax, 1
cmp eax, ecx
jae 0x404703
movzx eax, word [edx + ebx]
mov dword [esp + 0xc], ebp
mov ebp, ecx
mov dword [esp], edi
lea ecx, [ebx*8]
xor edi, edi
shld edi, eax, cl
shl eax, cl
test cl, 0x20
mov ecx, ebp
mov ebp, 0
cmovne edi, eax
cmovne eax, ebp
mov ebp, dword [esp + 0xc]
or ebx, 2
or ebp, edi
mov edi, dword [esp]
or edi, eax
cmp ebx, ecx
mov dword [esp], edi
jae 0x40473b
movzx edi, byte [edx + ebx]
shl ebx, 3
xor eax, eax
mov ecx, ebx
mov ebx, ebp
shld eax, edi, cl
shl edi, cl
test cl, 0x20
mov ecx, 0
cmovne eax, edi
cmovne edi, ecx
mov ecx, dword [esp + 4]
or ebx, eax
mov eax, dword [esp]
or eax, edi
mov edi, dword [esp + 8]
jmp 0x404748
mov edi, dword [esp + 8]
mov ecx, dword [esp + 4]
mov eax, dword [esp]
mov ebx, ebp
lea ecx, [ecx*8]
xor ebp, ebp
shld ebx, eax, cl
shl eax, cl
test cl, 0x20
cmove ebp, eax
cmovne ebx, eax
or ebp, dword [edi + 0x30]
or ebx, dword [edi + 0x34]
mov dword [esp], ebp
mov dword [edi + 0x30], ebp
mov ebp, dword [esp + 0x24]
mov dword [edi + 0x34], ebx
cmp esi, ebp
jbe 0x404781
mov eax, dword [esp + 4]
add eax, ebp
jmp 0x404a03
mov eax, dword [edi + 0x1c]
mov dword [esp + 0xc], ebx
mov ecx, dword [edi + 0x18]
movdqu xmm1, xmmword [edi]
xor eax, ebx
mov ebx, dword [esp]
movd xmm2, eax
xor ecx, ebx
movd xmm0, ecx
punpcklqdq xmm2, xmm0
movdqu xmm0, xmmword [edi + 0x10]
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 [edi + 0x10], xmm0
pshufd xmm0, xmm1, 0x55
movd dword [edi + 0xc], xmm1
movd dword [edi + 8], xmm0
pshufd xmm0, xmm1, 0xff
movd eax, xmm0
pshufd xmm0, xmm1, 0xee
xor eax, dword [esp + 0xc]
movd ecx, xmm0
xor ecx, ebx
mov dword [edi], ecx
mov dword [edi + 4], eax
sub ebp, esi
mov eax, ebp
and ebp, 0xfffffff8
and eax, 7
cmp esi, ebp
mov dword [esp + 4], eax
jae 0x40495f
movdqu xmm1, xmmword [edi]
movdqu xmm0, xmmword [edi + 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 0x404870
mov ebp, dword [esp + 8]
movd eax, xmm2
pshufd xmm1, xmm2, 0x55
movd ecx, xmm1
movdqu xmmword [ebp + 0x10], xmm0
mov dword [ebp + 0xc], eax
mov eax, dword [esp + 4]
mov dword [ebp + 8], ecx
mov dword [ebp], ebx
mov dword [ebp + 4], edi
cmp eax, 3
jbe 0x404985
mov edi, dword [edx + esi]
mov dword [esp], 0
mov ebx, 4
mov ecx, ebx
or ecx, 1
cmp ecx, eax
jb 0x404999
mov ecx, dword [esp]
cmp ebx, eax
jb 0x4049ce
jmp 0x4049f3
xor ebx, ebx
xor edi, edi
mov dword [esp], 0
mov ecx, ebx
or ecx, 1
cmp ecx, eax
jae 0x40497c
lea ecx, [ebx + esi]
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]
or ebx, 2
or edi, ebp
or ecx, eax
mov eax, dword [esp + 4]
cmp ebx, eax
jae 0x4049f3
add esi, ebx
shl ebx, 3
mov ebp, 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, ebp
cmovne esi, edx
cmovne edx, eax
or ecx, esi
or edi, edx
mov eax, dword [esp + 8]
mov dword [eax + 0x30], edi
mov edi, eax
mov dword [eax + 0x34], ecx
mov eax, dword [esp + 4]
mov dword [edi + 0x3c], eax
add esp, 0x10
pop esi
pop edi
pop ebx
pop ebp
ret