Function at 0x40ab8a
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ecx
cmp dword [ebp + 0xc], 0
je 0x40ade4
push ebx
push esi
push edi
mov edi, dword [ebp + 8]
push 0
push 0x80
mov esi, dword [edi + 0x44]
mov eax, esi
mov ecx, dword [edi + 0x40]
shrd ecx, eax, 3
sar eax, 3
push eax
push ecx
call fcn.00401130
mov edx, esi
mov dword [ebp - 4], eax
sar edx, 0x1f
mov eax, esi
or edx, dword [edi + 0x40]
mov edi, esi
mov ebx, edx
mov ecx, edx
shld ebx, edi, 8
shld edx, esi, 8
shrd eax, ecx, 8
shl edi, 8
xor edi, eax
shr ecx, 8
xor ebx, ecx
shl esi, 8
mov eax, 0xff00ff
and edi, eax
and ebx, eax
xor edi, esi
xor ebx, edx
mov edx, edi
mov eax, edi
mov esi, ebx
mov ecx, ebx
shld esi, edx, 0x10
shrd eax, ecx, 0x10
shl edx, 0x10
xor edx, eax
shr ecx, 0x10
xor esi, ecx
mov eax, 0xffff
and edx, eax
and esi, eax
mov eax, dword [ebp + 8]
shld ebx, edi, 0x10
xor esi, ebx
shl edi, 0x10
xor edx, edi
mov dword [eax + 0x44], esi
mov esi, dword [eax + 0x4c]
mov edi, esi
mov dword [eax + 0x40], edx
mov edx, esi
sar edx, 0x1f
or edx, dword [eax + 0x48]
mov eax, esi
mov ebx, edx
mov ecx, edx
shld ebx, edi, 8
shrd eax, ecx, 8
shl edi, 8
shld edx, esi, 8
xor edi, eax
shr ecx, 8
xor ebx, ecx
shl esi, 8
mov eax, 0xff00ff
and edi, eax
and ebx, eax
xor edi, esi
xor ebx, edx
mov edx, edi
mov esi, ebx
shld esi, edx, 0x10
mov eax, edi
shl edx, 0x10
mov ecx, ebx
shrd eax, ecx, 0x10
shld ebx, edi, 0x10
xor edx, eax
shr ecx, 0x10
xor esi, ecx
shl edi, 0x10
mov eax, 0xffff
and esi, eax
and edx, eax
mov eax, dword [ebp - 4]
xor esi, ebx
mov ebx, dword [ebp + 8]
xor edx, edi
push 0x70
mov dword [ebx + 0x48], edx
mov dword [ebx + 0x4c], esi
test eax, eax
je 0x40acf5
mov ecx, 0x80
mov byte [eax + ebx + 0x50], cl
inc eax
pop edx
cmp eax, edx
jae 0x40acc5
sub edx, eax
add eax, 0x50
push edx
add eax, ebx
push 0
push eax
call sub.msvcrt.dll_memset
jmp 0x40ad03
cmp eax, ecx
jae 0x40acdc
sub ecx, eax
add eax, 0x50
push ecx
add eax, ebx
push 0
push eax
call sub.msvcrt.dll_memset
add esp, 0xc
lea esi, [ebx + 0x50]
push esi
push ebx
call fcn.0040ae71
push 0x7e
push 0
push esi
call sub.msvcrt.dll_memset
add esp, 0x14
jmp 0x40ad06
lea esi, [ebx + 0x50]
push 0
push esi
call sub.msvcrt.dll_memset
mov byte [esi], 0x80
add esp, 0xc
mov eax, dword [ebx + 0x48]
mov dword [ebx + 0xc0], eax
mov eax, dword [ebx + 0x4c]
mov dword [ebx + 0xc4], eax
mov eax, dword [ebx + 0x40]
mov dword [ebx + 0xc8], eax
mov eax, dword [ebx + 0x44]
mov dword [ebx + 0xcc], eax
lea eax, [ebx + 0x50]
push eax
push ebx
call fcn.0040ae71
pop ecx
pop ecx
xor ecx, ecx
mov dword [ebp - 4], ecx
mov esi, dword [ebx + ecx*8 + 4]
mov edx, esi
sar edx, 0x1f
mov edi, esi
or edx, dword [ebx + ecx*8]
mov eax, esi
mov ebx, edx
mov ecx, edx
shld ebx, edi, 8
shrd eax, ecx, 8
shld edx, esi, 8
shl edi, 8
xor edi, eax
shr ecx, 8
xor ebx, ecx
shl esi, 8
mov eax, 0xff00ff
and edi, eax
and ebx, eax
xor ebx, edx
xor edi, esi
mov edx, edi
mov esi, ebx
shld esi, edx, 0x10
mov eax, edi
mov ecx, ebx
shrd eax, ecx, 0x10
shl edx, 0x10
xor edx, eax
shr ecx, 0x10
xor esi, ecx
mov eax, 0xffff
mov ecx, dword [ebp - 4]
and esi, eax
shld ebx, edi, 0x10
and edx, eax
xor esi, ebx
shl edi, 0x10
mov ebx, dword [ebp + 8]
xor edx, edi
mov eax, edx
mov dword [ebx + ecx*8], edx
mov edx, dword [ebp + 0xc]
mov dword [ebx + ecx*8 + 4], esi
mov dword [edx], eax
mov eax, dword [ebx + ecx*8 + 4]
mov dword [edx + 4], eax
add edx, 8
inc ecx
mov dword [ebp + 0xc], edx
mov dword [ebp - 4], ecx
cmp ecx, 8
jl 0x40ad3b
push 0xd0
push 0
push ebx
call sub.msvcrt.dll_memset
add esp, 0xc
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret