Function at 0x401590
Capabilities:
Encode data using xor

Disassembly:
push ebp
lea ebp, [eax + 0x28]
push edi
mov edi, eax
push esi
push ebx
sub esp, 0x34
mov ebx, dword [edi]
mov esi, dword [edi + 4]
mov dword [esp + 0x1c], eax
mov eax, dword [eax + 0x48]
mov edx, dword [edi + 0x1c]
mov dword [esp + 0x28], ebx
add eax, ebp
mov dword [esp + 0x2c], esi
mov dword [esp + 0x18], eax
mov eax, dword [edi + 0x18]
mov dword [esp + 4], edx
mov dword [esp], eax
mov eax, 0x1f
cmp eax, ebx
mov eax, 0
sbb eax, esi
jae 0x4019d0
mov ebx, edi
mov esi, dword [edi + 8]
mov edi, dword [edi + 0xc]
mov ecx, dword [ebx + 0x14]
mov edx, dword [ebx + 0x10]
imul eax, esi, 0xc2b2ae3d
mov dword [esp + 0xc], ecx
mov ecx, dword [ebx + 0x20]
mov dword [esp + 8], edx
mov ebx, dword [ebx + 0x24]
mov dword [esp + 0x10], ecx
imul ecx, edi, 0x27d4eb4f
mov dword [esp + 0x14], ebx
mov ebx, dword [esp + 0xc]
add ecx, eax
mov eax, 0x27d4eb4f
mul esi
add edx, ecx
mov ecx, edx
mov edx, eax
shld edx, ecx, 0x1f
shld ecx, eax, 0x1f
mov dword [esp + 0x24], ecx
mov ecx, esi
shld esi, edi, 1
shld edi, ecx, 1
mov ecx, dword [esp + 8]
mov eax, esi
mov dword [esp + 0x20], edx
mov edx, dword [esp + 4]
mov esi, ecx
shld ecx, ebx, 7
shld ebx, esi, 7
add ecx, eax
mov eax, dword [esp]
adc ebx, edi
mov esi, eax
shld eax, edx, 0xc
shld edx, esi, 0xc
add eax, ecx
mov ecx, dword [esp + 0x10]
adc edx, ebx
mov ebx, dword [esp + 0x14]
mov esi, ecx
mov edi, edx
mov edx, dword [esp + 0x24]
shld ecx, ebx, 0x12
shld ebx, esi, 0x12
mov esi, eax
add esi, ecx
adc edi, ebx
imul eax, dword [esp + 0x20], 0x9e3779b1
mov ebx, 0x85ebca87
imul ecx, edx, 0x85ebca87
add ecx, eax
mov eax, 0x85ebca87
mul dword [esp + 0x20]
add edx, ecx
xor eax, esi
xor edx, edi
imul ecx, edx, 0x85ebca87
imul edx, eax, 0x9e3779b1
add ecx, edx
mul ebx
mov edi, edx
mov edx, dword [esp + 0xc]
mov esi, eax
add edi, ecx
imul eax, dword [esp + 8], 0xc2b2ae3d
imul ecx, edx, 0x27d4eb4f
add ecx, eax
mov eax, 0x27d4eb4f
mul dword [esp + 8]
add edx, ecx
mov ecx, eax
shld eax, edx, 0x1f
shld edx, ecx, 0x1f
imul ecx, edx, 0x85ebca87
mov dword [esp + 8], eax
mov eax, dword [esp + 8]
mov dword [esp + 0xc], edx
imul edx, dword [esp + 8], 0x9e3779b1
add ecx, edx
mul ebx
add edx, ecx
add esi, 0xc2b2ae63
adc edi, 0x85ebca77
xor esi, eax
xor edi, edx
imul edx, esi, 0x9e3779b1
mov eax, esi
imul ebx, edi, 0x85ebca87
mov edi, 0x85ebca87
add ebx, edx
mul edi
mov edi, edx
mov edx, dword [esp + 4]
mov esi, eax
imul eax, dword [esp], 0xc2b2ae3d
add edi, ebx
mov ebx, 0x85ebca87
imul ecx, edx, 0x27d4eb4f
add ecx, eax
mov eax, 0x27d4eb4f
mul dword [esp]
add edx, ecx
mov ecx, eax
shld eax, edx, 0x1f
shld edx, ecx, 0x1f
imul ecx, edx, 0x85ebca87
mov dword [esp], eax
imul edx, dword [esp], 0x9e3779b1
mov eax, dword [esp]
add ecx, edx
mul ebx
add edx, ecx
add esi, 0xc2b2ae63
adc edi, 0x85ebca77
xor esi, eax
xor edi, edx
imul edx, esi, 0x9e3779b1
mov eax, esi
imul ebx, edi, 0x85ebca87
mov edi, 0x85ebca87
add ebx, edx
mul edi
mov edi, edx
mov edx, dword [esp + 0x14]
mov esi, eax
imul eax, dword [esp + 0x10], 0xc2b2ae3d
add edi, ebx
mov ebx, 0x85ebca87
imul ecx, edx, 0x27d4eb4f
add ecx, eax
mov eax, 0x27d4eb4f
mul dword [esp + 0x10]
add edx, ecx
mov ecx, eax
shld eax, edx, 0x1f
shld edx, ecx, 0x1f
imul ecx, edx, 0x85ebca87
mov dword [esp], eax
mov eax, dword [esp]
mov dword [esp + 4], edx
imul edx, dword [esp], 0x9e3779b1
add ecx, edx
mul ebx
add edx, ecx
add esi, 0xc2b2ae63
adc edi, 0x85ebca77
xor esi, eax
xor edi, edx
imul eax, esi, 0x9e3779b1
imul ebx, edi, 0x85ebca87
add ebx, eax
mov eax, 0x85ebca87
mul esi
add edx, ebx
add eax, 0xc2b2ae63
adc edx, 0x85ebca77
mov ecx, eax
mov ebx, edx
mov eax, dword [esp + 0x1c]
add ecx, dword [esp + 0x28]
adc ebx, dword [esp + 0x2c]
lea edi, [eax + 0x30]
cmp dword [esp + 0x18], edi
jb 0x4018d7
mov dword [esp + 8], edi
mov ebp, 0x85ebca87
imul eax, dword [edi - 8], 0xc2b2ae3d
imul esi, dword [edi - 4], 0x27d4eb4f
add esi, eax
mov eax, 0x27d4eb4f
mul dword [edi - 8]
add edx, esi
mov esi, eax
shld eax, edx, 0x1f
shld edx, esi, 0x1f
mov dword [esp], eax
imul esi, edx, 0x85ebca87
mov eax, dword [esp]
imul edx, dword [esp], 0x9e3779b1
add esi, edx
mul ebp
xor eax, ecx
add edx, esi
xor edx, ebx
mov ecx, eax
shld eax, edx, 0x1b
shld edx, ecx, 0x1b
imul ebx, edx, 0x85ebca87
mov dword [esp], eax
mov eax, dword [esp]
mov dword [esp + 4], edx
imul edx, dword [esp], 0x9e3779b1
add ebx, edx
mul ebp
add edx, ebx
add eax, 0xc2b2ae63
adc edx, 0x85ebca77
mov ecx, eax
add edi, 8
mov ebx, edx
cmp dword [esp + 0x18], edi
jae 0x401840
mov eax, dword [esp + 0x18]
mov edx, dword [esp + 0x1c]
mov edi, dword [esp + 8]
sub eax, edx
sub eax, 0x30
and eax, 0xfffffff8
lea ebp, [edi + eax]
lea esi, [ebp + 4]
cmp dword [esp + 0x18], esi
jb 0x401927
imul edi, dword [ebp], 0x9e3779b1
mov eax, 0x85ebca87
mul dword [ebp]
mov ebp, esi
xor eax, ecx
add edx, edi
xor edx, ebx
mov ecx, eax
mov ebx, 0x27d4eb4f
shld eax, edx, 0x17
shld edx, ecx, 0x17
imul ecx, edx, 0x27d4eb4f
imul edx, eax, 0xc2b2ae3d
add ecx, edx
mul ebx
add edx, ecx
add eax, 0x9e3779f9
adc edx, 0x165667b1
mov ecx, eax
mov ebx, edx
mov eax, dword [esp + 0x18]
cmp ebp, eax
jae 0x40197a
mov edi, 0x85ebca87
lea esi, [esi]
movzx eax, byte [ebp]
mov edx, 0x165667c5
add ebp, 1
imul esi, eax, 0x27d4eb2f
mul edx
add edx, esi
xor ecx, eax
xor ebx, edx
mov eax, ecx
shld ecx, ebx, 0xb
shld ebx, eax, 0xb
imul esi, ebx, 0x85ebca87
imul eax, ecx, 0x9e3779b1
add esi, eax
mov eax, ecx
mul edi
mov ebx, edx
mov ecx, eax
add ebx, esi
cmp dword [esp + 0x18], ebp
jne 0x401938
mov eax, ebx
xor edx, edx
mov edi, 0x27d4eb4f
add esp, 0x34
shr eax, 1
xor edx, ebx
xor eax, ecx
imul ecx, edx, 0x27d4eb4f
imul edx, eax, 0xc2b2ae3d
add ecx, edx
mul edi
mov edi, 0x9e3779f9
add edx, ecx
mov ecx, eax
mov ebx, edx
shrd ecx, edx, 0x1d
shr ebx, 0x1d
xor eax, ecx
xor edx, ebx
xor ebx, ebx
imul ecx, edx, 0x9e3779f9
imul edx, eax, 0x165667b1
add ecx, edx
mul edi
add edx, ecx
xor eax, edx
xor edx, ebx
pop ebx
pop esi
pop edi
pop ebp
ret
mov ecx, dword [esp]
mov ebx, dword [esp + 4]
add ecx, 0x165667c5
adc ebx, 0x27d4eb2f
jmp 0x40181e