Function at 0x402950
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x4c
push ebx
push esi
push edi
mov edi, ecx
mov dword [ebp - 4], ecx
cmp dword [edi + 0x14], 0x10
mov eax, dword [edi + 0x10]
mov dword [ebp - 0x4c], eax
jb 0x40296f
mov edi, dword [edi]
mov dword [ebp - 4], edi
lea ecx, [edi + eax]
mov dword [ebp - 0x20], ecx
cmp eax, 0x20
jb 0x402ec1
lea eax, [ecx - 0x20]
mov dword [ebp - 0x10], 0x60ea27ee
xorps xmm0, xmm0
mov dword [ebp - 4], eax
movlpd qword [ebp - 0x48], xmm0
mov ebx, 0xadc0b5d6
mov eax, dword [ebp - 0x44]
mov dword [ebp - 8], eax
mov eax, dword [ebp - 0x48]
mov dword [ebp - 0x1c], 0x27d4eb4f
mov dword [ebp - 0xc], 0xc2b2ae3d
mov dword [ebp - 0x24], 0x7a143579
mov dword [ebp - 0x14], 0x61c8864e
mov dword [ebp - 0x18], eax
movzx eax, byte [edi + 7]
cdq
mov esi, eax
mov ecx, edx
movzx eax, byte [edi + 6]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 5]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 4]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 3]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 2]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 1]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi]
shld ecx, esi, 8
push 0xc2b2ae3d
cdq
push 0x27d4eb4f
or ecx, edx
shl esi, 8
or esi, eax
push ecx
push esi
call fcn.0040e5e0
mov esi, edx
add eax, ebx
push 0x9e3779b1
adc esi, dword [ebp - 0x10]
xor ecx, ecx
mov edx, esi
shld esi, eax, 0x1f
push 0x85ebca87
shr edx, 1
or ecx, esi
shl eax, 0x1f
or edx, eax
push ecx
push edx
call fcn.0040e5e0
mov ebx, eax
mov dword [ebp - 0x10], edx
movzx eax, byte [edi + 0xf]
cdq
mov esi, eax
mov ecx, edx
movzx eax, byte [edi + 0xe]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 0xd]
shld ecx, esi, 8
shl esi, 8
cdq
or esi, eax
or ecx, edx
movzx eax, byte [edi + 0xc]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 0xb]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 0xa]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 9]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 8]
shld ecx, esi, 8
push 0xc2b2ae3d
cdq
push 0x27d4eb4f
or ecx, edx
shl esi, 8
or esi, eax
push ecx
push esi
call fcn.0040e5e0
add eax, dword [ebp - 0x1c]
push 0x9e3779b1
adc edx, dword [ebp - 0xc]
xor ecx, ecx
mov esi, edx
shld edx, eax, 0x1f
push 0x85ebca87
shl eax, 0x1f
or ecx, edx
shr esi, 1
or esi, eax
push ecx
push esi
call fcn.0040e5e0
mov dword [ebp - 0x1c], eax
movzx eax, byte [edi + 0x17]
mov dword [ebp - 0xc], edx
cdq
mov esi, eax
mov ecx, edx
movzx eax, byte [edi + 0x16]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 0x15]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 0x14]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 0x13]
shld ecx, esi, 8
cdq
shl esi, 8
or esi, eax
movzx eax, byte [edi + 0x12]
or ecx, edx
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 0x11]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 0x10]
shld ecx, esi, 8
push 0xc2b2ae3d
cdq
push 0x27d4eb4f
or ecx, edx
shl esi, 8
or esi, eax
push ecx
push esi
call fcn.0040e5e0
add eax, dword [ebp - 0x18]
push 0x9e3779b1
adc edx, dword [ebp - 8]
xor ecx, ecx
mov esi, edx
shld edx, eax, 0x1f
push 0x85ebca87
shl eax, 0x1f
or ecx, edx
shr esi, 1
or esi, eax
push ecx
push esi
call fcn.0040e5e0
mov dword [ebp - 0x18], eax
movzx eax, byte [edi + 0x1f]
mov dword [ebp - 8], edx
cdq
mov esi, eax
mov ecx, edx
movzx eax, byte [edi + 0x1e]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 0x1d]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 0x1c]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 0x1b]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 0x1a]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
movzx eax, byte [edi + 0x19]
shld ecx, esi, 8
cdq
shl esi, 8
or ecx, edx
or esi, eax
shld ecx, esi, 8
movzx eax, byte [edi + 0x18]
push 0xc2b2ae3d
cdq
push 0x27d4eb4f
or ecx, edx
shl esi, 8
or esi, eax
push ecx
push esi
call fcn.0040e5e0
add eax, dword [ebp - 0x24]
push 0x9e3779b1
adc edx, dword [ebp - 0x14]
xor ecx, ecx
mov esi, edx
shld edx, eax, 0x1f
push 0x85ebca87
shl eax, 0x1f
or ecx, edx
shr esi, 1
or esi, eax
push ecx
push esi
call fcn.0040e5e0
add edi, 0x20
mov dword [ebp - 0x14], edx
mov esi, eax
mov dword [ebp - 0x24], esi
cmp edi, dword [ebp - 4]
jbe 0x4029c0
push 0xc2b2ae3d
push 0x27d4eb4f
push dword [ebp - 0x10]
mov dword [ebp - 0x28], ebx
push ebx
mov dword [ebp - 4], edi
call fcn.0040e5e0
push 0xc2b2ae3d
push 0x27d4eb4f
push dword [ebp - 0xc]
mov ebx, eax
mov dword [ebp - 0x2c], edx
push dword [ebp - 0x1c]
call fcn.0040e5e0
push 0xc2b2ae3d
push 0x27d4eb4f
push dword [ebp - 8]
mov dword [ebp - 0x34], eax
push dword [ebp - 0x18]
mov dword [ebp - 0x30], edx
call fcn.0040e5e0
push 0xc2b2ae3d
push 0x27d4eb4f
push dword [ebp - 0x14]
mov dword [ebp - 0x3c], eax
push esi
mov dword [ebp - 0x38], edx
call fcn.0040e5e0
mov ecx, dword [ebp - 0x14]
xor esi, esi
mov edi, ecx
mov dword [ebp - 0x44], eax
mov eax, dword [ebp - 0x24]
shld ecx, eax, 0x12
mov dword [ebp - 0x40], edx
mov edx, dword [ebp - 0x18]
or esi, ecx
mov ecx, dword [ebp - 8]
shld dword [ebp - 8], edx, 0xc
shl eax, 0x12
shr ecx, 0x14
shl edx, 0xc
or ecx, edx
shr edi, 0xe
mov edx, dword [ebp - 0x1c]
or edi, eax
xor eax, eax
or eax, dword [ebp - 8]
add edi, ecx
mov ecx, dword [ebp - 0xc]
adc esi, eax
shr ecx, 0x19
shld dword [ebp - 0xc], edx, 7
xor eax, eax
or eax, dword [ebp - 0xc]
shl edx, 7
or ecx, edx
mov edx, dword [ebp - 0x28]
add edi, ecx
mov ecx, dword [ebp - 0x10]
push 0x9e3779b1
adc esi, eax
shr ecx, 0x1f
shld dword [ebp - 0x10], edx, 1
xor eax, eax
or eax, dword [ebp - 0x10]
add edx, edx
or ecx, edx
mov edx, dword [ebp - 0x2c]
add edi, ecx
mov ecx, edx
push 0x85ebca87
adc esi, eax
shr ecx, 1
shld edx, ebx, 0x1f
xor eax, eax
shl ebx, 0x1f
or ecx, ebx
or eax, edx
push eax
push ecx
call fcn.0040e5e0
push 0x9e3779b1
push 0x85ebca87
xor esi, edx
xor edi, eax
push esi
push edi
call fcn.0040e5e0
mov ebx, eax
mov edi, edx
mov edx, dword [ebp - 0x30]
add ebx, 0xc2b2ae63
mov eax, dword [ebp - 0x34]
mov esi, edx
adc edi, 0x85ebca77
shr esi, 1
shld edx, eax, 0x1f
push 0x9e3779b1
xor ecx, ecx
shl eax, 0x1f
push 0x85ebca87
or ecx, edx
or esi, eax
push ecx
push esi
call fcn.0040e5e0
push 0x9e3779b1
push 0x85ebca87
xor edi, edx
xor ebx, eax
push edi
push ebx
call fcn.0040e5e0
mov ebx, eax
mov edi, edx
mov edx, dword [ebp - 0x38]
add ebx, 0xc2b2ae63
mov eax, dword [ebp - 0x3c]
mov esi, edx
adc edi, 0x85ebca77
shr esi, 1
shld edx, eax, 0x1f
push 0x9e3779b1
xor ecx, ecx
shl eax, 0x1f
push 0x85ebca87
or ecx, edx
or esi, eax
push ecx
push esi
call fcn.0040e5e0
push 0x9e3779b1
push 0x85ebca87
xor edi, edx
xor ebx, eax
push edi
push ebx
call fcn.0040e5e0
mov ebx, eax
mov edi, edx
mov edx, dword [ebp - 0x40]
add ebx, 0xc2b2ae63
mov eax, dword [ebp - 0x44]
mov esi, edx
adc edi, 0x85ebca77
shr esi, 1
shld edx, eax, 0x1f
push 0x9e3779b1
xor ecx, ecx
shl eax, 0x1f
push 0x85ebca87
or ecx, edx
or esi, eax
push ecx
push esi
call fcn.0040e5e0
push 0x9e3779b1
xor ebx, eax
xor edi, edx
push 0x85ebca87
push edi
push ebx
call fcn.0040e5e0
mov edi, dword [ebp - 4]
mov esi, eax
mov ecx, dword [ebp - 0x20]
add esi, 0xc2b2ae63
mov eax, dword [ebp - 0x4c]
mov ebx, edx
adc ebx, 0x85ebca77
jmp 0x402ecb
mov esi, 0x165667c5
mov ebx, 0x27d4eb2f
add esi, eax
lea eax, [edi + 8]
adc ebx, 0
cmp eax, ecx
ja 0x402ff8
lea ecx, [edi + 6]
mov dword [ebp - 8], ecx
movzx eax, byte [ecx + 1]
cdq
mov edi, eax
mov ecx, edx
mov eax, dword [ebp - 8]
shld ecx, edi, 8
push 0xc2b2ae3d
shl edi, 8
movzx eax, byte [eax]
cdq
or edi, eax
or ecx, edx
mov eax, dword [ebp - 8]
shld ecx, edi, 8
push 0x27d4eb4f
shl edi, 8
movzx eax, byte [eax - 1]
cdq
or edi, eax
or ecx, edx
mov eax, dword [ebp - 8]
shld ecx, edi, 8
shl edi, 8
movzx eax, byte [eax - 2]
cdq
or edi, eax
or ecx, edx
mov eax, dword [ebp - 8]
shld ecx, edi, 8
shl edi, 8
movzx eax, byte [eax - 3]
cdq
or edi, eax
or ecx, edx
mov eax, dword [ebp - 8]
shld ecx, edi, 8
shl edi, 8
movzx eax, byte [eax - 4]
cdq
or edi, eax
or ecx, edx
mov eax, dword [ebp - 8]
shld ecx, edi, 8
shl edi, 8
movzx eax, byte [eax - 5]
cdq
or edi, eax
or ecx, edx
mov eax, dword [ebp - 4]
shld ecx, edi, 8
shl edi, 8
movzx eax, byte [eax]
cdq
or ecx, edx
or edi, eax
push ecx
push edi
call fcn.0040e5e0
mov edi, edx
xor ecx, ecx
shld edx, eax, 0x1f
push 0x9e3779b1
push 0x85ebca87
shl eax, 0x1f
or ecx, edx
shr edi, 1
or edi, eax
push ecx
push edi
call fcn.0040e5e0
xor esi, eax
xor ebx, edx
mov ecx, ebx
xor eax, eax
shld ebx, esi, 0x1b
shr ecx, 5
shl esi, 0x1b
push 0x9e3779b1
or ecx, esi
or eax, ebx
push 0x85ebca87
push eax
push ecx
call fcn.0040e5e0
mov ecx, dword [ebp - 8]
mov esi, eax
mov edi, dword [ebp - 4]
add esi, 0xc2b2ae63
mov ebx, edx
adc ebx, 0x85ebca77
add ecx, 8
add edi, 8
mov dword [ebp - 8], ecx
mov dword [ebp - 4], edi
lea eax, [ecx + 2]
cmp eax, dword [ebp - 0x20]
jbe 0x402ee1
mov ecx, dword [ebp - 0x20]
lea eax, [edi + 4]
mov dword [ebp - 0x4c], eax
cmp eax, ecx
ja 0x403095
movzx eax, byte [edi + 3]
cdq
mov edi, eax
mov ecx, edx
mov eax, dword [ebp - 4]
shld ecx, edi, 8
push 0x9e3779b1
shl edi, 8
movzx eax, byte [eax + 2]
cdq
or edi, eax
or ecx, edx
mov eax, dword [ebp - 4]
shld ecx, edi, 8
push 0x85ebca87
shl edi, 8
movzx eax, byte [eax + 1]
cdq
or edi, eax
or ecx, edx
mov eax, dword [ebp - 4]
shld ecx, edi, 8
shl edi, 8
movzx eax, byte [eax]
cdq
or ecx, edx
or edi, eax
push ecx
push edi
call fcn.0040e5e0
xor esi, eax
xor ebx, edx
mov ecx, ebx
xor eax, eax
push 0xc2b2ae3d
shld ebx, esi, 0x17
push 0x27d4eb4f
shr ecx, 9
or eax, ebx
shl esi, 0x17
or ecx, esi
push eax
push ecx
call fcn.0040e5e0
mov edi, dword [ebp - 0x4c]
mov esi, eax
mov ecx, dword [ebp - 0x20]
add esi, 0x9e3779f9
mov ebx, edx
adc ebx, 0x165667b1
mov eax, ecx
mov dword [ebp - 0x24], 0
sub eax, edi
xor edx, edx
cmp edi, ecx
cmova eax, edx
mov dword [ebp - 0x4c], eax
test eax, eax
je 0x4030ff
nop
movsx eax, byte [edi]
push 0x27d4eb2f
cdq
push 0x165667c5
push edx
push eax
call fcn.0040e5e0
xor esi, eax
xor ebx, edx
mov ecx, ebx
xor eax, eax
push 0x9e3779b1
shld ebx, esi, 0xb
push 0x85ebca87
shr ecx, 0x15
or eax, ebx
shl esi, 0xb
or ecx, esi
push eax
push ecx
call fcn.0040e5e0
mov esi, eax
lea edi, [edi + 1]
mov eax, dword [ebp - 0x24]
mov ebx, edx
inc eax
mov dword [ebp - 0x24], eax
cmp eax, dword [ebp - 0x4c]
jb 0x4030b0
push 0xc2b2ae3d
xor eax, eax
mov ecx, ebx
push 0x27d4eb4f
shr ecx, 1
xor eax, ebx
xor ecx, esi
push eax
push ecx
call fcn.0040e5e0
mov esi, eax
mov ecx, edx
shrd esi, ecx, 0x1d
push 0x165667b1
shr ecx, 0x1d
xor esi, eax
push 0x9e3779f9
xor ecx, edx
push ecx
push esi
call fcn.0040e5e0
mov ecx, edx
xor esi, esi
pop edi
xor eax, ecx
xor edx, esi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret