Function at 0x415110
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff8
sub esp, 0x2c0
mov esi, esp
mov eax, dword [ebp + 0xc]
push eax
sub esp, 0x90
mov dword [esi + 0x48], esp
sub esp, 0x24
mov dword [esi + 4], esp
sub esp, 0xc
mov dword [esi + 0x54], esp
sub esp, 0x10
mov edi, esp
sub esp, 8
mov ecx, esp
mov dword [esi + 0x70], ecx
mov dword [esi + 0x18], ecx
sub esp, 0xc
mov ecx, esp
mov dword [esi + 0x6c], ecx
mov dword [esi + 0x94], ecx
push eax
mov dword [esi + 0x68], esp
sub esp, 8
mov dword [esi + 0xa8], esp
sub esp, 0xc
mov ecx, esp
mov dword [esi + 0x84], ecx
mov dword [esi + 0xa0], ecx
sub esp, 0x180
mov dword [esi + 0x34], esp
sub esp, 0x24
mov dword [esi + 0x3c], esp
sub esp, 0x20
mov dword [esi + 0x58], esp
push eax
mov dword [esi + 0x44], esp
sub esp, 8
mov dword [esi + 0xc8], esp
push eax
mov dword [esi + 0x114], esp
sub esp, 0xc
mov dword [esi + 0x10c], esp
sub esp, 0x24
mov dword [esi + 0x5c], esp
sub esp, 0x20
mov dword [esi + 0xc4], esp
sub esp, 8
mov dword [esi + 0x60], esp
push eax
mov dword [esi + 0x110], esp
sub esp, 0xc
mov dword [esi + 0x88], esp
sub esp, 0x44
mov dword [esi + 0xa4], esp
sub esp, 0xc
mov dword [esi + 0x98], esp
sub esp, 0x10
mov dword [esi + 0x40], esp
sub esp, 0x18
mov dword [esi + 0xf0], esp
push eax
mov dword [esi + 0x74], esp
push eax
mov dword [esi + 0x90], esp
sub esp, 8
mov dword [esi + 0xe4], esp
sub esp, 0xc
mov dword [esi + 0xdc], esp
sub esp, 0x30
mov dword [esi + 0xd8], esp
sub esp, 0x3c
mov dword [esi + 0xd4], esp
sub esp, 0x44
mov dword [esi + 0xcc], esp
sub esp, 0x10
mov dword [esi + 0x64], esp
push eax
mov dword [esi + 0xf4], esp
push eax
mov dword [esi + 0x11c], esp
sub esp, 8
mov dword [esi + 0xb0], esp
sub esp, 8
mov ecx, esp
and ecx, 0xfffffff8
mov dword [esi + 0xe8], ecx
mov esp, ecx
push eax
push eax
mov dword [esi + 0xe0], esp
sub esp, 8
mov ecx, esp
and ecx, 0xfffffff8
mov dword [esi + 0xec], ecx
mov esp, ecx
push eax
sub esp, 8
mov dword [esi + 0xb4], esp
sub esp, 0xc
mov dword [esi + 0x118], esp
sub esp, 8
mov ecx, esp
and ecx, 0xfffffff8
mov dword [esi + 0xfc], ecx
mov esp, ecx
push eax
sub esp, 8
mov dword [esi + 0xb8], esp
sub esp, 8
mov dword [esi + 0x8c], esp
sub esp, 0xc
mov ebx, esp
sub esp, 0x88
mov ecx, esp
and ecx, 0xfffffff8
mov dword [esi + 0xac], ecx
mov esp, ecx
push eax
sub esp, 0x18
mov edx, esp
sub esp, 0x18
mov dword [esi + 0x12c], esp
push eax
mov dword [esi + 0x100], esp
sub esp, 0xc
mov dword [esi + 0x130], esp
sub esp, 0x10
mov dword [esi + 0x128], esp
sub esp, 0x14
mov ecx, esp
mov dword [esi + 0xd0], ebx
mov dword [esi + 0x2c], edi
mov dword [esi + 0xf8], edx
mov dword [esi + 0x120], ecx
sub esp, 0xc
mov dword [esi + 0x124], esp
mov eax, dword [eax + 4]
mov edi, 0xfffffffe
nop
nop
nop
nop
cmp word [eax + edi + 2], 0
lea edi, [edi + 2]
jne 0x415310
sar edi, 1
lea ecx, [esi + 0x50]
push ecx
push 0
push 0
push edi
push eax
push 0
call dword [0x44aeec]
mov dword [esi + 0x138], 0x733231d3
mov dword [esi + 0x13c], 0
xor ecx, ecx
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov edx, ecx
and edx, 4
mov ebx, ecx
xor ebx, 0xcc
lea edx, [ebx + edx*2]
xor dl, byte [esi + ecx + 0x138]
add dl, 4
mov byte [esi + ecx + 0x138], dl
mov edx, 1
sub edx, ecx
add ecx, 0xe
and edx, 0xd
and ecx, 0x12
sub ecx, edx
cmp ecx, 8
jb case.default.0x415395
xor ecx, ecx
cmp eax, dword [esi + 0x138]
setne cl
xor eax, eax
jmp dword [ecx*4 + 0x4448b4]
jmp dword [0x4448bc]
mov ebx, dword [esi + 0x50]
lea eax, [ebx + ebx]
test ebx, ebx
jns 0x417f74
mov eax, 0xffffffff
push eax
call fcn.00409730
add esp, 4
lea ecx, [esi + 0x50]
push ecx
push ebx
push eax
push edi
mov eax, dword [ebp + 0xc]
push dword [eax + 4]
push 0
call dword [0x44aeec]
mov ebx, dword [esi + 0x50]
lea eax, [ebx + ebx]
test ebx, ebx
jns 0x417fa1
mov eax, 0xffffffff
push eax
call fcn.00409730
add esp, 4
mov ecx, eax
lea eax, [esi + 0x50]
push eax
push ebx
mov ebx, ecx
push ecx
push edi
mov eax, dword [ebp + 0xc]
push dword [eax + 4]
push 0
call dword [0x44aeec]
jmp dword [0x4448c4]
mov dword [esi + 0x38], ebx
not eax
shr eax, 0x1f
jmp dword [eax*4 + 0x4448cc]
jmp dword [0x4448d4]
push dword [esi + 0x38]
call fcn.00409740
add esp, 4
mov ecx, dword [0x4448e8]
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
jmp ecx
mov eax, dword [esi + 0x50]
mov ecx, eax
add ecx, 0xd
jns 0x418013
mov eax, 0xffffffff
jmp 0x41801a
lea eax, [eax*2 + 0x1a]
push eax
call fcn.00409730
add esp, 4
mov ebx, eax
mov dword [esi + 0x138], 0xe33ee10c
mov dword [esi + 0x13c], 0xe715e505
mov dword [esi + 0x140], 0xfbdaf90c
mov dword [esi + 0x144], 0xff1bfd2a
mov dword [esi + 0x148], 0xf301f102
mov dword [esi + 0x14c], 0xf709f50d
mov dword [esi + 0x150], 0x8b8a8976
mov byte [esi + 0x154], 0
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx ecx, byte [esi + eax + 0x138]
mov edx, 0xd7
sub edx, eax
mov edi, edx
and edi, ecx
not ecx
or ecx, edx
add ecx, eax
add ecx, 0x29
or ecx, edi
add cl, 0x38
mov byte [esi + eax + 0x138], cl
mov ecx, eax
and ecx, 1
xor eax, 1
lea eax, [eax + ecx*2]
cmp eax, 0x1d
jb 0x418080
mov eax, dword [esi + 0x38]
movzx ecx, word [eax]
mov eax, ebx
test cx, cx
je 0x4180e1
mov eax, dword [esi + 0x38]
lea edx, [eax + 2]
mov eax, ebx
nop
nop
nop
mov word [eax], cx
add eax, 2
movzx ecx, word [edx]
add edx, 2
test cx, cx
jne 0x4180d0
mov word [eax], 0
movzx ecx, word [esi + 0x138]
test cx, cx
je 0x418111
lea edx, [esi + 0x13a]
nop
nop
nop
nop
nop
nop
nop
nop
mov word [eax], cx
add eax, 2
movzx ecx, word [edx]
add edx, 2
test cx, cx
jne 0x418100
mov word [eax], 0
lea eax, [esi + 0x10]
push 0x60
push 3
push 0x120089
push eax
mov dword [esi + 0xc], ebx
push ebx
call fcn.0043e510
add esp, 0x14
not eax
shr eax, 0x1f
jmp dword [eax*4 + 0x4448ec]
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret