Function at 0x405283
Capabilities:
Encode data using xor

Disassembly:
push eax
sub dword [esp], eax
or dword [esp], ebp
push esp
pop ebp
add esp, 0xfffffff0
cmp dword [ebx + 0x4ec075], 0
jne 0x4052c1
lea eax, [ebx + 0x4ec1a3]
mov dword [ebp - 0xc], 0
push dword [ebp - 0xc]
add dword [esp], eax
call dword [ebx + sym.imp.user32.dll_GetCursorPos]
mov dword [ebp - 8], edx
sub edx, edx
or edx, eax
mov dword [ebx + 0x4ec075], edx
mov edx, dword [ebp - 8]
push edx
xor edx, dword [esp]
or edx, dword [ebp + 8]
and eax, 0
xor eax, edx
pop edx
cmp dword [ebx + 0x4ec218], 0
jne 0x405303
and dword [ebp - 8], 0
push dword [ebp - 8]
or dword [esp], eax
call dword [ebx + sym.imp.kernel32.dll_GetCurrentThread]
push ebp
sub ebp, dword [esp]
xor ebp, eax
and dword [ebx + 0x4ec218], 0
or dword [ebx + 0x4ec218], ebp
pop ebp
sub eax, eax
xor eax, dword [esp]
add esp, 4
push edi
mov edi, dword [eax + 0x3c]
push eax
pop dword [ebp - 8]
add dword [ebp - 8], edi
push dword [ebp - 8]
pop eax
pop edi
cmp dword [ebx + 0x4ec351], 0
jne 0x405341
and dword [ebp - 0x10], 0
push dword [ebp - 0x10]
add dword [esp], eax
call dword [ebx + sym.imp.kernel32.dll_GetLastError]
push eax
pop dword [ebp - 8]
push dword [ebp - 8]
pop dword [ebx + 0x4ec351]
xor eax, eax
pop dword [ebp - 8]
or eax, dword [ebp - 8]
push ebp
and dword [esp], 0
xor dword [esp], eax
cmp dword [ebx + 0x4ec034], 0
jne 0x405376
push dword [ebp - 8]
mov dword [esp], eax
call dword [ebx + sym.imp.kernel32.dll_GetLastError]
mov dword [ebp - 0xc], esi
xor esi, esi
or esi, eax
mov dword [ebx + 0x4ec034], esi
mov esi, dword [ebp - 0xc]
sub eax, eax
pop dword [ebp - 8]
add eax, dword [ebp - 8]
mov dword [ebp - 8], ebx
xor ebx, ebx
xor ebx, eax
push ebx
pop edi
mov ebx, dword [ebp - 8]
cmp dword [ebx + 0x4ec173], 0
jne 0x4053ab
push dword [ebx + 0x4ec3b0]
call dword [ebx + sym.imp.user32.dll_GetAsyncKeyState]
push ecx
and ecx, 0
or ecx, eax
and dword [ebx + 0x4ec173], 0
xor dword [ebx + 0x4ec173], ecx
pop ecx
movzx eax, word [edi + 6]
cmp dword [ebx + 0x4ec239], 0
jne 0x4053e2
push ebx
and dword [esp], 0
xor dword [esp], eax
call dword [ebx + sym.imp.user32.dll_GetCaretBlinkTime]
mov dword [ebp - 8], edi
xor edi, edi
or edi, eax
mov dword [ebx + 0x4ec239], edi
mov edi, dword [ebp - 8]
and eax, 0
mov eax, dword [esp]
sub esp, 0xfffffffc
push edi
xor edi, dword [esp]
xor edi, eax
and dword [ebp - 4], 0
xor dword [ebp - 4], edi
pop edi
cmp dword [ebx + 0x4ec1f7], 0
jne 0x405421
lea eax, [ebx + 0x4ec23d]
push ebx
and dword [esp], 0
xor dword [esp], eax
call dword [ebx + sym.imp.user32.dll_GetCursorPos]
push esi
and esi, 0
xor esi, eax
and dword [ebx + 0x4ec1f7], 0
xor dword [ebx + 0x4ec1f7], esi
pop esi
push ecx
and dword [esp], 0
or dword [esp], edi
mov dword [ebp - 0x10], ebx
xor ebx, ebx
xor ebx, dword [edi + 0x54]
push ebx
pop edx
mov ebx, dword [ebp - 0x10]
mov dword [ebp - 0xc], edx
and edx, 0
or edx, dword [ebx + 0x4ec2fd]
and edi, 0
or edi, edx
mov edx, dword [ebp - 0xc]
push edx
and edx, 0
xor edx, dword [ebp + 8]
and esi, 0
or esi, edx
pop edx
push eax
and eax, 0
xor eax, edx
and ecx, 0
or ecx, eax
pop eax
cmp edi, esi
je 0x4054a5
movsb byte es:[edi], byte [esi]
dec ecx
jne 0x405467
push dword [ebx + 0x4ec2fd]
pop dword [ebp - 0xc]
push dword [ebp - 0xc]
pop edi
push 0x40
pop dword [ebx + 0x4ec0eb]
lea eax, [ebx + 0x4ec0eb]
push ebp
and dword [esp], 0
or dword [esp], eax
push 2
push eax
and dword [esp], 0
or dword [esp], edx
push ebp
sub dword [esp], ebp
or dword [esp], edi
call dword [ebx + sym.imp.kernel32.dll_VirtualProtect]
pop dword [ebp - 0x10]
mov edi, dword [ebp - 0x10]
push ebp
push edi
pop ebp
add ebp, 0xf8
push ebp
pop edi
pop ebp
push eax
sub dword [esp], eax
xor dword [esp], edi
mov dword [ebp - 0xc], eax
and eax, 0
or eax, dword [ebp + 8]
and esi, 0
or esi, eax
mov eax, dword [ebp - 0xc]
push esi
xor esi, dword [esp]
xor esi, dword [edi + 0x10]
and ecx, 0
xor ecx, esi
pop esi
push 0
or dword [esp], ebx
push esi
pop ebx
add ebx, dword [edi + 0x14]
push ebx
pop esi
pop ebx
mov edi, dword [edi + 0xc]
mov dword [ebp - 0xc], esi
mov esi, dword [ebx + 0x4ec2fd]
add esi, edi
push esi
mov esi, dword [ebp - 0xc]
pop edi
rep movsb byte es:[edi], byte [esi]
xor edi, edi
or edi, dword [esp]
sub esp, 0xfffffffc
push ebx
push edi
pop ebx
add ebx, 0x28
mov edi, ebx
pop ebx
dec dword [ebp - 4]
jne 0x4054b7
and edi, 0
mov edi, dword [esp]
sub esp, 0xfffffffc
mov dword [ebp - 8], ecx
sub ecx, ecx
xor ecx, dword [edi + 0x28]
push ecx
pop eax
mov ecx, dword [ebp - 8]
push edi
mov edi, dword [ebx + 0x4ec2fd]
push eax
pop dword [ebp - 0x10]
add dword [ebp - 0x10], edi
push dword [ebp - 0x10]
pop eax
pop edi
push 0
mov dword [esp], esi
sub esi, esi
or esi, eax
mov dword [ebx + 0x4ec163], esi
pop esi
mov dword [ebp - 0xc], eax
xor eax, eax
or eax, dword [ebx + 0x4ec2fd]
push eax
pop esi
mov eax, dword [ebp - 0xc]
cmp esi, 0
jbe 0x40558c
push edi
xor dword [esp], edi
xor dword [esp], esi
call fcn.00406490
push edx
and dword [esp], 0
add dword [esp], esi
call fcn.00406024
push dword [ebx + 0x4ec245]
call fcn.004068e1
leave
ret 4