Function at 0x409c50
Capabilities:
Encrypt data using aes
Reference aes constants
Resolve function by parsing pe exports

Disassembly:
push ebp
mov ebp, esp
mov eax, dword [ebp + 0x10]
sub esp, 8
push esi
sub eax, 0x80
je 0x409c8b
sub eax, 0x40
je 0x409c80
sub eax, 0x40
je 0x409c75
mov eax, 0xffffffe0
pop esi
mov esp, ebp
pop ebp
ret
mov esi, dword [ebp + 8]
mov dword [esi], 0xe
jmp 0x409c94
mov esi, dword [ebp + 8]
mov dword [esi], 0xc
jmp 0x409c94
mov esi, dword [ebp + 8]
mov dword [esi], 0xa
mov edx, dword [ebp + 0xc]
push ebx
lea ebx, [esi + 8]
mov dword [esi + 4], ebx
movzx eax, byte [edx + 2]
push edi
movzx edi, byte [edx + 3]
shl edi, 8
or edi, eax
mov dword [ebp + 0x10], ebx
movzx eax, byte [edx + 1]
shl edi, 8
or edi, eax
movzx eax, byte [edx]
shl edi, 8
or edi, eax
mov dword [ebx], edi
movzx ecx, byte [edx + 7]
movzx eax, byte [edx + 6]
shl ecx, 8
or ecx, eax
movzx eax, byte [edx + 5]
shl ecx, 8
or ecx, eax
movzx eax, byte [edx + 4]
shl ecx, 8
or ecx, eax
mov dword [ebx + 4], ecx
movzx ecx, byte [edx + 0xb]
movzx eax, byte [edx + 0xa]
shl ecx, 8
or ecx, eax
movzx eax, byte [edx + 9]
shl ecx, 8
or ecx, eax
movzx eax, byte [edx + 8]
shl ecx, 8
or ecx, eax
mov dword [ebx + 8], ecx
movzx ebx, byte [edx + 0xf]
movzx eax, byte [edx + 0xe]
shl ebx, 8
or ebx, eax
movzx eax, byte [edx + 0xd]
shl ebx, 8
or ebx, eax
movzx eax, byte [edx + 0xc]
shl ebx, 8
or ebx, eax
mov dword [esi + 0x14], ebx
cmp dword [esi], 0xa
jne 0x40a145
movzx eax, bl
movzx esi, byte [eax + str.cw]
mov eax, ebx
shr eax, 0x18
shl esi, 8
movzx eax, byte [eax + str.cw]
xor esi, eax
mov eax, ebx
shr eax, 0x10
movzx eax, al
shl esi, 8
movzx eax, byte [eax + str.cw]
xor esi, eax
mov eax, ebx
shr eax, 8
movzx eax, al
shl esi, 8
movzx eax, byte [eax + str.cw]
xor esi, eax
mov eax, dword [ebp + 0x10]
xor esi, edi
xor esi, 1
mov ecx, dword [eax + 4]
mov edx, dword [eax + 8]
xor ecx, esi
mov dword [eax + 0x10], esi
xor edx, ecx
mov dword [eax + 0x14], ecx
xor ebx, edx
mov dword [eax + 0x1c], ebx
mov dword [eax + 0x18], edx
mov eax, ebx
shr eax, 0x18
movzx edi, byte [eax + str.cw]
movzx eax, bl
movzx eax, byte [eax + str.cw]
shl eax, 8
xor edi, eax
mov eax, ebx
shr eax, 0x10
movzx eax, al
shl edi, 8
movzx eax, byte [eax + str.cw]
xor edi, eax
mov eax, ebx
shr eax, 8
movzx eax, al
shl edi, 8
movzx eax, byte [eax + str.cw]
xor edi, eax
mov eax, dword [ebp + 0x10]
xor edi, esi
xor edi, 2
mov esi, edi
xor esi, ecx
mov dword [eax + 0x20], edi
mov dword [eax + 0x24], esi
mov ecx, esi
xor ecx, edx
mov dword [eax + 0x28], ecx
mov edx, ecx
xor edx, ebx
mov dword [eax + 0x2c], edx
mov eax, edx
shr eax, 0x18
movzx ebx, byte [eax + str.cw]
movzx eax, dl
movzx eax, byte [eax + str.cw]
shl eax, 8
xor ebx, eax
mov eax, edx
shr eax, 0x10
movzx eax, al
shl ebx, 8
movzx eax, byte [eax + str.cw]
xor ebx, eax
mov eax, edx
shl ebx, 8
shr eax, 8
movzx eax, al
movzx eax, byte [eax + str.cw]
xor ebx, eax
mov eax, dword [ebp + 0x10]
xor ebx, edi
xor ebx, 4
mov edi, ebx
mov dword [eax + 0x30], ebx
xor edi, esi
mov dword [eax + 0x34], edi
mov esi, edi
xor esi, ecx
mov dword [eax + 0x38], esi
mov ecx, esi
xor ecx, edx
mov dword [eax + 0x3c], ecx
movzx eax, cl
movzx edx, byte [eax + str.cw]
mov eax, ecx
shr eax, 0x18
shl edx, 8
movzx eax, byte [eax + str.cw]
xor edx, eax
mov eax, ecx
shr eax, 0x10
movzx eax, al
shl edx, 8
movzx eax, byte [eax + str.cw]
xor edx, eax
mov eax, ecx
shr eax, 8
movzx eax, al
shl edx, 8
movzx eax, byte [eax + str.cw]
xor edx, eax
mov eax, dword [ebp + 0x10]
xor edx, ebx
xor edx, 8
mov ebx, edx
mov dword [ebp - 4], edx
mov dword [eax + 0x40], edx
xor ebx, edi
mov dword [eax + 0x44], ebx
mov edi, ebx
xor edi, esi
mov dword [eax + 0x48], edi
mov edx, edi
xor edx, ecx
mov dword [eax + 0x4c], edx
movzx eax, dl
mov dword [ebp - 8], edx
movzx ecx, byte [eax + str.cw]
mov eax, edx
shr eax, 0x18
shl ecx, 8
movzx eax, byte [eax + str.cw]
xor ecx, eax
mov eax, edx
shr eax, 0x10
movzx eax, al
shl ecx, 8
movzx eax, byte [eax + str.cw]
xor ecx, eax
mov eax, edx
shr eax, 8
movzx eax, al
shl ecx, 8
movzx eax, byte [eax + str.cw]
xor ecx, eax
mov eax, dword [ebp + 0x10]
xor ecx, dword [ebp - 4]
xor ecx, 0x10
mov edx, ecx
mov dword [ebp - 4], ecx
xor edx, ebx
mov dword [eax + 0x50], ecx
mov esi, edx
mov dword [eax + 0x54], edx
xor esi, edi
mov edi, eax
mov ecx, esi
xor ecx, dword [ebp - 8]
mov dword [edi + 0x58], esi
movzx eax, cl
mov dword [edi + 0x5c], ecx
mov dword [ebp - 8], ecx
movzx ebx, byte [eax + str.cw]
mov eax, ecx
shr eax, 0x18
shl ebx, 8
movzx eax, byte [eax + str.cw]
xor ebx, eax
mov eax, ecx
shr eax, 0x10
movzx eax, al
shl ebx, 8
movzx eax, byte [eax + str.cw]
xor ebx, eax
movzx eax, byte [edi + 0x5d]
shl ebx, 8
movzx eax, byte [eax + str.cw]
xor ebx, eax
xor ebx, dword [ebp - 4]
xor ebx, 0x20
mov dword [edi + 0x60], ebx
mov ecx, ebx
xor ecx, edx
mov dword [ebp - 4], ebx
mov edx, ecx
mov dword [edi + 0x64], ecx
xor edx, esi
mov esi, dword [ebp + 0x10]
mov dword [edi + 0x68], edx
mov ebx, edx
xor ebx, dword [ebp - 8]
mov dword [edi + 0x6c], ebx
movzx eax, bl
movzx edi, byte [eax + str.cw]
movzx eax, byte [esi + 0x6f]
shl edi, 8
movzx eax, byte [eax + str.cw]
xor edi, eax
movzx eax, byte [esi + 0x6e]
shl edi, 8
movzx eax, byte [eax + str.cw]
xor edi, eax
movzx eax, byte [esi + 0x6d]
shl edi, 8
movzx eax, byte [eax + str.cw]
xor edi, eax
mov eax, esi
xor edi, dword [ebp - 4]
xor edi, 0x40
mov esi, edi
xor esi, ecx
mov dword [eax + 0x70], edi
mov dword [eax + 0x74], esi
mov ecx, esi
xor ecx, edx
mov dword [eax + 0x78], ecx
mov edx, ecx
xor edx, ebx
mov dword [eax + 0x7c], edx
movzx eax, dl
movzx ebx, byte [eax + str.cw]
mov eax, dword [ebp + 0x10]
shl ebx, 8
movzx eax, byte [eax + 0x7f]
movzx eax, byte [eax + str.cw]
xor ebx, eax
mov eax, dword [ebp + 0x10]
shl ebx, 8
movzx eax, byte [eax + 0x7e]
movzx eax, byte [eax + str.cw]
xor ebx, eax
mov eax, dword [ebp + 0x10]
shl ebx, 8
movzx eax, byte [eax + 0x7d]
movzx eax, byte [eax + str.cw]
xor ebx, eax
mov eax, dword [ebp + 0x10]
xor ebx, edi
xor ebx, 0x80
mov dword [eax + 0x80], ebx
mov edi, ebx
xor edi, esi
mov dword [eax + 0x84], edi
mov esi, edi
xor esi, ecx
mov dword [eax + 0x88], esi
mov ecx, esi
xor ecx, edx
mov dword [eax + 0x8c], ecx
movzx eax, cl
movzx edx, byte [eax + str.cw]
mov eax, dword [ebp + 0x10]
shl edx, 8
movzx eax, byte [eax + 0x8f]
movzx eax, byte [eax + str.cw]
xor edx, eax
mov eax, dword [ebp + 0x10]
shl edx, 8
movzx eax, byte [eax + 0x8e]
movzx eax, byte [eax + str.cw]
xor edx, eax
mov eax, dword [ebp + 0x10]
shl edx, 8
movzx eax, byte [eax + 0x8d]
movzx eax, byte [eax + str.cw]
xor edx, eax
xor edx, ebx
mov ebx, dword [ebp + 0x10]
xor edx, 0x1b
mov dword [ebp - 4], edx
mov dword [ebx + 0x90], edx
xor edx, edi
mov edi, edx
mov dword [ebp - 8], edx
xor edx, esi
mov dword [ebx + 0x94], edi
mov esi, ebx
mov ebx, edx
xor ebx, ecx
movzx eax, bl
mov dword [esi + 0x9c], ebx
mov dword [esi + 0x98], edx
movzx ecx, byte [eax + str.cw]
movzx eax, byte [esi + 0x9f]
shl ecx, 8
movzx eax, byte [eax + str.cw]
xor ecx, eax
movzx eax, byte [esi + 0x9e]
shl ecx, 8
movzx eax, byte [eax + str.cw]
xor ecx, eax
movzx eax, byte [esi + 0x9d]
shl ecx, 8
movzx eax, byte [eax + str.cw]
xor ecx, eax
xor ecx, dword [ebp - 4]
xor ecx, 0x36
xor edi, ecx
mov dword [esi + 0xa0], ecx
mov dword [esi + 0xa4], edi
xor edi, edx
mov dword [esi + 0xa8], edi
xor edi, ebx
mov dword [esi + 0xac], edi
pop edi
pop ebx
xor eax, eax
pop esi
mov esp, ebp
pop ebp
ret