Function at 0x1004cacd
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x34
mov eax, dword [ecx + 0x110]
mov edi, dword [esp + 0x48]
mov dword [esp + 0xc], ecx
cmp eax, 1
jle 0x1004ccf4
mov esi, dword [esp + 0xc]
mov ecx, 3
mov dword [esp + 0x14], edx
sub ecx, edx
mov dword [esp + 0x30], ecx
lea ecx, [esi + 0xf0]
mov dl, byte [esi + 0x10a]
mov bl, byte [esi + 0x104]
mov dword [esp + 0x2c], ecx
lea ecx, [esi + 0x100]
mov dword [esp + 0x28], ecx
lea ecx, [esi + 0xf8]
mov dword [esp + 0x24], ecx
lea ecx, [eax + 1]
shl eax, 4
lea eax, [esi + eax - 0x10]
mov dword [esp], ecx
mov cl, byte [esi + 0x108]
mov dword [esp + 0x20], eax
mov al, byte [esi + 0x100]
mov dword [esp + 4], ecx
mov cl, byte [esi + 0x106]
mov ebp, eax
mov al, byte [esi + 0x102]
mov dword [esp + 0x1c], ecx
mov cl, byte [esi + 0x10c]
mov dword [esp + 0x18], eax
mov al, byte [esi + 0x10e]
mov dword [esp + 8], ecx
movzx eax, al
movzx edi, bl
mov ebx, dword [esp + 0x30]
mov ecx, ebp
movzx esi, dl
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0xc]
movzx ebp, cl
mov ecx, dword [esp + 0x4c]
movzx edx, byte [eax + ebx*4 + 0x101]
mov edx, dword [ecx + edx*4 + 0x400]
xor edx, dword [ecx + ebp*4]
xor edx, dword [ecx + esi*4 + 0x800]
mov esi, dword [esp + 0x14]
movzx ebp, byte [eax + esi*4 + 0x107]
xor edx, dword [ecx + ebp*4 + 0xc00]
mov ebp, dword [esp + 0x10]
mov dword [eax + 0xf0], edx
movzx edx, byte [eax + esi*4 + 0x101]
mov edx, dword [ecx + edx*4 + 0x400]
xor edx, dword [ecx + edi*4]
movzx edi, byte [eax + ebx*4 + 0xff]
xor edx, dword [ecx + ebp*4 + 0x800]
movzx ebp, byte [esp + 0x18]
xor edx, dword [ecx + edi*4 + 0xc00]
mov dword [eax + 0xf4], edx
movzx edi, byte [eax + esi*4 + 0x105]
movzx edx, byte [eax + ebx*4 + 0x103]
mov dword [esp + 0x10], edx
movzx edx, byte [esp + 4]
mov edi, dword [ecx + edi*4 + 0x400]
xor edi, dword [ecx + edx*4]
mov edx, dword [esp + 0x10]
xor edi, dword [ecx + ebp*4 + 0x800]
movzx ebp, byte [esp + 0x1c]
xor edi, dword [ecx + edx*4 + 0xc00]
mov dword [eax + 0xf8], edi
movzx edi, byte [esp + 8]
movzx edx, byte [eax + ebx*4 + 0xfd]
movzx esi, byte [eax + esi*4 + 0x103]
mov edx, dword [ecx + edx*4 + 0x400]
xor edx, dword [ecx + edi*4]
mov edi, dword [esp]
xor edx, dword [ecx + ebp*4 + 0x800]
dec edi
mov dword [esp], edi
xor edx, dword [ecx + esi*4 + 0xc00]
mov esi, dword [esp + 0x20]
mov dword [eax + 0xfc], edx
movdqu xmm1, xmmword [esi]
movdqu xmm0, xmmword [eax + 0xf0]
add esi, 0xfffffff0
mov dword [esp + 0x20], esi
pxor xmm1, xmm0
pshufd xmm2, xmm1, 0xe5
pshufd xmm0, xmm1, 0x4e
pshufd xmm3, xmm1, 0xe7
movdqu xmmword [eax + 0x100], xmm1
movd ebx, xmm2
movd edx, xmm0
movd eax, xmm3
mov ecx, ebx
mov dword [esp + 8], eax
mov dword [esp + 4], edx
shr eax, 0x10
shr edx, 0x10
shr ecx, 0x10
mov dword [esp + 0x1c], ecx
movd ecx, xmm1
mov ebp, ecx
shr ecx, 0x10
cmp edi, 2
mov dword [esp + 0x18], ecx
jg 0x1004cb6f
mov dword [esp], ebx
mov edx, dword [esp + 0x14]
mov edi, dword [esp + 0x48]
mov ebx, dword [esp + 0x2c]
mov esi, dword [esp + 0x28]
mov ecx, dword [esp + 0x24]
jmp 0x1004cd2f
mov ecx, dword [esp + 0xc]
mov al, byte [ecx + 0x100]
lea esi, [ecx + 0x100]
lea ebx, [ecx + 0xf0]
mov ebp, eax
mov al, byte [ecx + 0x104]
mov dword [esp], eax
mov al, byte [ecx + 0x108]
mov dword [esp + 4], eax
mov al, byte [ecx + 0x10c]
lea ecx, [ecx + 0xf8]
mov dword [esp + 8], eax
mov eax, ebp
movzx eax, al
mov al, byte [edi + eax]
mov byte [ebx], al
movzx eax, byte [esp]
mov al, byte [edi + eax]
mov byte [ebx + 4], al
movzx eax, byte [esp + 4]
mov al, byte [edi + eax]
mov byte [ecx], al
movzx ecx, byte [esp + 8]
mov eax, ebx
sub eax, edx
mov cl, byte [edi + ecx]
mov byte [ebx + 0xc], cl
movzx ecx, byte [eax + 0x17]
mov cl, byte [edi + ecx]
mov byte [eax + 3], cl
movzx ecx, byte [eax + 0x1b]
mov cl, byte [edi + ecx]
mov byte [eax + 7], cl
movzx ecx, byte [eax + 0x1f]
mov cl, byte [edi + ecx]
mov byte [eax + 0xb], cl
movzx ecx, byte [eax + 0x13]
mov cl, byte [edi + ecx]
mov byte [eax + 0xf], cl
movzx eax, byte [esi + 0xa]
mov al, byte [edi + eax]
mov byte [ebx + 2], al
movzx eax, byte [esi + 2]
mov al, byte [edi + eax]
mov byte [ebx + 0xa], al
movzx eax, byte [esi + 0xe]
mov al, byte [edi + eax]
mov byte [ebx + 6], al
movzx eax, byte [esi + 6]
mov al, byte [edi + eax]
mov byte [ebx + 0xe], al
movzx eax, byte [ebx + edx + 0x1d]
mov al, byte [edi + eax]
mov byte [ebx + edx + 1], al
movzx eax, byte [ebx + edx + 0x19]
mov al, byte [edi + eax]
mov byte [ebx + edx + 0xd], al
movzx eax, byte [ebx + edx + 0x15]
mov al, byte [edi + eax]
mov byte [ebx + edx + 9], al
movzx eax, byte [ebx + edx + 0x11]
mov al, byte [edi + eax]
mov byte [ebx + edx + 5], al
add esp, 0x34
pop esi
pop edi
pop ebx
pop ebp
ret