Function at 0x3c7229
Capabilities:
Encode data using xor
Encrypt data using aes via x86 extensions

Disassembly:
push ebp
mov ebp, esp
add esp, 0xfffffee0
push esi
push edi
mov eax, dword [ebp + 0x14]
mov esi, dword [ebp + 8]
mov edi, dword [ebp + 0xc]
mov ecx, dword [ebp + 0x10]
movdqu xmmword [ebp - 0x120], xmm6
sub edi, esi
test eax, eax
je 0x3c751a
pxor xmm5, xmm5
pcmpeqd xmm6, xmm6
psrld xmm6, 0x1f
cmp eax, 4
jl 0x3c7489
test ecx, 0xf
je 0x3c7309
lea edx, [ebp - 0x101]
and edx, 0xfffffff0
movdqu xmm4, xmmword [ecx]
movdqa xmmword [edx], xmm4
movdqu xmm4, xmmword [ecx + 0x10]
movdqa xmmword [edx + 0x10], xmm4
movdqu xmm4, xmmword [ecx + 0x20]
movdqa xmmword [edx + 0x20], xmm4
movdqu xmm4, xmmword [ecx + 0x30]
movdqa xmmword [edx + 0x30], xmm4
movdqu xmm4, xmmword [ecx + 0x40]
movdqa xmmword [edx + 0x40], xmm4
movdqu xmm4, xmmword [ecx + 0x50]
movdqa xmmword [edx + 0x50], xmm4
movdqu xmm4, xmmword [ecx + 0x60]
movdqa xmmword [edx + 0x60], xmm4
movdqu xmm4, xmmword [ecx + 0x70]
movdqa xmmword [edx + 0x70], xmm4
movdqu xmm4, xmmword [ecx + 0x80]
movdqa xmmword [edx + 0x80], xmm4
movdqu xmm4, xmmword [ecx + 0x90]
movdqa xmmword [edx + 0x90], xmm4
movdqu xmm4, xmmword [ecx + 0xa0]
movdqa xmmword [edx + 0xa0], xmm4
mov ecx, edx
lea esp, [esp]
jmp 0x3c7309
movdqa xmm4, xmmword [ecx]
movdqu xmm0, xmmword [esi]
pxor xmm0, xmm4
movdqu xmm1, xmmword [esi + 0x10]
pxor xmm1, xmm4
movdqu xmm2, xmmword [esi + 0x20]
pxor xmm2, xmm4
movdqu xmm3, xmmword [esi + 0x30]
pxor xmm3, xmm4
pxor xmm0, xmm5
paddd xmm5, xmm6
pxor xmm1, xmm5
paddd xmm5, xmm6
pxor xmm2, xmm5
paddd xmm5, xmm6
pxor xmm3, xmm5
paddd xmm5, xmm6
add esi, 0x40
movdqa xmm4, xmmword [ecx + 0x10]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [ecx + 0x20]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [ecx + 0x30]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [ecx + 0x40]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [ecx + 0x50]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [ecx + 0x60]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [ecx + 0x70]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [ecx + 0x80]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [ecx + 0x90]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [ecx + 0xa0]
aesenclast xmm0, xmm4
aesenclast xmm1, xmm4
aesenclast xmm2, xmm4
aesenclast xmm3, xmm4
movdqu xmmword [esi + edi - 0x40], xmm0
movdqu xmmword [esi + edi - 0x30], xmm1
movdqu xmmword [esi + edi - 0x20], xmm2
movdqu xmmword [esi + edi - 0x10], xmm3
sub eax, 4
je 0x3c751a
cmp eax, 4
jae 0x3c7309
lea esp, [esp]
mov edi, edi
movdqu xmm0, xmmword [esi]
add esi, 0x10
pxor xmm0, xmm5
movdqu xmm4, xmmword [ecx]
pxor xmm0, xmm4
movdqu xmm4, xmmword [ecx + 0x10]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [ecx + 0x20]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [ecx + 0x30]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [ecx + 0x40]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [ecx + 0x50]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [ecx + 0x60]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [ecx + 0x70]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [ecx + 0x80]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [ecx + 0x90]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [ecx + 0xa0]
aesenclast xmm0, xmm4
movdqu xmmword [esi + edi - 0x10], xmm0
paddd xmm5, xmm6
dec eax
jne 0x3c7489
movdqu xmm6, xmmword [ebp - 0x120]
pop edi
pop esi
leave
ret 0x10