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

Disassembly:
mov eax, dword [esp + 0xc]
mov ecx, dword [esp + 8]
push ebx
push ebp
push esi
mov esi, dword [esp + 0x10]
push edi
push eax
push ecx
push esi
call fcn.004010d0
mov ebp, eax
add esp, 0xc
xor ebx, ebx
mov dword [esp + 0x1c], ebp
lea edi, [ebp*4]
test edi, edi
jle 0x401635
lea edx, [esi + edi*4 + 8]
lea ecx, [esi + 8]
mov eax, dword [edx - 8]
mov ebp, dword [ecx - 8]
mov dword [ecx - 8], eax
mov dword [edx - 8], ebp
mov ebp, dword [edx - 4]
mov eax, dword [ecx - 4]
mov dword [ecx - 4], ebp
mov dword [edx - 4], eax
mov ebp, dword [edx]
mov eax, dword [ecx]
mov dword [ecx], ebp
mov dword [edx], eax
mov ebp, dword [edx + 4]
mov eax, dword [ecx + 4]
mov dword [ecx + 4], ebp
mov dword [edx + 4], eax
add ebx, 4
sub edi, 4
add ecx, 0x10
sub edx, 0x10
cmp ebx, edi
jl 0x4015f5
mov ebp, dword [esp + 0x1c]
cmp ebp, 1
jle 0x40181a
lea edx, [ebp - 1]
mov ecx, dword [esi + 0x10]
add esi, 0x10
xor ebx, ebx
mov dword [esp + 0x1c], ecx
mov bl, ch
xor eax, eax
mov al, byte [esp + 0x1e]
mov edi, dword [ebx*4 + str.ccccwwww]
mov eax, dword [eax*4 + str.ccccwwww]
and edi, 0xff
and eax, 0xff
mov ebx, dword [edi*4 + 0x448208]
mov edi, ecx
mov eax, dword [eax*4 + 0x447e08]
and ecx, 0xff
shr edi, 0x18
mov ecx, dword [ecx*4 + str.ccccwwww]
xor eax, ebx
mov edi, dword [edi*4 + str.ccccwwww]
and ecx, 0xff
and edi, 0xff
mov ebx, dword [edi*4 + 0x447a08]
xor eax, ebx
mov ebx, dword [ecx*4 + 0x448608]
mov ecx, dword [esi + 4]
xor eax, ebx
xor ebx, ebx
mov dword [esi], eax
mov bl, ch
mov dword [esp + 0x1c], ecx
xor eax, eax
mov edi, dword [ebx*4 + str.ccccwwww]
mov al, byte [esp + 0x1e]
and edi, 0xff
mov eax, dword [eax*4 + str.ccccwwww]
mov ebx, dword [edi*4 + 0x448208]
mov edi, ecx
shr edi, 0x18
and eax, 0xff
and ecx, 0xff
mov edi, dword [edi*4 + str.ccccwwww]
mov eax, dword [eax*4 + 0x447e08]
mov ecx, dword [ecx*4 + str.ccccwwww]
and edi, 0xff
xor eax, ebx
and ecx, 0xff
mov ebx, dword [edi*4 + 0x447a08]
xor eax, ebx
mov ebx, dword [ecx*4 + 0x448608]
mov ecx, dword [esi + 8]
xor eax, ebx
xor ebx, ebx
mov dword [esi + 4], eax
mov bl, ch
mov dword [esp + 0x1c], ecx
xor eax, eax
mov edi, dword [ebx*4 + str.ccccwwww]
mov al, byte [esp + 0x1e]
and edi, 0xff
mov eax, dword [eax*4 + str.ccccwwww]
mov ebx, dword [edi*4 + 0x448208]
mov edi, ecx
shr edi, 0x18
and eax, 0xff
and ecx, 0xff
mov edi, dword [edi*4 + str.ccccwwww]
mov eax, dword [eax*4 + 0x447e08]
mov ecx, dword [ecx*4 + str.ccccwwww]
and edi, 0xff
xor eax, ebx
and ecx, 0xff
mov ebx, dword [edi*4 + 0x447a08]
xor eax, ebx
mov ebx, dword [ecx*4 + 0x448608]
mov ecx, dword [esi + 0xc]
xor eax, ebx
mov dword [esi + 8], eax
mov dword [esp + 0x1c], ecx
xor eax, eax
mov al, byte [esp + 0x1e]
mov eax, dword [eax*4 + str.ccccwwww]
xor ebx, ebx
and eax, 0xff
mov bl, ch
mov eax, dword [eax*4 + 0x447e08]
mov edi, dword [ebx*4 + str.ccccwwww]
and edi, 0xff
mov ebx, dword [edi*4 + 0x448208]
mov edi, ecx
shr edi, 0x18
and ecx, 0xff
xor eax, ebx
mov edi, dword [edi*4 + str.ccccwwww]
mov ecx, dword [ecx*4 + str.ccccwwww]
and edi, 0xff
and ecx, 0xff
mov ebx, dword [edi*4 + 0x447a08]
mov edi, dword [ecx*4 + 0x448608]
xor eax, ebx
xor eax, edi
dec edx
mov dword [esi + 0xc], eax
jne 0x401641
pop edi
mov eax, ebp
pop esi
pop ebp
pop ebx
ret