Function at 0x51f100
Capabilities:
Encode data using xor

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x178
lea rdi, [rsp + 0xe0]
mov r14, rcx
mov rsi, rdx
mov rbp, r8
mov rbx, rdi
lea r12, [rsp + 0x120]
mov rax, rdi
nop word [rax + rax]
mov dword [rax], 0
add rax, 4
cmp r12, rax
jne 0x51f138
mov r13, rsi
mov rcx, rdi
mov rdx, r14
mov dword [rsp + 0x11c], 0x10000
mov qword [rsp + 0x120], 0
shr r13, 3
mov r8d, r13d
mov r15d, r13d
mov qword [rsp + 0x168], 0
call sym.Transform
test r13d, r13d
lea ecx, [r13 + 0x3f]
cmovns ecx, r13d
and ecx, 0xffffffc0
cmp r13d, ecx
jle 0x51f482
movsxd rdx, dword [rsp + 0x168]
movsxd rax, ecx
mov r8, rdx
sub rdx, rax
add rdx, rdi
movzx r9d, byte [r14 + rax]
mov byte [rdx + rax + 0x48], r9b
add rax, 1
cmp r15d, eax
jg 0x51f1ad
mov eax, ecx
mov ecx, r13d
add r13d, r8d
sub r13d, eax
mov dword [rsp + 0x168], r13d
and esi, 7
jne 0x51f45f
mov esi, dword [rsp + 0x16c]
test esi, esi
jne 0x51f408
lea eax, [r13 + 1]
movsxd r13, r13d
mov dword [rsp + 0x168], eax
mov byte [rsp + r13 + 0x128], pe_nt_image_headers64
cmp eax, 0x38
jle 0x51f3f0
lea r13, [rsp + 0x128]
cmp eax, 0x3f
jg 0x51f242
cdqe
lea r13, [rsp + 0x128]
nop word [rax + rax]
mov byte [r13 + rax], 0
add rax, 1
cmp eax, 0x3f
jle 0x51f228
mov dword [rsp + 0x168], 0x40
mov r8d, 0x40
mov rdx, r13
mov rcx, rdi
call sym.Transform
xor eax, eax
cdqe
nop word [rax + rax]
mov byte [r13 + rax], 0
add rax, 1
cmp eax, 0x37
jle 0x51f260
mov eax, dword [rsp + 0x120]
mov edx, dword [rsp + 0x124]
mov rcx, rdi
lea rsi, [rsp + 0x20]
mov r8d, 0x40
mov qword [rsp + 0x120], 0
mov dword [rsp + 0x168], 0x38
add eax, 1
cmp eax, 1
bswap eax
mov dword [rsp + 0x164], eax
adc edx, 0
bswap edx
mov dword [rsp + 0x160], edx
mov rdx, r13
call sym.Transform
xor eax, eax
nop word [rax + rax]
mov edx, dword [rdi + rax]
mov dword [rsi + rax], edx
add rax, 4
cmp rax, 0x40
jne 0x51f2d0
lea r13, [rsp + 0x60]
lea r14, [rsp + 0xa0]
xor r8d, r8d
mov rcx, rsi
mov rdx, r13
call sym.RND512P
mov r8d, 1
mov rdx, r14
mov rcx, r13
call sym.RND512P
mov r8d, 2
mov rdx, r13
mov rcx, r14
call sym.RND512P
mov r8d, 3
mov rdx, r14
mov rcx, r13
call sym.RND512P
mov r8d, 4
mov rdx, r13
mov rcx, r14
call sym.RND512P
mov r8d, 5
mov rdx, r14
mov rcx, r13
call sym.RND512P
mov r8d, 6
mov rdx, r13
mov rcx, r14
call sym.RND512P
mov r8d, 7
mov rdx, r14
mov rcx, r13
call sym.RND512P
mov r8d, 8
mov rdx, r13
mov rcx, r14
call sym.RND512P
mov r8d, 9
mov rdx, rsi
mov rcx, r13
call sym.RND512P
mov rax, rsi
nop word [rax + rax]
mov edx, dword [rax]
xor dword [rbx], edx
add rbx, 4
add rax, 4
cmp r12, rbx
jne 0x51f3a0
mov eax, 0x20
nop word cs:[rax + rax]
movzx edx, byte [rdi + rax]
mov byte [rbp + rax - 0x20], dl
add rax, 1
cmp rax, 0x40
jne 0x51f3c0
add rsp, 0x178
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
lea r13, [rsp + 0x128]
jne 0x51f255
jmp 0x51f26f
lea r9d, [r13 - 1]
mov eax, r13d
movsxd r9, r9d
movzx edx, byte [rsp + r9 + 0x128]
mov r10d, 1
mov ecx, esi
mov dword [rsp + 0x16c], 0
mov r8d, r10d
shl r8d, cl
mov ecx, 8
sub ecx, esi
sub r8d, 1
shl r8d, cl
mov ecx, 7
sub ecx, esi
and edx, r8d
shl r10d, cl
xor edx, r10d
mov byte [rsp + r9 + 0x128], dl
jmp 0x51f202
movsxd rcx, ecx
lea eax, [r13 + 1]
movsxd r13, r13d
movzx edx, byte [r14 + rcx]
mov dword [rsp + 0x168], eax
mov r9, r13
mov byte [rsp + r13 + 0x128], dl
jmp 0x51f41b
mov r13d, dword [rsp + 0x168]
jmp 0x51f1d3