Function at 0x405f40
Capabilities:
Encode data using xor

Disassembly:
mov ecx, dword [esp + 0xc]
sub esp, 0x10
mov eax, ecx
sar eax, 4
test cl, 0xf
je 0x405f58
or eax, 0xffffffff
add esp, 0x10
ret
push ebx
mov ebx, dword [esp + 0x18]
push ebp
push esi
push edi
mov edi, dword [esp + 0x30]
mov esi, dword [esp + 0x28]
mov ecx, edi
sub ecx, ebx
test cl, 3
jne 0x406017
mov edx, esi
sub edx, ebx
test dl, 3
jne 0x406017
mov ecx, eax
dec eax
test ecx, ecx
je 0x40612a
inc eax
mov dword [esp + 0x2c], eax
mov edx, ebx
mov ebp, dword [edx]
mov eax, dword [edx + 4]
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x34]
mov ecx, dword [edx + 8]
push eax
push esi
push ebx
mov edx, dword [edx + 0xc]
mov dword [esp + 0x24], ecx
mov dword [esp + 0x28], edx
call fcn.00406ef0
mov ecx, dword [edi]
mov edx, dword [esi]
mov eax, dword [esi + 4]
xor edx, ecx
mov ecx, dword [esi + 8]
mov dword [esi], edx
mov edx, dword [edi + 4]
add esp, 0xc
xor eax, edx
mov edx, edi
mov dword [esi + 4], eax
mov eax, dword [edi + 8]
xor ecx, eax
mov eax, dword [esi + 0xc]
mov dword [esi + 8], ecx
mov ecx, dword [edi + 0xc]
xor eax, ecx
mov ecx, dword [esp + 0x18]
mov dword [esi + 0xc], eax
mov eax, dword [esp + 0x14]
mov dword [edx], ebp
add ebx, 0x10
add esi, 0x10
mov dword [edx + 4], eax
mov eax, dword [esp + 0x1c]
mov dword [edx + 8], ecx
mov dword [edx + 0xc], eax
mov eax, dword [esp + 0x2c]
dec eax
mov dword [esp + 0x2c], eax
jne 0x405f92
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x10
ret
mov ecx, eax
dec eax
test ecx, ecx
je 0x40612a
inc eax
mov dword [esp + 0x2c], eax
mov edx, ebx
mov ebp, dword [edx]
mov eax, dword [edx + 4]
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x34]
mov ecx, dword [edx + 8]
push eax
push esi
push ebx
mov edx, dword [edx + 0xc]
mov dword [esp + 0x24], ecx
mov dword [esp + 0x28], edx
call fcn.00406ef0
mov cl, byte [edi]
mov dl, byte [esi]
mov al, byte [esi + 1]
xor dl, cl
mov cl, byte [esi + 2]
mov byte [esi], dl
mov dl, byte [edi + 1]
add esp, 0xc
xor al, dl
mov dl, byte [esi + 3]
mov byte [esi + 1], al
mov al, byte [edi + 2]
xor cl, al
mov al, byte [esi + 4]
mov byte [esi + 2], cl
mov cl, byte [edi + 3]
xor dl, cl
mov cl, byte [esi + 5]
mov byte [esi + 3], dl
mov dl, byte [edi + 4]
xor al, dl
mov dl, byte [esi + 6]
mov byte [esi + 4], al
mov al, byte [edi + 5]
xor cl, al
mov al, byte [esi + 7]
mov byte [esi + 5], cl
mov cl, byte [edi + 6]
xor dl, cl
mov cl, byte [esi + 8]
mov byte [esi + 6], dl
mov dl, byte [edi + 7]
xor al, dl
mov dl, byte [esi + 9]
mov byte [esi + 7], al
mov al, byte [edi + 8]
xor cl, al
mov al, byte [esi + 0xa]
mov byte [esi + 8], cl
mov cl, byte [edi + 9]
xor dl, cl
mov cl, byte [esi + 0xb]
mov byte [esi + 9], dl
mov dl, byte [edi + 0xa]
xor al, dl
mov dl, byte [esi + 0xc]
mov byte [esi + 0xa], al
mov al, byte [edi + 0xb]
xor cl, al
mov al, byte [esi + 0xd]
mov byte [esi + 0xb], cl
mov cl, byte [edi + 0xc]
xor dl, cl
mov cl, byte [esi + 0xe]
mov byte [esi + 0xc], dl
mov dl, byte [edi + 0xd]
xor al, dl
mov edx, edi
mov byte [esi + 0xd], al
mov al, byte [edi + 0xe]
xor cl, al
mov al, byte [esi + 0xf]
mov byte [esi + 0xe], cl
mov cl, byte [edi + 0xf]
xor al, cl
mov byte [esi + 0xf], al
mov eax, dword [esp + 0x14]
mov dword [edx], ebp
mov ecx, dword [esp + 0x18]
mov dword [edx + 4], eax
mov eax, dword [esp + 0x1c]
add ebx, 0x10
mov dword [edx + 8], ecx
add esi, 0x10
mov dword [edx + 0xc], eax
mov eax, dword [esp + 0x2c]
dec eax
mov dword [esp + 0x2c], eax
jne 0x406027
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x10
ret