Function at 0x4186f5
Capabilities:
Encode data using xor

Disassembly:
sub esp, 0x2c4
push ebx
push ebp
push esi
push edi
mov esi, edx
mov dword [esp + 0x28], 0x93bca3ea
mov edi, ecx
mov dword [esp + 0x3c], esi
mov dword [esp + 0x38], edi
xor edx, edx
mov byte [esp + 0x2c], 0xe5
mov al, byte [esp + edx + 0x28]
xor al, 0xcf
movzx eax, al
mov word [esp + edx*2 + 0x64], ax
inc edx
cmp edx, 5
jl 0x41871a
xor eax, eax
mov dword [esp + 0x30], 0xaec5be77
mov word [esp + 0x6e], ax
xor ecx, ecx
mov word [esp + 0x34], 0xbe77
mov edx, 0xff
mov byte [esp + 0x36], 0xc5
movzx eax, byte [esp + ecx + 0x30]
sub ax, 0x52
and ax, dx
mov word [esp + ecx*2 + 0x70], ax
inc ecx
cmp ecx, 7
jl 0x418750
mov ebx, dword [esp + 0x2dc]
xor eax, eax
mov word [esp + 0x7e], ax
test ebx, ebx
je 0x418b27
lea eax, [esp + 0x64]
push edi
push eax
call fcn.0041b96a
mov ebp, eax
mov dword [esp + 0x30], ebp
pop ecx
pop ecx
test ebp, ebp
je 0x41895e
lea eax, [esp + 0x80]
xor ecx, ecx
push eax
push ebp
mov edx, 0x54e1cc7b
inc ecx
call fcn.00412cbc
call eax
xor ecx, ecx
mov esi, eax
mov edx, 0x17299c7b
mov dword [esp + 0x40], esi
inc ecx
call fcn.00412cbc
cmp esi, 0xffffffff
je 0x418953
mov word [esp + 0x10], 0xacac
mov ebp, eax
push 0x2e
pop eax
mov word [esp + 0x24], ax
mov edx, 0xff
xor eax, eax
xor ecx, ecx
mov word [esp + 0x26], ax
movzx eax, byte [esp + ecx + 0x10]
sub ax, 0x7e
and ax, dx
mov word [esp + ecx*2 + 0x30], ax
inc ecx
cmp ecx, 2
jl 0x4187eb
xor eax, eax
mov word [esp + 0x34], ax
lea eax, [esp + 0x24]
push eax
lea eax, [esp + 0xb0]
push eax
call fcn.00405af6
pop ecx
pop ecx
test eax, eax
je 0x41892c
lea eax, [esp + 0x30]
push eax
lea eax, [esp + 0xb0]
push eax
call fcn.00405af6
pop ecx
pop ecx
test eax, eax
je 0x41892c
test byte [esp + 0x80], 0x10
je 0x41892c
mov dword [esp + 0x14], 0x90a7a059
xor ecx, ecx
mov word [esp + 0x18], 0xa059
mov edx, 0xff
mov byte [esp + 0x1a], 0xa7
movzx eax, byte [esp + ecx + 0x14]
sub ax, 0x34
and ax, dx
mov word [esp + ecx*2 + 0x44], ax
inc ecx
cmp ecx, 7
jl 0x41886a
xor eax, eax
mov word [esp + 0x52], ax
lea eax, [esp + 0xac]
push eax
lea eax, [esp + 0x48]
push edi
push eax
call fcn.0041b96a
mov edi, eax
add esp, 0xc
test edi, edi
je 0x418928
mov dword [esp + 0x1c], 0xb3f7f0a9
xor ecx, ecx
mov word [esp + 0x20], 0xf0a9
mov edx, 0xff
mov byte [esp + 0x22], 0xf7
movzx eax, byte [esp + ecx + 0x1c]
add ax, 0x7c
and ax, dx
mov word [esp + ecx*2 + 0x54], ax
inc ecx
cmp ecx, 7
jl 0x4188c3
xor eax, eax
mov word [esp + 0x62], ax
lea eax, [esp + 0xac]
push eax
push dword [esp + 0x40]
lea eax, [esp + 0x5c]
push eax
call fcn.0041b96a
mov esi, eax
add esp, 0xc
test esi, esi
je 0x41891d
lea ecx, [ebx - 1]
mov edx, esi
push ecx
push dword [esp + 0x2dc]
mov ecx, edi
call fcn.004186f5
push esi
call fcn.004056f0
add esp, 0xc
push edi
call fcn.004056f0
mov esi, dword [esp + 0x44]
pop ecx
mov edi, dword [esp + 0x38]
lea eax, [esp + 0x80]
push eax
push esi
call ebp
test eax, eax
jne 0x4187d5
xor ecx, ecx
mov edx, 0x83fbc401
push esi
inc ecx
call fcn.00412cbc
call eax
mov ebp, dword [esp + 0x28]
push ebp
call fcn.004056f0
mov esi, dword [esp + 0x40]
pop ecx
push dword [esp + 0x2d8]
lea eax, [esp + 0x74]
push edi
push eax
call fcn.0041b96a
mov ebx, eax
add esp, 0xc
mov dword [esp + 0x40], ebx
test ebx, ebx
je 0x418b27
lea eax, [esp + 0x80]
xor ecx, ecx
push eax
push ebx
mov edx, 0x54e1cc7b
inc ecx
call fcn.00412cbc
call eax
xor ecx, ecx
mov edx, 0x17299c7b
inc ecx
mov ebp, eax
call fcn.00412cbc
mov dword [esp + 0x28], eax
cmp ebp, 0xffffffff
je 0x418b20
mov word [esp + 0x10], 0xa3a3
mov ebx, eax
push 0x2e
pop eax
mov word [esp + 0x24], ax
mov edx, 0xff
xor eax, eax
xor ecx, ecx
mov word [esp + 0x26], ax
movzx eax, byte [esp + ecx + 0x10]
sub ax, 0x75
and ax, dx
mov word [esp + ecx*2 + 0x30], ax
inc ecx
cmp ecx, 2
jl 0x4189d4
xor eax, eax
mov word [esp + 0x34], ax
lea eax, [esp + 0x24]
push eax
lea eax, [esp + 0xb0]
push eax
call fcn.00405af6
pop ecx
pop ecx
test eax, eax
je 0x418af5
lea eax, [esp + 0x30]
push eax
lea eax, [esp + 0xb0]
push eax
call fcn.00405af6
pop ecx
pop ecx
test eax, eax
je 0x418af5
test byte [esp + 0x80], 0xa7
je 0x418af5
mov dword [esp + 0x1c], 0xe213e77
xor ecx, ecx
mov word [esp + 0x20], 0x3e77
mov byte [esp + 0x22], 0x21
mov al, byte [esp + ecx + 0x1c]
xor al, 0x52
movzx eax, al
mov word [esp + ecx*2 + 0x54], ax
inc ecx
cmp ecx, 7
jl 0x418a4e
xor eax, eax
mov word [esp + 0x62], ax
lea eax, [esp + 0xac]
push eax
lea eax, [esp + 0x58]
push edi
push eax
call fcn.0041b96a
mov edi, eax
add esp, 0xc
test edi, edi
je 0x418af1
mov dword [esp + 0x14], 0x5a9e9750
xor ecx, ecx
mov word [esp + 0x18], 0x9750
mov edx, 0xff
mov byte [esp + 0x1a], 0x9e
movzx eax, byte [esp + ecx + 0x14]
sub ax, 0x2b
and ax, dx
mov word [esp + ecx*2 + 0x44], ax
inc ecx
cmp ecx, 7
jl 0x418aa0
xor eax, eax
mov word [esp + 0x52], ax
lea eax, [esp + 0xac]
push eax
lea eax, [esp + 0x48]
push esi
push eax
call fcn.0041b96a
mov esi, eax
add esp, 0xc
test esi, esi
je 0x418aea
mov edx, esi
mov ecx, edi
call fcn.00418b32
push esi
call fcn.004056f0
pop ecx
push edi
call fcn.004056f0
pop ecx
mov edi, dword [esp + 0x38]
lea eax, [esp + 0x80]
push eax
push ebp
call ebx
mov esi, dword [esp + 0x3c]
test eax, eax
jne 0x4189be
xor ecx, ecx
mov edx, 0x83fbc401
push ebp
inc ecx
call fcn.00412cbc
call eax
mov ebx, dword [esp + 0x40]
push ebx
call fcn.004056f0
pop ecx
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x2c4
ret