Function at 0x51c8d0
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 - 0x14], edx
push esi
mov esi, dword [ebp + 0xc]
xor ecx, ecx
push edi
mov eax, dword [ebx + 0x174]
mov edi, edx
mov dword [ebp - 0x24], eax
mov eax, dword [ebx + 0x164]
mov dword [ebp - 0x1c], eax
mov eax, esi
add eax, dword [ebx + 0x38]
mov dword [ebp - 0x28], ebx
adc ecx, dword [ebx + 0x3c]
cmp ecx, 0xf
ja 0x51cbc8
jb 0x51c91d
cmp eax, 0xffffffe0
ja 0x51cbc8
cmp dword [ebx + 0x16c], 0
lea edx, [ebx + 0x40]
mov dword [ebx + 0x3c], ecx
mov ecx, dword [ebx + 0x168]
mov dword [ebx + 0x38], eax
mov dword [ebp + 0xc], ecx
mov dword [ebp - 0x10], edx
je 0x51cb0c
test esi, esi
jne 0x51c962
lea eax, [ebx + 0x60]
push eax
mov eax, dword [ebx + 0x160]
push edx
call eax
add esp, 8
mov dword [ebx + 0x16c], esi
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
movups xmm0, xmmword [edx]
lea eax, [ebx + 0x178]
mov ecx, 0x10
mov dword [ebp - 0x20], eax
movups xmmword [eax], xmm0
mov dword [edx], 0
lea eax, [ebx + 0xc]
mov dword [edx + 4], 0
mov dword [ebx + 0x48], 0
mov dword [ebp - 0x18], eax
mov dword [ebx + 0x4c], 0
mov eax, dword [eax]
bswap eax
mov dword [ebp - 4], eax
xor eax, eax
mov dword [ebp + 0xc], ecx
mov dword [ebx + 0x16c], 0
mov dword [ebp - 0xc], eax
mov eax, dword [ebp + 8]
mov dword [ebp - 8], eax
cmp esi, 0x10
jb 0x51c9d5
test ecx, ecx
je 0x51c9d5
push ecx
push dword [ebp - 0x20]
lea eax, [ebx + 0x60]
push eax
push edx
call dword [ebp - 0x1c]
add esp, 0x10
mov dword [ebp + 0xc], 0
cmp esi, 0xc00
jb 0x51ca45
mov eax, 0xaaaaaaab
mul esi
shr edx, 0xb
mov dword [ebp - 0x20], edx
nop word [eax + eax]
push 0xc00
push edi
lea eax, [ebx + 0x60]
push eax
push dword [ebp - 0x10]
call dword [ebp - 0x1c]
mov ecx, dword [ebp - 8]
push ebx
push dword [ebp - 0x24]
push 0xc0
push ecx
push edi
call dword [ebp + 0x10]
mov ecx, dword [ebp - 4]
add esp, 0x24
add dword [ebp - 8], 0xc00
add ecx, 0xc0
mov eax, ecx
mov dword [ebp - 4], ecx
mov ecx, dword [ebp - 0x18]
add edi, 0xc00
bswap eax
sub esi, 0xc00
sub dword [ebp - 0x20], 1
mov dword [ecx], eax
jne 0x51c9f0
mov dword [ebp - 0x14], edi
mov eax, esi
and eax, 0xfffffff0
mov dword [ebp - 0x20], eax
je 0x51ca90
push eax
push dword [ebp - 0x14]
mov edi, eax
lea eax, [ebx + 0x60]
push eax
push dword [ebp - 0x10]
shr edi, 4
call dword [ebp - 0x1c]
mov ecx, dword [ebp - 8]
push ebx
push dword [ebp - 0x24]
push edi
push ecx
push dword [ebp - 0x14]
call dword [ebp + 0x10]
mov eax, dword [ebp - 4]
add esp, 0x24
mov ecx, dword [ebp - 0x18]
add eax, edi
mov edi, dword [ebp - 0x14]
mov dword [ebp - 4], eax
bswap eax
mov dword [ecx], eax
mov eax, dword [ebp - 0x20]
add edi, eax
add dword [ebp - 8], eax
sub esi, eax
test esi, esi
je 0x51cafa
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 - 0x18]
inc eax
bswap eax
mov dword [ecx], eax
mov ecx, dword [ebp - 8]
sub edi, ecx
mov eax, dword [ebp - 0xc]
lea edx, [eax + ecx]
add eax, 0x10
add eax, ebx
mov dword [ebp - 0x20], eax
mov eax, dword [ebp + 0xc]
add eax, 0x178
add eax, ebx
add dword [ebp + 0xc], esi
mov ebx, dword [ebp - 0x20]
mov dword [ebp - 0x24], eax
mov cl, byte [edi + edx]
lea ebx, [ebx + 1]
mov byte [eax], cl
lea edx, [edx + 1]
mov al, byte [ebx - 1]
xor al, cl
mov byte [edx - 1], al
mov eax, dword [ebp - 0x24]
inc eax
mov dword [ebp - 0x24], eax
sub esi, 1
jne 0x51cad8
mov ebx, dword [ebp - 0x28]
mov eax, dword [ebp + 0xc]
mov dword [ebx + 0x168], eax
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
lea eax, [ebx + 0x178]
mov dword [ebp - 0x10], edx
mov dword [ebp - 0x20], eax
lea eax, [ebx + 0xc]
mov dword [ebp - 0x18], eax
mov eax, dword [eax]
bswap eax
mov dword [ebp - 4], eax
mov eax, ecx
and eax, 0xf
mov dword [ebp - 0xc], eax
je 0x51c9b0
lea edx, [ebx + 0x178]
add edx, ecx
mov dword [ebp - 0x18], edx
mov edx, dword [ebp + 8]
test esi, esi
je 0x51cbb9
mov ebx, dword [ebp - 0x18]
dec esi
mov cl, byte [edi]
inc edi
inc dword [ebp - 0x18]
mov byte [ebx], cl
mov ebx, dword [ebp - 0x28]
mov al, byte [eax + ebx + 0x10]
xor al, cl
mov ecx, dword [ebp + 0xc]
mov byte [edx], al
inc ecx
mov eax, dword [ebp - 0xc]
inc edx
inc eax
mov dword [ebp - 8], edx
and eax, 0xf
mov dword [ebp + 0xc], ecx
mov dword [ebp - 0xc], eax
jne 0x51cb41
push dword [ebp + 0xc]
lea eax, [ebx + 0x178]
push eax
lea edx, [ebx + 0x60]
lea ecx, [ebx + 0x40]
push edx
push ecx
call dword [ebp - 0x1c]
mov eax, dword [ebp - 0xc]
add esp, 0x10
mov edx, dword [ebp - 0x10]
xor ecx, ecx
mov dword [ebp - 0xc], eax
lea eax, [ebx + 0x178]
mov dword [ebp - 0x20], eax
lea eax, [ebx + 0xc]
mov dword [ebp - 0x18], eax
mov eax, dword [ebp - 4]
mov dword [ebp + 0xc], ecx
mov dword [ebp - 0x14], edi
mov dword [ebp - 0x10], edx
mov dword [ebp - 4], eax
jmp 0x51c9b6
mov dword [ebx + 0x168], ecx
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