Function at 0x66d600
Capabilities:
Encode data using xor

Disassembly:
push ebx
push esi
mov esi, dword [esp + 0xc]
push edi
mov edi, dword [esp + 0x18]
mov dword [esi], 0
mov dword [esi + 4], 0
mov dword [esi + 8], 0
mov dword [esi + 0xc], 0
mov dword [esi + 0x40], 0
mov dword [esi + 0x44], 0
mov dword [esi + 0x48], 0
mov dword [esi + 0x4c], 0
mov dword [esi + 0x30], 0
mov dword [esi + 0x34], 0
mov dword [esi + 0x38], 0
mov dword [esi + 0x3c], 0
mov dword [esi + 0x16c], 0
mov dword [esi + 0x168], 0
cmp edi, 0xc
jne 0x66d695
mov eax, dword [esp + 0x14]
lea ebx, [edi - 0xb]
movq xmm0, qword [eax]
movq qword [esi], xmm0
mov eax, dword [eax + 8]
mov dword [esi + 8], eax
mov byte [esi + 0xf], 1
jmp 0x66d801
mov dword [esp + 0x18], edi
push ebp
mov ebp, dword [esp + 0x18]
cmp edi, 0x10
jb 0x66d703
mov ebx, ebp
lea ecx, [esi + 0xf]
mov eax, edi
sub ebx, esi
shr eax, 4
mov dword [esp + 0x14], eax
lea eax, [ebx + ecx]
cmp esi, eax
ja 0x66d6d5
cmp ecx, ebp
jb 0x66d6d5
mov eax, esi
mov edx, 0x10
mov cl, byte [ebx + eax]
lea eax, [eax + 1]
xor byte [eax - 1], cl
sub edx, 1
jne 0x66d6c5
jmp 0x66d6e3
movups xmm1, xmmword [esi]
movups xmm0, xmmword [ebp]
pxor xmm1, xmm0
movups xmmword [esi], xmm1
lea eax, [esi + 0x60]
push eax
push esi
call fcn.0066dab0
add esp, 8
lea ecx, [esi + 0xf]
add ebp, 0x10
add ebx, 0x10
sub edi, 0x10
sub dword [esp + 0x14], 1
jne 0x66d6b3
test edi, edi
je 0x66d781
xor edx, edx
test edi, edi
je 0x66d774
cmp edi, 0x20
jb 0x66d75b
lea eax, [ebp - 1]
lea ecx, [esi - 1]
add eax, edi
add ecx, edi
cmp esi, eax
ja 0x66d724
cmp ecx, ebp
jae 0x66d75b
mov ecx, edi
mov ebx, ebp
and ecx, 0xffffffe0
mov eax, esi
sub ebx, esi
nop
movups xmm0, xmmword [eax]
lea eax, [eax + 0x20]
movups xmm1, xmmword [eax + ebx - 0x20]
pxor xmm1, xmm0
movups xmmword [eax - 0x20], xmm1
movups xmm1, xmmword [edx + ebp + 0x10]
add edx, 0x20
movups xmm0, xmmword [eax - 0x10]
pxor xmm1, xmm0
movups xmmword [eax - 0x10], xmm1
cmp edx, ecx
jb 0x66d730
cmp edx, edi
jae 0x66d774
sub ebp, esi
lea ecx, [edx + esi]
sub edi, edx
mov al, byte [ecx + ebp]
lea ecx, [ecx + 1]
xor byte [ecx - 1], al
sub edi, 1
jne 0x66d766
lea eax, [esi + 0x60]
push eax
push esi
call fcn.0066dab0
add esp, 8
mov ebx, dword [esp + 0x1c]
xor edx, edx
shld edx, ebx, 3
xor byte [esi + 0xb], dl
mov eax, edx
shr eax, 0x18
xor byte [esi + 8], al
mov eax, edx
shr eax, 0x10
xor byte [esi + 9], al
mov eax, edx
shr eax, 8
xor byte [esi + 0xa], al
mov eax, edx
shl ebx, 3
xor byte [esi + 0xf], bl
mov ecx, ebx
shrd ecx, eax, 0x18
xor byte [esi + 0xc], cl
mov ecx, ebx
shr eax, 0x18
mov eax, edx
shrd ecx, eax, 0x10
xor byte [esi + 0xd], cl
shr eax, 0x10
mov eax, ebx
shrd eax, edx, 8
xor byte [esi + 0xe], al
lea eax, [esi + 0x60]
push eax
shr edx, 8
push esi
call fcn.0066dab0
movzx ebx, byte [esi + 0xc]
add esp, 8
movzx eax, byte [esi + 0xd]
shl ebx, 8
or ebx, eax
movzx eax, byte [esi + 0xe]
shl ebx, 8
or ebx, eax
movzx eax, byte [esi + 0xf]
shl ebx, 8
or ebx, eax
pop ebp
push dword [esi + 0x174]
lea eax, [esi + 0x20]
push eax
mov eax, dword [esi + 0x170]
push esi
call eax
inc ebx
add esp, 0xc
mov eax, ebx
mov byte [esi + 0xf], bl
shr eax, 0x18
mov byte [esi + 0xc], al
mov eax, ebx
shr eax, 0x10
mov byte [esi + 0xd], al
mov eax, ebx
shr eax, 8
pop edi
mov byte [esi + 0xe], al
pop esi
pop ebx
ret