Function at 0x51f316
Capabilities:
Encode data using xor

Disassembly:
mov eax, 0x24
call fcn.004360a0
push ebx
mov ebx, dword [esp + 0x2c]
mov cl, 0x38
push ebp
push esi
push edi
mov eax, dword [ebx]
mov edx, dword [ebx + 4]
call fcn.00436080
mov edi, dword [ebx + 0x1c]
mov esi, dword [ebx + 0x10]
mov ebp, dword [ebx + 0x14]
mov ecx, dword [ebx + 0x20]
mov dword [esp + 0x18], eax
mov eax, dword [ebx + 8]
mov dword [esp + 0x10], eax
mov eax, dword [ebx + 0x18]
mov dword [esp + 0x1c], edx
mov edx, dword [ebx + 0xc]
mov ebx, dword [ebx + 0x24]
mov dword [esp + 0x28], ebx
mov ebx, dword [esp + 0x38]
mov dword [esp + 0x14], eax
mov dword [esp + 0x20], edx
mov dword [esp + 0x24], edi
mov eax, dword [ebx + 0x2c]
cmp dword [esp + 0x40], eax
je 0x51f2a9
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x24
ret
mov eax, dword [ebx + 0x28]
dec eax
cmp eax, 6
ja case.default.0x51f2b2
jmp dword [eax*4 + 0x51f6dc]
movzx eax, byte [ebx + 0x3e]
cdq
shl eax, 0x10
or dword [esp + 0x1c], eax
movzx eax, byte [ebx + 0x3d]
cdq
shl eax, 8
or dword [esp + 0x1c], eax
movzx eax, byte [ebx + 0x3c]
cdq
or dword [esp + 0x1c], eax
movzx eax, byte [ebx + 0x3b]
cdq
shld edx, eax, 0x18
shl eax, 0x18
or dword [esp + 0x18], eax
or dword [esp + 0x1c], edx
movzx eax, byte [ebx + 0x3a]
cdq
shld edx, eax, 0x10
shl eax, 0x10
or dword [esp + 0x18], eax
or dword [esp + 0x1c], edx
movzx eax, byte [ebx + 0x39]
cdq
shld edx, eax, 8
shl eax, 8
or dword [esp + 0x18], eax
or dword [esp + 0x1c], edx
movzx eax, byte [ebx + 0x38]
cdq
or dword [esp + 0x18], eax
or dword [esp + 0x1c], edx
mov edx, dword [esp + 0x20]
mov eax, dword [esp + 0x28]
mov edi, dword [ebx + 0x30]
xor eax, dword [esp + 0x1c]
xor ecx, dword [esp + 0x18]
test edi, edi
mov dword [esp + 0x40], edi
mov edi, dword [esp + 0x24]
mov dword [esp + 0x28], eax
jle 0x51f419
nop word [eax + eax]
add dword [esp + 0x10], esi
mov ebx, ebp
adc edx, ebp
xor edi, edi
shld ebp, esi, 0xd
shr ebx, 0x13
shl esi, 0xd
or edi, ebp
mov ebp, dword [esp + 0x24]
or ebx, esi
xor ebx, dword [esp + 0x10]
xor edi, edx
add dword [esp + 0x14], ecx
mov esi, eax
mov dword [esp + 0x20], edx
adc ebp, eax
mov dword [esp + 0x2c], edi
shld eax, ecx, 0x10
shr esi, 0x10
xor edx, edx
shl ecx, 0x10
or edx, eax
mov eax, dword [esp + 0x20]
or esi, ecx
xor esi, dword [esp + 0x14]
xor edx, ebp
xor ecx, ecx
or ecx, dword [esp + 0x10]
add eax, esi
mov dword [esp + 0x10], eax
adc ecx, edx
xor eax, eax
mov dword [esp + 0x20], ecx
mov ecx, edx
shld edx, esi, 0x15
shr ecx, 0xb
or eax, edx
shl esi, 0x15
mov edx, dword [esp + 0x20]
or ecx, esi
xor ecx, dword [esp + 0x10]
xor eax, edx
mov dword [esp + 0x28], eax
mov esi, edi
mov eax, dword [esp + 0x14]
add eax, ebx
mov dword [esp + 0x14], eax
adc ebp, edi
shr esi, 0xf
shld edi, ebx, 0x11
mov dword [esp + 0x24], ebp
xor ebp, ebp
shl ebx, 0x11
or ebp, edi
or esi, ebx
xor edi, edi
or edi, dword [esp + 0x14]
xor esi, eax
mov eax, dword [esp + 0x24]
xor ebp, eax
sub dword [esp + 0x40], 1
mov dword [esp + 0x14], eax
mov eax, dword [esp + 0x28]
mov dword [esp + 0x24], edi
jne 0x51f350
mov ebx, dword [esp + 0x38]
mov eax, dword [esp + 0x10]
xor eax, dword [esp + 0x18]
xor edx, dword [esp + 0x1c]
cmp dword [ebx + 0x2c], 0x10
mov dword [esp + 0x10], eax
mov dword [esp + 0x20], edx
mov dword [esp + 0x40], 0xee
je 0x51f443
mov dword [esp + 0x40], 0xff
mov eax, dword [ebx + 0x34]
xor edi, 0
mov ebx, dword [esp + 0x14]
xor ebx, dword [esp + 0x40]
test eax, eax
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x28]
mov dword [esp + 0x14], ebx
mov dword [esp + 0x24], edi
jle 0x51f533
jmp 0x51f474
mov eax, dword [esp + 0x28]
add dword [esp + 0x10], esi
mov ebx, ebp
adc edx, ebp
shr ebx, 0x13
shld ebp, esi, 0xd
xor edi, edi
mov dword [esp + 0x20], edx
shl esi, 0xd
or edi, ebp
mov ebp, dword [esp + 0x24]
or ebx, esi
xor ebx, dword [esp + 0x10]
xor edi, edx
add dword [esp + 0x14], ecx
mov esi, eax
adc ebp, eax
shr esi, 0x10
shld eax, ecx, 0x10
xor edx, edx
shl ecx, 0x10
or edx, eax
mov eax, dword [esp + 0x20]
or esi, ecx
xor esi, dword [esp + 0x14]
xor edx, ebp
xor ecx, ecx
or ecx, dword [esp + 0x10]
add eax, esi
mov dword [esp + 0x10], eax
adc ecx, edx
xor eax, eax
mov dword [esp + 0x20], ecx
mov ecx, edx
shld edx, esi, 0x15
shr ecx, 0xb
or eax, edx
shl esi, 0x15
mov edx, dword [esp + 0x20]
or ecx, esi
xor ecx, dword [esp + 0x10]
xor eax, edx
mov dword [esp + 0x28], eax
mov esi, edi
mov eax, dword [esp + 0x14]
add eax, ebx
mov dword [esp + 0x14], eax
adc ebp, edi
shr esi, 0xf
shld edi, ebx, 0x11
mov dword [esp + 0x24], ebp
xor ebp, ebp
shl ebx, 0x11
or ebp, edi
or esi, ebx
xor edi, edi
or edi, dword [esp + 0x14]
xor esi, eax
mov eax, dword [esp + 0x24]
xor ebp, eax
sub dword [esp + 0x1c], 1
mov ebx, eax
mov dword [esp + 0x24], edi
mov dword [esp + 0x14], ebx
jne 0x51f470
mov eax, dword [esp + 0x3c]
mov edx, ecx
xor edx, ebx
mov dword [esp + 0x30], 0
mov ebx, dword [esp + 0x28]
xor edx, esi
xor edx, dword [esp + 0x10]
xor ebx, edi
mov edi, dword [esp + 0x3c]
xor ebx, ebp
xor ebx, dword [esp + 0x20]
mov byte [eax], dl
mov eax, edx
shr eax, 8
mov byte [edi + 1], al
mov eax, edx
shr eax, 0x10
mov byte [edi + 2], al
mov eax, edi
mov edi, dword [esp + 0x24]
shr edx, 0x18
mov byte [eax + 3], dl
mov edx, eax
mov eax, ebx
shr eax, 8
mov byte [edx + 5], al
mov eax, ebx
mov byte [edx + 4], bl
shr ebx, 0x18
mov byte [edx + 7], bl
mov ebx, dword [esp + 0x38]
shr eax, 0x10
mov byte [edx + 6], al
cmp dword [ebx + 0x2c], 8
je 0x51f6cd
mov eax, dword [ebx + 0x34]
xor esi, 0xdd
mov edx, dword [esp + 0x14]
xor ebp, 0
mov dword [esp + 0x38], eax
test eax, eax
jle 0x51f67b
nop dword [eax]
add dword [esp + 0x10], esi
mov ebx, ebp
mov eax, dword [esp + 0x20]
adc eax, ebp
xor edi, edi
shld ebp, esi, 0xd
shr ebx, 0x13
shl esi, 0xd
or edi, ebp
mov ebp, dword [esp + 0x24]
or ebx, esi
xor ebx, dword [esp + 0x10]
xor edi, eax
add edx, ecx
mov dword [esp + 0x20], eax
mov eax, dword [esp + 0x28]
mov esi, eax
adc ebp, eax
mov dword [esp + 0x14], edx
shld eax, ecx, 0x10
shr esi, 0x10
xor edx, edx
or edx, eax
shl ecx, 0x10
mov eax, dword [esp + 0x20]
or esi, ecx
xor esi, dword [esp + 0x14]
xor edx, ebp
mov dword [esp + 0x24], ebp
mov ecx, edx
xor ebp, ebp
or ebp, dword [esp + 0x10]
add eax, esi
mov dword [esp + 0x10], eax
adc ebp, edx
xor eax, eax
shld edx, esi, 0x15
shr ecx, 0xb
shl esi, 0x15
or eax, edx
mov edx, dword [esp + 0x14]
or ecx, esi
xor ecx, dword [esp + 0x10]
xor eax, ebp
add edx, ebx
mov dword [esp + 0x28], eax
mov eax, dword [esp + 0x24]
mov esi, edi
adc eax, edi
mov dword [esp + 0x20], ebp
shld edi, ebx, 0x11
xor ebp, ebp
shr esi, 0xf
or ebp, edi
shl ebx, 0x11
or esi, ebx
xor edi, edi
or edi, edx
xor esi, edx
xor ebp, eax
mov dword [esp + 0x24], edi
sub dword [esp + 0x38], 1
mov edx, eax
jne 0x51f5c0
mov ebx, dword [esp + 0x3c]
xor ecx, edx
mov edx, dword [esp + 0x28]
xor ecx, esi
xor ecx, dword [esp + 0x10]
xor edx, edi
mov eax, ecx
mov dword [esp + 0x30], 0
shr eax, 8
xor edx, ebp
xor edx, dword [esp + 0x20]
mov byte [ebx + 9], al
mov eax, ecx
shr eax, 0x10
mov byte [ebx + 0xa], al
mov eax, edx
shr eax, 8
mov byte [ebx + 0xd], al
mov eax, edx
mov byte [ebx + 8], cl
shr ecx, 0x18
shr eax, 0x10
mov byte [ebx + 0xc], dl
shr edx, 0x18
mov byte [ebx + 0xb], cl
mov byte [ebx + 0xe], al
mov byte [ebx + 0xf], dl
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x24
ret