Function at 0x4016a0
Capabilities:
Encrypt data using aes
Reference aes constants

Disassembly:
sub esp, 0xc
mov ecx, dword [esp + 0x10]
mov eax, dword [esp + 0x18]
mov edx, dword [ecx + 8]
xor edx, dword [eax + 8]
push ebx
mov ebx, dword [ecx + 4]
xor ebx, dword [eax + 4]
push ebp
push esi
mov esi, dword [ecx]
mov ecx, dword [ecx + 0xc]
xor esi, dword [eax]
xor ecx, dword [eax + 0xc]
add eax, 0x10
push edi
mov dword [esp + 0x28], esi
mov dword [esp + 0x20], edx
mov dword [esp + 0x14], ecx
mov dword [esp + 0x10], eax
mov dword [esp + 0x18], 9
jmp 0x4016e6
mov esi, dword [esp + 0x28]
mov eax, ebx
shr eax, 0x10
and eax, 0xff
movzx eax, byte [eax + str.cw]
shr esi, 0x18
mov ah, byte [esi + str.cw]
movzx esi, dh
movzx esi, byte [esi + str.cw]
shr edx, 0x10
and edx, 0xff
movzx edx, byte [edx + str.cw]
shl eax, 8
or eax, esi
mov esi, ecx
and esi, 0xff
movzx esi, byte [esi + str.cw]
movzx ecx, ch
movzx ecx, byte [ecx + str.cw]
shl eax, 8
or eax, esi
mov esi, ebx
shr esi, 0x18
mov dh, byte [esi + str.cw]
mov ebp, eax
shl edx, 8
or edx, ecx
mov ecx, dword [esp + 0x28]
and ecx, 0xff
movzx ecx, byte [ecx + str.cw]
shl edx, 8
or edx, ecx
mov ecx, dword [esp + 0x20]
mov esi, edx
mov edx, dword [esp + 0x14]
shr edx, 0x10
and edx, 0xff
movzx edx, byte [edx + str.cw]
shr ecx, 0x18
mov dh, byte [ecx + str.cw]
mov ecx, dword [esp + 0x28]
movzx edi, ch
movzx edi, byte [edi + str.cw]
shl edx, 8
or edx, edi
shr ecx, 0x10
shl edx, 8
and ecx, 0xff
mov edi, ebx
and edi, 0xff
movzx edi, byte [edi + str.cw]
or edi, edx
movzx edx, byte [ecx + str.cw]
mov ecx, dword [esp + 0x14]
shr ecx, 0x18
mov dh, byte [ecx + str.cw]
movzx ecx, bh
movzx ecx, byte [ecx + str.cw]
shl edx, 8
or edx, ecx
mov ecx, dword [esp + 0x20]
and ecx, 0xff
movzx ecx, byte [ecx + str.cw]
shl edx, 8
or edx, ecx
mov ecx, eax
shr ecx, 7
mov dword [esp + 0x14], edx
mov edx, ecx
and edx, 0x1010101
imul edx, edx, 0x1b
mov ebx, eax
rol ebx, 0x10
ror ebp, 8
xor ebx, ebp
mov ebp, eax
and ebp, 0xffff7f7f
add ebp, ebp
xor ebp, eax
shl ebp, 8
mov dword [esp + 0x20], edx
and ecx, 0x10101
xor edx, eax
imul ecx, ecx, 0x1b00
xor ebp, ecx
mov ecx, eax
and eax, 0xff7f7f7f
shr edx, 1
add eax, eax
and ecx, 0x7f000000
xor edx, ecx
shr edx, 0x17
or ebp, edx
mov edx, dword [esp + 0x10]
xor ebx, ebp
xor ebx, eax
xor ebx, dword [esp + 0x20]
mov eax, esi
xor ebx, dword [edx]
shr eax, 7
mov ecx, eax
and eax, 0x10101
imul eax, eax, 0x1b00
mov edx, esi
mov dword [esp + 0x28], ebx
mov ebx, esi
and ecx, 0x1010101
imul ecx, ecx, 0x1b
rol edx, 0x10
ror ebx, 8
xor edx, ebx
mov ebx, esi
and ebx, 0xffff7f7f
add ebx, ebx
xor ebx, esi
mov ebp, esi
shl ebx, 8
xor ebx, eax
mov eax, ecx
xor eax, esi
shr eax, 1
and ebp, 0x7f000000
xor eax, ebp
shr eax, 0x17
or ebx, eax
mov eax, dword [esp + 0x10]
and esi, 0xff7f7f7f
add esi, esi
xor edx, ebx
xor edx, esi
xor edx, dword [eax + 4]
mov eax, edi
shr eax, 7
xor edx, ecx
mov ecx, eax
mov ebx, edx
and ecx, 0x1010101
and eax, 0x10101
imul ecx, ecx, 0x1b
mov edx, edi
imul eax, eax, 0x1b00
rol edx, 0x10
mov esi, edi
ror esi, 8
xor edx, esi
mov esi, edi
and esi, 0xffff7f7f
add esi, esi
xor esi, edi
shl esi, 8
xor esi, eax
mov eax, ecx
xor eax, edi
mov ebp, edi
shr eax, 1
and ebp, 0x7f000000
xor eax, ebp
shr eax, 0x17
or esi, eax
and edi, 0xff7f7f7f
xor edx, esi
add edi, edi
xor edx, edi
mov eax, dword [esp + 0x10]
xor edx, dword [eax + 8]
mov eax, dword [esp + 0x14]
xor edx, ecx
mov ecx, eax
shr ecx, 7
mov dword [esp + 0x20], edx
mov edx, ecx
and edx, 0x1010101
imul edx, edx, 0x1b
and ecx, 0x10101
mov edi, eax
imul ecx, ecx, 0x1b00
rol edi, 0x10
mov esi, eax
ror esi, 8
xor edi, esi
mov esi, eax
and esi, 0xffff7f7f
add esi, esi
xor esi, eax
shl esi, 8
xor esi, ecx
mov ecx, edx
xor ecx, eax
mov ebp, eax
shr ecx, 1
and ebp, 0x7f000000
xor ecx, ebp
shr ecx, 0x17
or esi, ecx
xor edi, esi
mov esi, dword [esp + 0x10]
and eax, 0xff7f7f7f
add eax, eax
xor edi, eax
xor edi, dword [esi + 0xc]
add esi, 0x10
xor edi, edx
sub dword [esp + 0x18], 1
mov edx, dword [esp + 0x20]
mov ecx, edi
mov dword [esp + 0x14], ecx
mov dword [esp + 0x10], esi
jne 0x4016e2
shr edx, 0x10
and edx, 0xff
movzx eax, byte [edx + str.cw]
mov edx, ebx
shr edx, 0x18
mov ah, byte [edx + str.cw]
movzx edx, ch
movzx edx, byte [edx + str.cw]
shl eax, 8
or eax, edx
mov edx, dword [esp + 0x28]
shl eax, 8
and edx, 0xff
movzx edx, byte [edx + str.cw]
or eax, edx
xor eax, dword [esi + 4]
mov edi, eax
mov eax, ecx
shr eax, 0x10
and eax, 0xff
movzx edx, byte [eax + str.cw]
mov eax, dword [esp + 0x20]
shr eax, 0x18
mov dh, byte [eax + str.cw]
mov eax, dword [esp + 0x28]
movzx ebp, ah
movzx ebp, byte [ebp + str.cw]
shl edx, 8
or edx, ebp
mov ebp, ebx
shl edx, 8
shr eax, 0x10
and ebp, 0xff
movzx ebp, byte [ebp + str.cw]
or edx, ebp
xor edx, dword [esi + 8]
and eax, 0xff
mov ebp, edx
movzx edx, byte [eax + str.cw]
mov eax, ecx
shr eax, 0x18
mov dh, byte [eax + str.cw]
movzx eax, bh
movzx eax, byte [eax + str.cw]
shl edx, 8
or edx, eax
mov eax, dword [esp + 0x20]
and eax, 0xff
movzx eax, byte [eax + str.cw]
shr ebx, 0x10
and ebx, 0xff
movzx ebx, byte [ebx + str.cw]
shl edx, 8
or edx, eax
mov eax, dword [esp + 0x28]
xor edx, dword [esi + 0xc]
shr eax, 0x18
mov bh, byte [eax + str.cw]
movzx eax, byte [esp + 0x21]
movzx eax, byte [eax + str.cw]
shl ebx, 8
or ebx, eax
mov eax, dword [esp + 0x24]
and ecx, 0xff
movzx ecx, byte [ecx + str.cw]
shl ebx, 8
or ebx, ecx
xor ebx, dword [esi]
mov dword [eax + 4], edi
pop edi
pop esi
mov dword [eax + 8], ebp
pop ebp
mov dword [eax], ebx
mov dword [eax + 0xc], edx
pop ebx
add esp, 0xc
ret