Function at 0x40453e
Capabilities:
Encode data using xor

Disassembly:
sub esp, 0x6c
push ebx
mov ebx, dword [esp + 0x74]
xor eax, eax
push edi
mov edi, ecx
mov dword [esp + 0xc], eax
mov dword [esp + 0x10], edi
mov ecx, dword [edi + 8]
shl ecx, 2
mov dword [esp + 8], ecx
test ebx, ebx
jle 0x4047b3
push ebp
mov ebp, dword [esp + 0x80]
push esi
mov eax, dword [edi + 0x10]
dec eax
cmp eax, 9
ja case.default.0x40457b
jmp dword [eax*4 + 0x4047be]
push ebp
push ebx
mov ecx, edi
call fcn.0040427b
mov ecx, dword [esp + 0x10]
xor ebx, ebx
jmp 0x40479a
push ebp
push ebp
mov ecx, edi
call fcn.00404505
mov ecx, dword [esp + 0x10]
mov eax, dword [esp + 0x14]
jmp 0x40479e
cmp ebx, 0x20
jg case.0x40457b.2
push ebx
lea eax, [esp + 0x60]
push ebp
push eax
call fcn.0042aa50
add esp, 0xc
lea eax, [esp + 0x5c]
mov ecx, edi
push eax
push eax
call fcn.00404505
lea eax, [ebp + 0x10]
push eax
lea ecx, [esp + 0x60]
push ecx
push eax
lea eax, [ebx - 0x10]
push eax
call fcn.004058ad
lea eax, [ebx - 0x10]
push eax
lea eax, [esp + 0x80]
push eax
lea eax, [esp + 0x74]
push eax
call fcn.0042aa50
add esp, 0x1c
lea eax, [esp + 0x5c]
mov ecx, edi
push ebp
push eax
call fcn.00404505
push ebp
lea eax, [edi + 0x11c]
push eax
push ebp
push dword [esp + 0x1c]
call fcn.004058ad
add esp, 0x10
xor ebx, ebx
jmp 0x40459f
push ecx
lea eax, [esp + 0x20]
push ebp
push eax
call fcn.0042aa50
add esp, 0xc
mov ecx, edi
push ebp
push ebp
call fcn.00404505
push ebp
lea esi, [edi + 0x11c]
push esi
push ebp
push dword [esp + 0x1c]
call fcn.004058ad
push dword [esp + 0x20]
lea eax, [esp + 0x30]
push eax
push esi
call fcn.0042aa50
add esp, 0x1c
jmp 0x40459f
lea esi, [edi + 0x11c]
mov ecx, edi
push esi
push esi
call fcn.004047e6
push ebp
push ebp
push esi
push dword [esp + 0x1c]
call fcn.004058ad
add esp, 0x10
jmp 0x40459f
mov ecx, dword [esp + 0x18]
lea edi, [esp + 0x2c]
mov esi, ebp
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
lea edi, [ecx + 0x11c]
push edi
push edi
call fcn.004047e6
push ebp
push ebp
push edi
push dword [esp + 0x1c]
call fcn.004058ad
lea esi, [esp + 0x3c]
add esp, 0x10
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
mov edi, dword [esp + 0x18]
jmp 0x40459f
xor esi, esi
test ebx, ebx
jle 0x40471e
lea eax, [edi + 0x11c]
lea ecx, [esp + 0x3c]
push ecx
push eax
mov ecx, edi
call fcn.004047e6
lea eax, [edi + 0x11c]
mov ecx, edi
push eax
push 8
call fcn.00405648
mov eax, dword [ebp]
mov dword [edi + 0x124], eax
mov eax, dword [ebp + 4]
mov dword [edi + 0x128], eax
lea eax, [esi + ebp]
push eax
push eax
lea eax, [esp + 0x44]
push eax
push 8
call fcn.004058ad
add esi, 8
lea eax, [edi + 0x11c]
add esp, 0x10
cmp esi, ebx
jl 0x4046ca
mov ecx, dword [esp + 0x10]
xor ebx, ebx
jmp 0x4045a3
xor eax, eax
mov dword [esp + 0x84], eax
test ebx, ebx
jle 0x40471e
mov esi, dword [esp + 0x80]
lea ecx, [edi + 0x11c]
mov bl, byte [eax + ebp]
lea eax, [esp + 0x4c]
push eax
push ecx
mov ecx, edi
call fcn.004047e6
mov ecx, dword [esp + 0x84]
mov al, byte [esp + 0x4c]
xor byte [ecx + ebp], al
lea eax, [edi + 0x11c]
push eax
push 1
mov ecx, edi
call fcn.00405648
mov eax, dword [esp + 0x84]
lea ecx, [edi + 0x11c]
inc eax
mov byte [edi + 0x12b], bl
mov dword [esp + 0x84], eax
cmp eax, esi
jl 0x40473f
jmp 0x40471a
mov eax, 0x527
jmp 0x40479a
mov eax, 0x425
mov dword [esp + 0x14], eax
sub ebx, ecx
add ebp, ecx
mov dword [esp + 0x80], ebx
test ebx, ebx
jg 0x40456e
pop esi
pop ebp
pop edi
pop ebx
add esp, 0x6c
ret 8