Function at 0x40ac20
Capabilities:
Encode data using xor
Encrypt data using aes
Reference aes constants

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x18
mov edx, dword [ecx + 8]
mov eax, dword [ecx + 0x18]
add edx, edx
push ebx
push esi
mov esi, dword [ebp + 8]
mov eax, dword [eax + edx*8]
mov dword [ebp - 8], ecx
push edi
xor eax, dword [esi]
mov dword [esi], eax
mov dword [ebp + 8], eax
mov eax, dword [ecx + 0x18]
mov eax, dword [eax + edx*8 + 4]
xor eax, dword [esi + 4]
mov dword [esi + 4], eax
mov dword [ebp - 4], eax
mov eax, dword [ecx + 0x18]
mov ebx, dword [eax + edx*8 + 8]
xor ebx, dword [esi + 8]
mov dword [esi + 8], ebx
mov eax, dword [ecx + 0x18]
mov ecx, dword [eax + edx*8 + 0xc]
mov eax, dword [ebp + 8]
movzx eax, al
xor ecx, dword [esi + 0xc]
mov edx, dword [ebp - 4]
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0x18], al
mov eax, ecx
shr eax, 8
movzx eax, al
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0x17], al
mov eax, ebx
shr eax, 0x10
movzx eax, al
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0x16], al
mov eax, edx
shr eax, 0x18
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0x15], al
movzx eax, dl
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0x14], al
mov eax, dword [ebp + 8]
shr eax, 8
movzx eax, al
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0x13], al
mov eax, ecx
shr eax, 0x10
movzx eax, al
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0x12], al
mov eax, ebx
shr eax, 0x18
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0x11], al
movzx eax, bl
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0x10], al
mov eax, edx
shr eax, 8
movzx eax, al
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0xf], al
mov eax, dword [ebp + 8]
shr eax, 0x10
movzx eax, al
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0xe], al
mov eax, ecx
shr eax, 0x18
shr ebx, 8
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0xd], al
movzx eax, cl
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0xc], al
movzx eax, bl
mov ebx, dword [ebp - 8]
shr edx, 0x10
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0xb], al
movzx eax, dl
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 0xa], al
mov eax, dword [ebp + 8]
shr eax, 0x18
movzx eax, byte [eax + 0x646858]
mov byte [ebp - 9], al
movups xmm0, xmmword [ebp - 0x18]
movups xmmword [esi], xmm0
mov edi, dword [ebx + 8]
dec edi
mov dword [ebp + 8], edi
test edi, edi
jle 0x40adbf
shl edi, 4
mov eax, dword [ebx + 0x18]
push esi
mov eax, dword [edi + eax]
xor dword [esi], eax
mov eax, dword [ebx + 0x18]
mov eax, dword [edi + eax + 4]
xor dword [esi + 4], eax
mov eax, dword [ebx + 0x18]
mov eax, dword [edi + eax + 8]
xor dword [esi + 8], eax
mov eax, dword [ebx + 0x18]
mov eax, dword [edi + eax + 0xc]
xor dword [esi + 0xc], eax
call fcn.0040adf0
mov eax, dword [ebp + 8]
lea edi, [edi - 0x10]
dec eax
mov dword [ebp + 8], eax
test eax, eax
jg 0x40ad85
mov eax, dword [ebx + 0x18]
pop edi
mov eax, dword [eax]
xor dword [esi], eax
mov eax, dword [ebx + 0x18]
mov eax, dword [eax + 4]
xor dword [esi + 4], eax
mov eax, dword [ebx + 0x18]
mov eax, dword [eax + 8]
xor dword [esi + 8], eax
mov eax, dword [ebx + 0x18]
mov eax, dword [eax + 0xc]
xor dword [esi + 0xc], eax
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 4