Function at 0x40df90
Capabilities:
Encode data using xor

Disassembly:
mov eax, dword [esp + 8]
sub esp, 0x4c
add eax, 2
push ebx
push ebp
push esi
push edi
lea esi, [esp + 0x1c]
mov edi, 0x10
xor ecx, ecx
xor edx, edx
mov ch, byte [eax + 1]
mov dl, byte [eax - 1]
mov cl, byte [eax]
add eax, 4
shl ecx, 8
or ecx, edx
xor edx, edx
mov dl, byte [eax - 6]
add esi, 4
shl ecx, 8
or ecx, edx
dec edi
mov dword [esi - 4], ecx
jne 0x40dfa7
mov ecx, dword [esp + 0x60]
xor ebp, ebp
mov dword [esp + 0x10], 0x7515e8
mov eax, dword [ecx + 8]
mov edi, dword [ecx + 0xc]
mov esi, dword [ecx + 0x10]
mov edx, dword [ecx + 0x14]
mov ecx, edx
xor ebx, ebx
mov bl, byte [ebp + 0x751568]
xor ecx, esi
and ecx, edi
mov dword [esp + 0x64], edx
xor ecx, edx
mov edx, esi
add ecx, dword [esp + ebx*4 + 0x1c]
mov ebx, dword [esp + 0x10]
mov esi, edi
add ecx, dword [ebx]
mov bl, byte [ebp + 0x7515a8]
and ebx, 0x1f
add eax, ecx
mov ecx, 0x20
mov dword [esp + 0x14], ebx
sub ecx, ebx
mov ebx, eax
shr ebx, cl
mov ecx, dword [esp + 0x14]
shl eax, cl
mov ecx, dword [esp + 0x10]
add ecx, 4
mov dword [esp + 0x10], ecx
or ebx, eax
add edi, ebx
mov ebx, dword [esp + 0x64]
inc ebp
cmp ecx, 0x751628
mov eax, ebx
jb 0x40dfe8
cmp ebp, 0x20
jae 0x40e0b5
lea eax, [ebp*4 + 0x7515e8]
mov dword [esp + 0x10], eax
mov eax, esi
xor ecx, ecx
mov cl, byte [ebp + 0x751568]
xor eax, edi
and eax, edx
mov dword [esp + 0x64], edx
xor eax, esi
mov edx, esi
add eax, dword [esp + ecx*4 + 0x1c]
mov ecx, dword [esp + 0x10]
mov esi, edi
add eax, dword [ecx]
mov ecx, 0x20
add eax, ebx
mov bl, byte [ebp + 0x7515a8]
and ebx, 0x1f
mov dword [esp + 0x14], ebx
sub ecx, ebx
mov ebx, eax
shr ebx, cl
mov ecx, dword [esp + 0x14]
shl eax, cl
or ebx, eax
mov eax, dword [esp + 0x10]
add edi, ebx
mov ebx, dword [esp + 0x64]
add eax, 4
inc ebp
cmp eax, 0x751668
mov dword [esp + 0x10], eax
jb 0x40e058
cmp ebp, 0x30
jae 0x40e124
lea eax, [ebp*4 + 0x7515e8]
mov dword [esp + 0x10], eax
xor ecx, ecx
mov dword [esp + 0x64], edx
mov cl, byte [ebp + 0x751568]
mov eax, ecx
mov ecx, edx
xor ecx, esi
mov edx, esi
mov eax, dword [esp + eax*4 + 0x1c]
xor ecx, edi
add eax, ecx
mov ecx, dword [esp + 0x10]
mov esi, edi
add eax, dword [ecx]
mov ecx, 0x20
add eax, ebx
mov bl, byte [ebp + 0x7515a8]
and ebx, 0x1f
mov dword [esp + 0x14], ebx
sub ecx, ebx
mov ebx, eax
shr ebx, cl
mov ecx, dword [esp + 0x14]
shl eax, cl
or ebx, eax
mov eax, dword [esp + 0x10]
add edi, ebx
mov ebx, dword [esp + 0x64]
add eax, 4
inc ebp
cmp eax, 0x7516a8
mov dword [esp + 0x10], eax
jb 0x40e0c5
cmp ebp, 0x40
jae 0x40e1bb
lea eax, [ebp + 0x7515a8]
lea ecx, [ebp + 0x751568]
mov dword [esp + 0x14], eax
lea eax, [ebp*4 + 0x7515e8]
mov dword [esp + 0x64], ecx
mov dword [esp + 0x10], eax
mov ebp, dword [esp + 0x64]
mov eax, edx
xor ecx, ecx
mov cl, byte [ebp]
not eax
mov ebp, dword [esp + ecx*4 + 0x1c]
mov ecx, dword [esp + 0x10]
or eax, edi
xor eax, esi
add eax, ebp
mov ebp, dword [ecx]
mov ecx, dword [esp + 0x14]
add eax, ebp
add eax, ebx
mov ebx, edx
mov cl, byte [ecx]
mov edx, esi
mov ebp, ecx
mov ecx, 0x20
and ebp, 0x1f
mov esi, edi
mov dword [esp + 0x18], ebp
sub ecx, ebp
mov ebp, eax
shr ebp, cl
mov ecx, dword [esp + 0x18]
shl eax, cl
or ebp, eax
mov eax, dword [esp + 0x10]
add edi, ebp
mov ebp, dword [esp + 0x64]
inc ebp
add eax, 4
mov dword [esp + 0x64], ebp
mov ebp, dword [esp + 0x14]
inc ebp
cmp eax, 0x7516e8
mov dword [esp + 0x10], eax
mov dword [esp + 0x14], ebp
jb 0x40e14c
mov eax, dword [esp + 0x60]
mov ecx, dword [eax + 8]
add ecx, ebx
mov dword [eax + 8], ecx
mov ecx, dword [eax + 0xc]
add ecx, edi
pop edi
mov dword [eax + 0xc], ecx
mov ecx, dword [eax + 0x10]
add ecx, esi
pop esi
mov dword [eax + 0x10], ecx
mov ecx, dword [eax + 0x14]
add ecx, edx
pop ebp
mov dword [eax + 0x14], ecx
mov eax, 1
pop ebx
add esp, 0x4c
ret