Function at 0x404007
Capabilities:
Encode data using xor
Resolve function by parsing pe exports

Disassembly:
sub esp, 0x3c
mov cl, byte [esp + 0x60]
mov eax, dword [0xaa1e28]
dec cl
mov dword [esp + 0x24], eax
mov eax, dword [0xaa1de0]
inc eax
mov byte [esp + 0x60], cl
mov dword [0xaa1de0], eax
push ebx
mov ebx, dword [esp + 0x48]
push ebp
movzx ebp, cl
mov ecx, dword [0xaa1e20]
push esi
push edi
mov edi, dword [0xaa1e0c]
movzx edx, word [ecx + ebp*2]
xor edx, eax
mov esi, dword [0xaa1dec]
mov eax, dword [0xaa1de4]
mov dword [esp + 0x24], edx
mov edx, dword [0xaa1e30]
sub edx, eax
mov dword [esp + 0x2c], ebp
mov dword [esp + 0x1c], edx
dec ebx
mov edx, dword [esp + 0x50]
mov dword [esp + 0x54], ebx
mov dl, byte [edx + ebx*8]
xor dl, al
mov eax, dword [esp + 0x6c]
mov byte [esp + 0x13], dl
movzx edx, word [edi + 0x3bf6]
xor edx, dword [eax + 0x3194]
movzx eax, byte [0xaa1dfb]
mov dword [esp + 0x18], edx
mov edx, 0x556
sub edx, eax
mov eax, dword [0xaa1e00]
mov dword [esp + 0x28], edx
movzx eax, word [ecx + eax*2]
mov ecx, dword [0xaa1df0]
cdq
idiv dword [ecx + 0x3090]
mov edx, dword [0xaa1e28]
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x58]
mov ecx, dword [0xaa1e2c]
mov al, byte [eax + ebx*4 + 0x18]
xor al, dl
inc edx
mov byte [esp + 0x12], al
mov al, byte [esi + ebp]
mov ebp, dword [esp + 0x60]
mov byte [esp + 0x11], al
mov eax, dword [0xaa1e08]
mov dword [esp + 0x20], eax
mov eax, 0x18ea
movzx eax, byte [eax]
movzx ebx, word [edi + eax*2 + 0xc]
movzx eax, byte [esp + 0x68]
mov dword [esp + 0x38], eax
imul eax, eax, 0xc
mov dword [0xaa1e28], edx
movzx edi, word [edi + edx*8]
xor edx, edx
imul edi, dword [eax + ebp]
mov eax, 0xe4c
mov ebp, dword [esp + 0x2c]
div dword [ecx + ebp*4 + 8]
mov ecx, dword [0xaa1e14]
mov edx, dword [0xaa1e30]
dec ecx
mov ebp, dword [esp + 0x1c]
mov dword [0xaa1e14], ecx
movzx ecx, byte [esi + ecx*2]
movzx edx, word [ebp + edx*2 + 2]
movzx esi, byte [esp + 0x64]
sub edx, ecx
movzx ecx, byte [0xaa1dfa]
xor ecx, dword [esp + 0x18]
push 0x16b2
push ecx
push 0xbfd
push esi
push 0x1d99
push edx
push eax
xor edx, edx
mov ecx, 0x1c83
mov eax, ebx
div ecx
push edi
push 0xaeb
push edx
push 0x13ac
push 0x2a2
call fcn.00411f4d
mov ebp, dword [esp + 0x90]
mov edx, 0x18ea
mov edi, dword [esp + 0x54]
add esp, 0x30
mov ebx, dword [esp + 0x5c]
movzx ecx, byte [edx]
mov dword [ebp + ecx*4], eax
mov eax, 0x9a8
mov ebp, dword [esp + 0x54]
inc dword [eax]
mov ecx, dword [eax]
movzx eax, byte [edx]
xor edx, edx
shl eax, 4
mov al, byte [eax + 0x408]
sub al, 0x29
add byte [ecx + edi], al
mov eax, dword [esp + 0x20]
mov edi, dword [esp + 0x20]
mov ecx, dword [esp + 0x1c]
movzx eax, word [eax + ebp*4 + 2]
and eax, dword [0xaa1dfc]
add eax, 0x424
div dword [0xaa1df4]
mov dword [0xaa1df4], eax
inc byte [ebx]
movzx ecx, byte [ecx + 0xd00]
movzx eax, byte [ebx]
mov edx, dword [0xaa1e24]
movzx eax, byte [edi + eax*2 + 0xe]
mov edi, dword [esp + 0x24]
imul eax, ecx
and al, byte [edi + ebp]
sub al, byte [edx*4 + 0x18ea]
dec ebp
mov edi, dword [esp + 0x14]
mov byte [edx*4 + 0x18ea], al
mov edx, dword [0xaa1e30]
inc edx
mov dword [esp + 0x54], ebp
movzx ebp, byte [esp + 0x12]
mov dword [0xaa1e30], edx
movzx eax, word [edi]
sub edi, 2
mov dword [esp + 0x14], edi
mov dword [esp + 0x30], ebp
movzx ecx, byte [eax + ebx + 7]
mov eax, dword [0xaa1e20]
movzx eax, word [eax + 0x1a5c]
sub ecx, eax
mov eax, ebp
sub ecx, dword [edx*4 + 0x16e6]
add ecx, esi
mov esi, 0x1a2a
mov dword [edx*4 + 0x16e6], ecx
xor edx, edx
div esi
movzx ecx, word [edi]
mov eax, dword [esp + 0x34]
or dword [eax + ecx*4 + 0x6c], edx
mov eax, 0x18ea
mov ecx, dword [0xaa1df4]
add ecx, 0x78a
movzx eax, byte [eax]
mov edx, dword [esp + 0x50]
mov esi, 0xffff
mov dword [edx + eax*4], ecx
mov eax, dword [esp + 0x38]
movzx ebx, byte [ebx + eax*4]
mov dword [esp + 0x64], ebx
cmp ebx, 0xa0f
je 0x4044c2
mov ebp, dword [esp + 0x6c]
lea eax, [ebx + 7]
shl eax, 4
add eax, ebp
mov dword [esp + 0x60], eax
add word [edi], si
movzx eax, word [edi]
mov edx, dword [0xaa1e24]
add eax, eax
mov esi, dword [esp + 0x28]
add edx, edx
mov ecx, dword [ebp + eax*8]
movzx eax, byte [0xaa1dfa]
xor ecx, ebx
imul ecx, eax
mov ebp, dword [esp + 0x64]
movzx ebx, byte [esp + 0x68]
mov dword [esp + 0x38], ebx
mov ebx, dword [esp + 0x14]
imul ecx, dword [0xaa1de0]
and dword [esi + edx*8], ecx
mov edx, dword [0xaa1e14]
mov al, byte [0xaa1df8]
xor ebp, dword [0xaa1de4]
mov byte [esp + 0x40], al
mov eax, dword [esp + 0x34]
mov dword [esp + 0x44], edx
dec edx
mov dword [0xaa1e14], edx
movzx ecx, word [edi]
movzx edi, byte [esp + 0x11]
mov al, byte [eax + edx*8]
mov edx, dword [esp + 0x5c]
add edi, dword [ecx*4 + 0x16e6]
and al, byte [ecx + edx]
dec byte [edx]
mov byte [esp + 0x3c], al
movzx eax, byte [edx]
mov esi, dword [esi + eax*4]
mov eax, dword [esp + 0x1c]
add esi, dword [esp + 0x54]
movzx edx, word [eax + 0x3ac6]
mov eax, dword [0xaa1e08]
dec eax
mov dword [0xaa1e08], eax
lea ecx, [eax + 0xa5f]
mov eax, dword [esp + 0x14]
movzx eax, word [eax]
movzx eax, word [ebx + eax*2]
mov ebx, dword [esp + 0x38]
xor eax, ebx
mov bl, byte [esp + 0x64]
push eax
push ecx
push dword [esp + 0x6c]
inc byte [esp + 0x74]
push edx
push ebx
push esi
push edi
push dword [esp + 0x58]
push dword [esp + 0x60]
push ebp
push dword [esp + 0x6c]
push dword [esp + 0x64]
call fcn.004125d7
mov edx, dword [0xaa1e28]
add esp, 0x30
mov edi, dword [esp + 0x14]
mov ecx, edx
mov ebp, dword [esp + 0x6c]
mov byte [esp + 0x11], al
mov eax, dword [esp + 0x18]
imul eax, ecx
inc edx
mov dword [0xaa1e28], edx
inc word [edi]
movzx ecx, word [edi]
sub bl, byte [ebp + 0xe54]
mov dword [esp + 0x18], eax
mov eax, dword [esp + 0x24]
or byte [ecx + eax], bl
inc word [edi]
mov edx, dword [0xaa1e24]
movzx eax, word [edi]
mov ebx, dword [esp + 0x50]
mov ecx, dword [ebx + eax*8]
mov eax, dword [esp + 0x5c]
xor ecx, dword [ebx + 0xd08]
movzx eax, byte [eax]
movzx eax, byte [eax*4 + 0x18ea]
imul ecx, eax
mov eax, dword [esp + 0x54]
sub ecx, dword [edx*4 + 0x9a8]
mov dword [edx*4 + 0x9a8], ecx
mov ebx, dword [ebp + eax*4 + 0x2c]
cmp ebx, dword [eax*4 + 0x16e6]
jge 0x40449f
mov esi, dword [esp + 0x60]
lea ebp, [edi + 0xa]
lea ebp, [ebp + ebx*8]
xor edx, edx
mov ecx, dword [0xaa1e28]
mov eax, ebx
div dword [esi]
movzx eax, word [ebp]
sub ecx, eax
push ecx
push edx
call fcn.00403d32
mov edx, dword [esp + 0x58]
lea ebp, [ebp + 8]
pop ecx
pop ecx
mov ecx, dword [0xaa1e14]
mov dword [edx + ecx*4], eax
mov eax, dword [esp + 0x2c]
movzx ecx, word [edi]
mov ax, word [eax*4 + 0x1766]
mov word [edi + ecx*2 + 0xa], ax
movzx eax, word [edi + 0x38f8]
xor eax, dword [0xaa1dfc]
cdq
idiv dword [ebx*4 + 0x9a8]
mov eax, dword [esp + 0x54]
mov dword [ebx*4 + 0x9a8], edx
inc ebx
cmp ebx, dword [eax*4 + 0x16e6]
jl 0x404432
mov ebp, dword [esp + 0x6c]
mov ebx, dword [esp + 0x64]
mov esi, 0xffff
add dword [esp + 0x60], 0x10
inc ebx
mov dword [esp + 0x64], ebx
cmp ebx, 0xa0f
jne 0x4042c0
mov ebp, dword [esp + 0x30]
movzx eax, word [edi]
movzx eax, byte [eax + 0x18ea]
mov dword [esp + 0x64], eax
cmp eax, 0x51f
jbe 0x40471b
mov edx, dword [esp + 0x2c]
mov ecx, dword [esp + 0x28]
lea ecx, [ecx + edx*4]
mov dword [esp + 0x6c], ecx
movzx ecx, byte [esp + 0x13]
mov dword [esp + 0x38], ecx
mov cl, byte [esp + 0x68]
movzx ecx, cl
mov dword [esp + 0x44], ecx
mov ecx, dword [esp + 0x18]
and ecx, 0xbfd
mov dword [esp + 0x3c], ecx
mov ecx, ebp
or ecx, 0xb2
mov dword [esp + 0x48], ecx
mov ecx, eax
shl ecx, 4
add eax, 3
mov dword [esp + 0x60], ecx
lea eax, [edi + eax*2]
mov dword [esp + 0x2c], eax
mov cx, word [0xaa1df8]
mov ebp, dword [0xaa1e14]
mov edx, dword [esp + 0x20]
dec ebp
movzx ebx, byte [0xaa1dfa]
movzx eax, cx
add cx, si
imul eax, eax, 6
push dword [esp + 0x30]
mov dword [0xaa1e14], ebp
mov dword [esp + 0x44], ebp
mov ebp, dword [esp + 0x64]
movzx edi, word [eax + edx]
mov eax, 0x9a8
mov word [0xaa1df8], cx
inc dword [eax]
mov eax, dword [eax]
mov ecx, dword [0xaa1e24]
mov esi, dword [eax*4 + 0x9c8]
mov eax, dword [0xaa1e0c]
imul esi, dword [esp + 0x34]
movzx edx, word [eax + ecx*2]
mov eax, dword [0xaa1e10]
mov ecx, dword [esp + 0x70]
mov eax, dword [eax + ebp]
xor eax, dword [esp + 0x68]
mov ecx, dword [ecx]
mov ebp, dword [esp + 0x44]
add ecx, 0x19ef
push eax
push dword [esp + 0x40]
push ecx
push edx
push esi
push dword [esp + 0x5c]
push edi
push 0x1a15
push ebx
push ebp
mov ebp, dword [esp + 0x90]
push ebp
call fcn.00412af2
mov ebx, dword [esp + 0x44]
xor edx, edx
mov esi, dword [esp + 0x88]
mov dword [0xaa1e08], eax
mov eax, ebp
or ebp, 0x14dc
movzx ecx, word [ebx]
push ebp
div dword [esi + ecx*4]
push edx
call fcn.00403d32
mov ecx, dword [esp + 0x60]
xor edx, edx
mov dword [0xaa1e24], eax
mov eax, dword [0xaa1e1c]
movzx esi, word [ebx]
xor eax, 0xbf4
mov dword [esp + 0x78], eax
mov al, byte [esp + 0xa8]
dec al
mov byte [esp + 0xa8], al
movzx eax, al
lea eax, [ecx + eax*4]
mov ecx, dword [esp + 0x58]
mov dword [esp + 0xa4], eax
mov eax, dword [esp + 0x88]
movzx ebp, word [eax + esi*4]
mov eax, dword [esp + 0x54]
movzx ebx, word [eax + esi*2 + 0xe]
mov eax, dword [esp + 0x8c]
add ebx, 0xca
movzx edi, word [ecx + eax*8]
mov ecx, 0x9a8
mov eax, dword [0xaa1e18]
mov ecx, dword [ecx]
movzx ecx, byte [ecx + eax]
mov eax, dword [esp + 0x70]
div ecx
mov eax, dword [esp + 0x5c]
movzx eax, byte [eax + 0x1b6c]
mov ecx, 0x4c20
push 0x12c5
push eax
push dword [esp + 0x7c]
mov eax, dword [esp + 0x6c]
push dword [eax + esi*4]
movzx eax, word [ecx]
push dword [esp + 0x90]
push edx
push edi
push ebx
push ebp
push eax
mov eax, dword [esp + 0xcc]
push dword [eax]
push dword [esp + 0xa4]
call fcn.00411f4d
mov edi, dword [esp + 0x94]
xor edx, edx
mov ebx, dword [esp + 0xcc]
add esp, 0x68
mov ecx, dword [esp + 0x34]
mov word [edi], ax
add edi, 2
mov eax, dword [esp + 0x18]
add dword [ecx + ebx*4], eax
mov eax, 0x18ea
mov ecx, dword [esp + 0x14]
mov dword [esp + 0x2c], edi
movzx esi, byte [eax]
movzx eax, byte [ebx + 0x18ea]
movzx ecx, word [ecx + 0x90c]
div ecx
mov ecx, dword [esp + 0x5c]
xor byte [esi + ecx + 1], al
inc ebx
mov eax, dword [esp + 0x60]
mov esi, 0xffff
add eax, 0x10
mov dword [esp + 0x64], ebx
mov dword [esp + 0x60], eax
cmp eax, 0x51f0
jg 0x40452b
movzx eax, byte [esp + 0x68]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x3c
ret