Function at 0x51c250
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
mov eax, 0x2c
call fcn.0065d180
push ebx
push esi
mov esi, ecx
xor ecx, ecx
push edi
mov edi, edx
mov dword [ebp - 0x2c], esi
mov edx, dword [ebp + 0xc]
mov eax, dword [esi + 0x170]
mov dword [ebp - 0x24], eax
mov eax, dword [esi + 0x174]
mov dword [ebp - 0x20], eax
mov eax, dword [esi + 0x164]
mov dword [ebp - 0x18], eax
mov eax, edx
add eax, dword [esi + 0x38]
adc ecx, dword [esi + 0x3c]
cmp ecx, 0xf
ja 0x51c5bf
jb 0x51c2a3
cmp eax, 0xffffffe0
ja 0x51c5bf
cmp dword [esi + 0x16c], 0
mov dword [esi + 0x3c], ecx
lea ecx, [esi + 0x40]
mov dword [esi + 0x38], eax
mov eax, dword [esi + 0x168]
mov dword [ebp - 4], eax
mov dword [ebp - 0x10], ecx
je 0x51c4f5
test edx, edx
jne 0x51c2ec
lea eax, [esi + 0x60]
push eax
mov eax, dword [esi + 0x160]
push ecx
call eax
add esp, 8
mov dword [esi + 0x16c], 0
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
movups xmm0, xmmword [ecx]
lea eax, [esi + 0x178]
mov dword [ebp - 4], 0x10
mov dword [ebp - 0x1c], eax
movups xmmword [eax], xmm0
mov dword [ecx], 0
mov dword [ecx + 4], 0
lea ecx, [esi + 0xc]
mov dword [esi + 0x48], 0
mov dword [esi + 0x4c], 0
mov eax, dword [ecx]
bswap eax
mov dword [ebp - 0x14], ecx
mov ecx, 0x10
mov dword [esi + 0x16c], 0
mov dword [ebp - 8], eax
mov dword [ebp - 0xc], 0
mov ebx, dword [ebp + 8]
lea eax, [esi + 0x60]
cmp edx, 0x10
jb 0x51c367
test ecx, ecx
je 0x51c367
push ecx
push dword [ebp - 0x1c]
push eax
push dword [ebp - 0x10]
call dword [ebp - 0x18]
mov edx, dword [ebp + 0xc]
add esp, 0x10
mov dword [ebp - 4], 0
cmp edx, 0xc00
jb 0x51c3fe
mov eax, 0xaaaaaaab
mul edx
shr edx, 0xb
mov dword [ebp - 0x28], edx
push 0xc00
push edi
lea eax, [esi + 0x60]
push eax
push dword [ebp - 0x10]
call dword [ebp - 0x18]
add esp, 0x10
mov dword [ebp - 0x1c], 0xc0
nop word [eax + eax]
push dword [ebp - 0x20]
lea eax, [esi + 0x10]
push eax
push esi
call dword [ebp - 0x24]
mov ecx, dword [ebp - 8]
add esp, 0xc
inc ecx
mov eax, ecx
mov dword [ebp - 8], ecx
mov ecx, dword [ebp - 0x14]
bswap eax
mov dword [ecx], eax
mov eax, dword [edi]
xor eax, dword [esi + 0x10]
mov dword [ebx], eax
mov eax, dword [edi + 4]
xor eax, dword [esi + 0x14]
mov dword [ebx + 4], eax
mov eax, dword [edi + 8]
xor eax, dword [esi + 0x18]
mov dword [ebx + 8], eax
mov eax, dword [edi + 0xc]
add edi, 0x10
xor eax, dword [esi + 0x1c]
mov dword [ebx + 0xc], eax
add ebx, 0x10
sub dword [ebp - 0x1c], 1
jne 0x51c3a0
mov edx, dword [ebp + 0xc]
sub edx, 0xc00
sub dword [ebp - 0x28], 1
mov dword [ebp + 0xc], edx
jne 0x51c380
mov eax, edx
and eax, 0xfffffff0
je 0x51c478
push eax
push edi
lea eax, [esi + 0x60]
push eax
push dword [ebp - 0x10]
call dword [ebp - 0x18]
mov edx, dword [ebp + 0xc]
add esp, 0x10
cmp edx, 0x10
jb 0x51c478
shr edx, 4
lea eax, [esi + 0x10]
mov dword [ebp - 0x28], edx
push dword [ebp - 0x20]
push eax
push esi
call dword [ebp - 0x24]
mov eax, dword [ebp - 8]
add esp, 0xc
mov ecx, dword [ebp - 0x14]
inc eax
mov edx, dword [ebp + 0xc]
mov dword [ebp - 8], eax
sub edx, 0x10
bswap eax
mov dword [ecx], eax
mov eax, dword [edi]
xor eax, dword [esi + 0x10]
mov dword [ebx], eax
mov eax, dword [edi + 4]
xor eax, dword [esi + 0x14]
mov dword [ebx + 4], eax
mov eax, dword [edi + 8]
xor eax, dword [esi + 0x18]
mov dword [ebx + 8], eax
mov eax, dword [edi + 0xc]
add edi, 0x10
xor eax, dword [esi + 0x1c]
mov dword [ebx + 0xc], eax
add ebx, 0x10
sub dword [ebp - 0x28], 1
lea eax, [esi + 0x10]
mov dword [ebp + 0xc], edx
jne 0x51c425
test edx, edx
je 0x51c4e3
push dword [ebp - 0x20]
lea eax, [esi + 0x10]
push eax
push esi
call dword [ebp - 0x24]
mov eax, dword [ebp - 8]
sub edi, ebx
mov ecx, dword [ebp - 0x14]
inc eax
mov edx, dword [ebp + 0xc]
add esp, 0xc
bswap eax
mov dword [ecx], eax
mov ecx, dword [ebp - 0xc]
lea eax, [ecx + ebx]
mov dword [ebp - 0x24], eax
lea eax, [ecx + 0x10]
mov ecx, dword [ebp - 4]
add eax, esi
add ecx, 0x178
mov dword [ebp - 0x28], eax
add ecx, esi
add dword [ebp - 4], edx
mov esi, dword [ebp - 0x24]
mov ebx, ecx
mov dword [ebp - 0x20], ecx
mov cl, byte [edi + esi]
lea ebx, [ebx + 1]
mov byte [ebx - 1], cl
lea esi, [esi + 1]
mov al, byte [eax]
xor al, cl
mov byte [esi - 1], al
mov eax, dword [ebp - 0x28]
inc eax
mov dword [ebp - 0x28], eax
sub edx, 1
jne 0x51c4c1
mov esi, dword [ebp - 0x2c]
mov edx, dword [ebp - 4]
xor eax, eax
mov dword [esi + 0x168], edx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
mov dword [ebp - 0x10], ecx
lea eax, [esi + 0x178]
mov dword [ebp - 0x1c], eax
lea ecx, [esi + 0xc]
mov eax, dword [ecx]
bswap eax
mov dword [ebp - 0x14], ecx
mov ecx, dword [ebp - 4]
mov dword [ebp - 8], eax
mov eax, ecx
and eax, 0xf
mov dword [ebp - 0xc], eax
je 0x51c340
mov ebx, dword [ebp + 8]
lea eax, [ecx + 0x178]
add eax, esi
mov dword [ebp - 0x1c], eax
nop dword [eax]
test edx, edx
je 0x51c5b0
mov cl, byte [edi]
dec edx
mov byte [eax], cl
inc edi
mov eax, dword [ebp - 0xc]
mov dword [ebp + 0xc], edx
mov al, byte [eax + esi + 0x10]
mov esi, dword [ebp - 0xc]
xor al, cl
mov ecx, dword [ebp - 4]
inc esi
mov byte [ebx], al
inc ecx
mov eax, dword [ebp - 0x1c]
inc ebx
inc eax
mov dword [ebp - 4], ecx
and esi, 0xf
mov dword [ebp - 0x1c], eax
mov dword [ebp - 0xc], esi
mov esi, dword [ebp - 0x2c]
jne 0x51c530
mov edx, dword [ebp - 4]
lea eax, [esi + 0x178]
push edx
push eax
lea eax, [esi + 0x60]
lea ecx, [esi + 0x40]
push eax
push ecx
call dword [ebp - 0x18]
mov eax, dword [ebp - 0xc]
add esp, 0x10
mov edx, dword [ebp + 0xc]
xor ecx, ecx
mov dword [ebp - 0xc], eax
mov eax, dword [ebp - 0x10]
mov dword [ebp - 0x10], eax
lea eax, [esi + 0x178]
mov dword [ebp - 0x1c], eax
lea eax, [esi + 0xc]
mov dword [ebp - 0x14], eax
mov eax, dword [ebp - 8]
mov dword [ebp - 4], ecx
mov dword [ebp + 0xc], edx
mov dword [ebp - 8], eax
jmp 0x51c343
mov dword [esi + 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