Function at 0x51bef0
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
mov eax, 0x2c
call fcn.0065d180
push ebx
push esi
mov esi, ecx
mov ecx, dword [ebp + 0xc]
push edi
mov edi, edx
mov dword [ebp - 0x2c], esi
xor edx, edx
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, ecx
add eax, dword [esi + 0x38]
adc edx, dword [esi + 0x3c]
cmp edx, 0xf
ja 0x51c245
jb 0x51bf43
cmp eax, 0xffffffe0
ja 0x51c245
cmp dword [esi + 0x16c], 0
lea ebx, [esi + 0x40]
mov dword [esi + 0x3c], edx
mov edx, dword [esi + 0x168]
mov dword [esi + 0x38], eax
mov dword [ebp - 0xc], edx
mov dword [ebp - 0x10], ebx
je 0x51c18d
test ecx, ecx
jne 0x51bf8c
lea eax, [esi + 0x60]
push eax
mov eax, dword [esi + 0x160]
push ebx
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 [ebx]
lea eax, [esi + 0x178]
mov dword [ebp - 8], 0
mov dword [ebp - 0x1c], eax
mov edx, 0x10
movups xmmword [eax], xmm0
mov dword [ebx], 0
lea eax, [esi + 0xc]
mov dword [ebx + 4], 0
mov dword [esi + 0x48], 0
mov dword [esi + 0x4c], 0
mov dword [ebp - 0x14], eax
mov eax, dword [eax]
bswap eax
mov dword [ebp - 0xc], edx
mov dword [esi + 0x16c], 0
mov dword [ebp - 4], eax
mov ebx, dword [ebp + 8]
lea eax, [esi + 0x60]
cmp ecx, 0x10
jb 0x51c003
test edx, edx
je 0x51c003
push edx
push dword [ebp - 0x1c]
push eax
push dword [ebp - 0x10]
call dword [ebp - 0x18]
mov ecx, dword [ebp + 0xc]
add esp, 0x10
mov dword [ebp - 0xc], 0
cmp ecx, 0xc00
jb 0x51c09c
mov eax, 0xaaaaaaab
mul ecx
shr edx, 0xb
mov dword [ebp - 0x28], edx
nop dword [eax]
mov dword [ebp - 0x1c], 0xc0
push dword [ebp - 0x20]
lea eax, [esi + 0x10]
push eax
push esi
call dword [ebp - 0x24]
mov eax, dword [ebp - 4]
add esp, 0xc
mov ecx, dword [ebp - 0x14]
inc eax
mov dword [ebp - 4], eax
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 0x51c027
push 0xc00
lea eax, [ebx - 0xc00]
push eax
lea eax, [esi + 0x60]
push eax
push dword [ebp - 0x10]
call dword [ebp - 0x18]
mov ecx, dword [ebp + 0xc]
add esp, 0x10
sub ecx, 0xc00
sub dword [ebp - 0x28], 1
mov dword [ebp + 0xc], ecx
jne 0x51c020
mov edx, ecx
and edx, 0xfffffff0
mov dword [ebp - 0x1c], edx
je 0x51c11b
cmp ecx, 0x10
jb 0x51c105
shr ecx, 4
lea eax, [esi + 0x10]
mov dword [ebp - 0x28], ecx
push dword [ebp - 0x20]
push eax
push esi
call dword [ebp - 0x24]
mov eax, dword [ebp - 4]
add esp, 0xc
mov ecx, dword [ebp - 0x14]
inc eax
mov dword [ebp - 4], eax
bswap eax
sub dword [ebp + 0xc], 0x10
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]
jne 0x51c0b4
mov edx, dword [ebp - 0x1c]
push edx
mov eax, ebx
sub eax, edx
push eax
lea eax, [esi + 0x60]
push eax
push dword [ebp - 0x10]
call dword [ebp - 0x18]
mov ecx, dword [ebp + 0xc]
add esp, 0x10
test ecx, ecx
je 0x51c17b
push dword [ebp - 0x20]
lea eax, [esi + 0x10]
push eax
push esi
call dword [ebp - 0x24]
mov eax, dword [ebp - 4]
sub edi, ebx
mov ecx, dword [ebp - 0x14]
inc eax
bswap eax
add esp, 0xc
mov dword [ecx], eax
mov eax, dword [ebp - 0xc]
mov ecx, dword [ebp - 8]
add eax, 0x178
add eax, esi
mov dword [ebp - 0x28], eax
lea eax, [ecx + 0x10]
add eax, esi
lea edx, [ecx + ebx]
mov ecx, dword [ebp + 0xc]
mov esi, eax
add dword [ebp - 0xc], ecx
mov ebx, dword [ebp - 0x28]
mov dword [ebp - 0x24], eax
mov al, byte [edi + edx]
lea ebx, [ebx + 1]
xor al, byte [esi]
lea esi, [esi + 1]
mov byte [edx], al
lea edx, [edx + 1]
mov byte [ebx - 1], al
sub ecx, 1
jne 0x51c160
mov esi, dword [ebp - 0x2c]
mov eax, dword [ebp - 0xc]
mov dword [esi + 0x168], eax
xor eax, eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
lea eax, [esi + 0x178]
mov dword [ebp - 0x10], ebx
mov dword [ebp - 0x1c], eax
lea eax, [esi + 0xc]
mov dword [ebp - 0x14], eax
mov eax, dword [eax]
bswap eax
mov dword [ebp - 4], eax
mov eax, edx
and eax, 0xf
mov dword [ebp - 8], eax
je 0x51bfdc
mov ebx, dword [ebp + 8]
lea eax, [esi + 0x178]
add eax, edx
mov dword [ebp - 0x14], eax
mov eax, dword [ebp - 8]
test ecx, ecx
je 0x51c236
mov al, byte [eax + esi + 0x10]
dec ecx
xor al, byte [edi]
inc edx
mov esi, dword [ebp - 0x14]
inc edi
inc dword [ebp - 0x14]
mov byte [ebx], al
inc ebx
mov dword [ebp + 0xc], ecx
mov byte [esi], al
mov eax, dword [ebp - 8]
mov esi, dword [ebp - 0x2c]
inc eax
and eax, 0xf
mov dword [ebp - 8], eax
jne 0x51c1c5
push edx
lea eax, [esi + 0x178]
push eax
lea eax, [esi + 0x60]
lea ecx, [esi + 0x40]
push eax
push ecx
call dword [ebp - 0x18]
mov eax, dword [ebp - 8]
add esp, 0x10
mov ecx, dword [ebp + 0xc]
xor edx, edx
mov dword [ebp - 8], 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 - 4]
mov dword [ebp - 0xc], edx
mov dword [ebp + 0xc], ecx
mov dword [ebp - 4], eax
jmp 0x51bfdf
mov dword [esi + 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