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

Disassembly:
push ebp
mov ebp, esp
add esp, 0xfffffec0
push ebx
push esi
push edi
movdqu xmmword [ebp - 0x120], xmm6
cmp dword [ebp + 0x10], 0
je 0x3c5d7c
mov edi, dword [ebp + 0xc]
mov esi, dword [ebp + 8]
mov ecx, dword [ebp + 0x14]
mov eax, dword [ebp + 0x1c]
mov edx, dword [ebp + 0x18]
shr ecx, 4
mov dword [ebp - 0x124], eax
mov dword [ebp - 0x128], edx
mov dword [ebp - 0x130], ecx
xor eax, eax
mov dword [ebp - 0x12c], eax
movdqu xmm5, xmmword [ebp - 0x130]
xor eax, eax
inc eax
movd xmm6, eax
test byte [ebp + 0x14], 0xf
je 0x3c58f8
movdqa xmm0, xmm5
movdqu xmm4, xmmword [esi]
pxor xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x10]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x20]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x30]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x40]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x50]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x60]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x70]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x80]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x90]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xa0]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xb0]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xc0]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xd0]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xe0]
aesenclast xmm0, xmm4
movdqu xmmword [ebp - 0x140], xmm0
mov edx, dword [ebp + 0x14]
mov ecx, 0x10
and edx, 0xf
sub ecx, edx
cmp ecx, dword [ebp + 0x10]
cmova ecx, dword [ebp + 0x10]
lea edx, [ebp + edx - 0x140]
mov ebx, ecx
mov al, byte [edx + ecx - 1]
xor byte [edi + ecx - 1], al
dec ecx
jne 0x3c58de
add edi, ebx
sub dword [ebp + 0x10], ebx
je 0x3c5d7c
paddd xmm5, xmm6
cmp dword [ebp + 0x10], 0x40
jl 0x3c5bd9
test esi, 0xf
je 0x3c59d9
lea edx, [ebp - 0x101]
and edx, 0xfffffff0
movdqu xmm4, xmmword [esi]
movdqa xmmword [edx], xmm4
movdqu xmm4, xmmword [esi + 0x10]
movdqa xmmword [edx + 0x10], xmm4
movdqu xmm4, xmmword [esi + 0x20]
movdqa xmmword [edx + 0x20], xmm4
movdqu xmm4, xmmword [esi + 0x30]
movdqa xmmword [edx + 0x30], xmm4
movdqu xmm4, xmmword [esi + 0x40]
movdqa xmmword [edx + 0x40], xmm4
movdqu xmm4, xmmword [esi + 0x50]
movdqa xmmword [edx + 0x50], xmm4
movdqu xmm4, xmmword [esi + 0x60]
movdqa xmmword [edx + 0x60], xmm4
movdqu xmm4, xmmword [esi + 0x70]
movdqa xmmword [edx + 0x70], xmm4
movdqu xmm4, xmmword [esi + 0x80]
movdqa xmmword [edx + 0x80], xmm4
movdqu xmm4, xmmword [esi + 0x90]
movdqa xmmword [edx + 0x90], xmm4
movdqu xmm4, xmmword [esi + 0xa0]
movdqa xmmword [edx + 0xa0], xmm4
movdqu xmm4, xmmword [esi + 0xb0]
movdqa xmmword [edx + 0xb0], xmm4
movdqu xmm4, xmmword [esi + 0xc0]
movdqa xmmword [edx + 0xc0], xmm4
movdqu xmm4, xmmword [esi + 0xd0]
movdqa xmmword [edx + 0xd0], xmm4
movdqu xmm4, xmmword [esi + 0xe0]
movdqa xmmword [edx + 0xe0], xmm4
mov esi, edx
mov edi, edi
movdqa xmm0, xmm5
paddd xmm5, xmm6
movdqa xmm1, xmm5
paddd xmm5, xmm6
movdqa xmm2, xmm5
paddd xmm5, xmm6
movdqa xmm3, xmm5
paddd xmm5, xmm6
movdqa xmm4, xmmword [esi]
pxor xmm0, xmm4
pxor xmm1, xmm4
pxor xmm2, xmm4
pxor xmm3, xmm4
movdqa xmm4, xmmword [esi + 0x10]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [esi + 0x20]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [esi + 0x30]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [esi + 0x40]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [esi + 0x50]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [esi + 0x60]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [esi + 0x70]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [esi + 0x80]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [esi + 0x90]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [esi + 0xa0]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [esi + 0xb0]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [esi + 0xc0]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [esi + 0xd0]
aesenc xmm0, xmm4
aesenc xmm1, xmm4
aesenc xmm2, xmm4
aesenc xmm3, xmm4
movdqa xmm4, xmmword [esi + 0xe0]
aesenclast xmm0, xmm4
aesenclast xmm1, xmm4
aesenclast xmm2, xmm4
aesenclast xmm3, xmm4
movdqu xmm4, xmmword [edi]
pxor xmm0, xmm4
movdqu xmm4, xmmword [edi + 0x10]
pxor xmm1, xmm4
movdqu xmm4, xmmword [edi + 0x20]
pxor xmm2, xmm4
movdqu xmm4, xmmword [edi + 0x30]
pxor xmm3, xmm4
movdqu xmmword [edi], xmm0
movdqu xmmword [edi + 0x10], xmm1
movdqu xmmword [edi + 0x20], xmm2
movdqu xmmword [edi + 0x30], xmm3
add edi, 0x40
sub dword [ebp + 0x10], 0x40
je 0x3c5d7c
cmp dword [ebp + 0x10], 0x40
jge 0x3c59d9
lea esp, [esp]
jmp 0x3c5bd9
cmp dword [ebp + 0x10], 0x10
jb 0x3c5cb2
movdqa xmm0, xmm5
movdqu xmm4, xmmword [esi]
pxor xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x10]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x20]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x30]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x40]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x50]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x60]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x70]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x80]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x90]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xa0]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xb0]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xc0]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xd0]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xe0]
aesenclast xmm0, xmm4
movdqu xmm4, xmmword [edi]
pxor xmm0, xmm4
movdqu xmmword [edi], xmm0
paddd xmm5, xmm6
add edi, 0x10
sub dword [ebp + 0x10], 0x10
jne 0x3c5bd9
jmp 0x3c5d7c
movdqa xmm0, xmm5
movdqu xmm4, xmmword [esi]
pxor xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x10]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x20]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x30]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x40]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x50]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x60]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x70]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x80]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0x90]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xa0]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xb0]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xc0]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xd0]
aesenc xmm0, xmm4
movdqu xmm4, xmmword [esi + 0xe0]
aesenclast xmm0, xmm4
movdqu xmmword [ebp - 0x140], xmm0
mov edx, dword [ebp + 0x10]
test edx, edx
je 0x3c5d7c
mov al, byte [ebp + edx - 0x141]
xor byte [edi + edx - 1], al
dec edx
jne 0x3c5d6e
movdqu xmm6, xmmword [ebp - 0x120]
pop edi
pop esi
pop ebx
leave
ret 0x18