Function at 0x51c5d0
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
mov eax, 0x28
call fcn.00663af0
push ebx
mov ebx, ecx
mov dword [ebp - 0x18], edx
push esi
push edi
mov edi, dword [ebp + 0xc]
xor ecx, ecx
mov eax, dword [ebx + 0x174]
mov esi, edx
mov dword [ebp - 0x24], eax
mov eax, dword [ebx + 0x164]
mov dword [ebp - 0x1c], eax
mov eax, edi
add eax, dword [ebx + 0x38]
mov dword [ebp - 0x28], ebx
adc ecx, dword [ebx + 0x3c]
cmp ecx, 0xf
ja 0x51c8c3
jb 0x51c61d
cmp eax, 0xffffffe0
ja 0x51c8c3
cmp dword [ebx + 0x16c], 0
mov edx, dword [ebx + 0x168]
mov dword [ebx + 0x3c], ecx
lea ecx, [ebx + 0x40]
mov dword [ebx + 0x38], eax
mov dword [ebp - 0xc], edx
mov dword [ebp - 0x10], ecx
je 0x51c751
test edi, edi
jne 0x51c662
lea eax, [ebx + 0x60]
push eax
mov eax, dword [ebx + 0x160]
push ecx
call eax
add esp, 8
mov dword [ebx + 0x16c], edi
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
movups xmm0, xmmword [ecx]
lea eax, [ebx + 0x178]
mov dword [ebp - 8], 0
mov dword [ebp - 0x20], eax
mov edx, 0x10
movups xmmword [eax], xmm0
mov dword [ecx], 0
lea eax, [ebx + 0xc]
mov dword [ecx + 4], 0
mov dword [ebx + 0x48], 0
mov dword [ebx + 0x4c], 0
mov ecx, dword [eax]
bswap ecx
mov dword [ebp - 0xc], edx
mov dword [ebx + 0x16c], 0
mov dword [ebp - 0x14], eax
mov dword [ebp - 4], ecx
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x10]
mov dword [ebp + 0xc], eax
cmp edi, 0x10
jb 0x51c6da
test edx, edx
je 0x51c6da
push edx
push dword [ebp - 0x20]
lea eax, [ebx + 0x60]
push eax
push ecx
call dword [ebp - 0x1c]
add esp, 0x10
mov dword [ebp - 0xc], 0
cmp edi, 0xc00
jb 0x51c7f9
mov eax, 0xaaaaaaab
mul edi
mov eax, dword [ebp + 0xc]
shr edx, 0xb
mov dword [ebp - 0x20], edx
push ebx
push dword [ebp - 0x24]
push 0xc0
push eax
push esi
call dword [ebp + 0x10]
mov eax, dword [ebp - 4]
mov ecx, dword [ebp - 0x14]
add eax, 0xc0
mov dword [ebp - 4], eax
bswap eax
push 0xc00
mov dword [ecx], eax
mov eax, dword [ebp + 0xc]
push eax
lea eax, [ebx + 0x60]
push eax
push dword [ebp - 0x10]
call dword [ebp - 0x1c]
mov eax, dword [ebp + 0xc]
add esp, 0x24
add eax, 0xc00
add esi, 0xc00
sub edi, 0xc00
mov dword [ebp + 0xc], eax
sub dword [ebp - 0x20], 1
jne 0x51c6f6
mov dword [ebp - 0x18], esi
jmp 0x51c7fc
lea eax, [ebx + 0x178]
mov dword [ebp - 0x10], ecx
mov ecx, dword [ebx + 0xc]
mov dword [ebp - 0x20], eax
lea eax, [ebx + 0xc]
mov dword [ebp - 0x14], eax
mov eax, edx
bswap ecx
and eax, 0xf
mov dword [ebp - 4], ecx
mov dword [ebp - 8], eax
je 0x51c6b2
lea ecx, [ebx + 0x178]
add ecx, edx
mov dword [ebp - 0x18], ecx
mov ecx, dword [ebp + 8]
test edi, edi
je 0x51c8b4
mov al, byte [eax + ebx + 0x10]
inc edx
xor al, byte [esi]
dec edi
mov ebx, dword [ebp - 0x18]
inc esi
inc dword [ebp - 0x18]
mov byte [ecx], al
inc ecx
mov dword [ebp + 0xc], ecx
mov byte [ebx], al
mov eax, dword [ebp - 8]
mov ebx, dword [ebp - 0x28]
inc eax
and eax, 0xf
mov dword [ebp - 8], eax
jne 0x51c787
push edx
lea eax, [ebx + 0x178]
push eax
lea eax, [ebx + 0x60]
lea ecx, [ebx + 0x40]
push eax
push ecx
call dword [ebp - 0x1c]
mov eax, dword [ebp - 8]
add esp, 0x10
mov ecx, dword [ebp - 0x10]
xor edx, edx
mov dword [ebp - 8], eax
lea eax, [ebx + 0x178]
mov dword [ebp - 0x20], eax
lea eax, [ebx + 0xc]
mov dword [ebp - 0x14], eax
mov eax, dword [ebp - 4]
mov dword [ebp - 0xc], edx
mov dword [ebp - 0x18], esi
mov dword [ebp - 0x10], ecx
mov dword [ebp - 4], eax
jmp 0x51c6bb
mov eax, dword [ebp + 0xc]
mov ecx, edi
and ecx, 0xfffffff0
mov dword [ebp - 0x20], ecx
je 0x51c848
push ebx
push dword [ebp - 0x24]
mov esi, ecx
shr esi, 4
push esi
push eax
push dword [ebp - 0x18]
call dword [ebp + 0x10]
mov eax, dword [ebp - 4]
mov ecx, dword [ebp - 0x14]
add eax, esi
mov esi, dword [ebp - 0x18]
mov dword [ebp - 4], eax
bswap eax
mov dword [ecx], eax
mov eax, dword [ebp - 0x20]
add esi, eax
push eax
sub edi, eax
mov eax, dword [ebp + 0xc]
push eax
lea eax, [ebx + 0x60]
push eax
push dword [ebp - 0x10]
call dword [ebp - 0x1c]
mov eax, dword [ebp - 0x20]
add esp, 0x24
add dword [ebp + 0xc], eax
test edi, edi
je 0x51c8b1
push dword [ebp - 0x24]
lea eax, [ebx + 0x10]
push eax
mov eax, dword [ebx + 0x170]
push ebx
call eax
mov eax, dword [ebp - 4]
add esp, 0xc
mov ecx, dword [ebp - 0x14]
inc eax
mov edx, dword [ebp - 0xc]
add edx, 0x178
add edx, ebx
bswap eax
mov dword [ecx], eax
mov eax, dword [ebp + 0xc]
sub esi, eax
mov ecx, dword [ebp - 8]
mov dword [ebp + 0xc], edx
add ecx, eax
mov edx, dword [ebp - 8]
add edx, 0x10
add edx, ebx
add dword [ebp - 0xc], edi
mov dword [ebp - 0x24], edx
mov edx, dword [ebp + 0xc]
mov ebx, dword [ebp - 0x24]
mov al, byte [esi + ecx]
lea edx, [edx + 1]
xor al, byte [ebx]
lea ebx, [ebx + 1]
mov byte [ecx], al
lea ecx, [ecx + 1]
mov byte [edx - 1], al
sub edi, 1
jne 0x51c896
mov ebx, dword [ebp - 0x28]
mov edx, dword [ebp - 0xc]
mov dword [ebx + 0x168], edx
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
pop edi
pop esi
or eax, 0xffffffff
pop ebx
mov esp, ebp
pop ebp
ret