Function at 0x45e720
Capabilities:
Encode data using xor

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0xf8
mov r13, qword [rsp + 0x160]
mov rsi, qword [rcx + 0x340]
mov rbx, rcx
mov rdi, rdx
mov rbp, r8
mov r12, r9
lea r14, [rcx + 0x1f8]
test byte [rcx + 0x330], 2
jne 0x45e830
cmp rsi, 0xffffffffffffffff
je 0x45e798
test rdx, rdx
je 0x45e798
lea rax, [rsi + 0x10]
xor r15d, r15d
cmp rax, r13
je 0x45ea38
mov eax, r15d
add rsp, 0xf8
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
lea rax, [rbx + 0x1a0]
lea r15, [rbx + 0x1b0]
mov dword [rbx + 0x1a0], 0
mov r8d, 0x40
mov qword [rsp + 0x20], rax
lea r9, [rbx + 0x180]
lea rdx, [0x007737e0]
mov rcx, r15
call sym.ChaCha20_ctr32
mov rdx, r15
mov rcx, r14
call sym.Poly1305_Init
pxor xmm0, xmm0
or byte [rbx + 0x330], 2
mov dword [rbx + 0x1a0], 1
mov dword [rbx + 0x1f0], 0
movups xmmword [rbx + 0x320], xmm0
cmp rsi, 0xffffffffffffffff
je 0x45e830
lea rdx, [rbx + 0x30c]
mov r8d, 0xd
mov rcx, r14
call sym.Poly1305_Update
or byte [rbx + 0x330], 1
mov qword [rbx + 0x320], 0xd
nop
test r12, r12
je 0x45e8f0
test rdi, rdi
je 0x45ed68
test byte [rbx + 0x330], 1
je 0x45e862
mov rax, qword [rbx + 0x320]
and eax, 0xf
jne 0x45e9d0
and byte [rbx + 0x330], 0xfe
mov qword [rbx + 0x340], 0xffffffffffffffff
cmp rsi, 0xffffffffffffffff
je 0x45e890
lea rax, [rsi + 0x10]
cmp rax, r13
je 0x45e893
xor r15d, r15d
xor r13d, r13d
jmp 0x45e98c
mov rsi, r13
lea r15, [rbx + 0xc0]
test byte [rbx + 0x6c], 2
je 0x45e998
mov rax, qword [rbx + 0x168]
mov r9, rsi
mov r8, r12
mov rdx, rdi
mov rcx, r15
call qword [rax + 8]
mov r8, rsi
mov rdx, rdi
mov rcx, r14
call sym.Poly1305_Update
add qword [rbx + 0x328], rsi
mov r15d, 1
cmp rsi, r13
je 0x45e98c
mov byte [rsp + 0x40], 1
add r12, rsi
add rdi, rsi
jmp 0x45e8f5
mov byte [rsp + 0x40], 0
test byte [rbx + 0x330], 1
je 0x45e915
mov rax, qword [rbx + 0x320]
and eax, 0xf
jne 0x45edc8
and byte [rbx + 0x330], 0xfe
mov rax, qword [rbx + 0x328]
and eax, 0xf
jne 0x45ea18
lea rdx, [rbx + 0x320]
mov r8d, 0x10
mov rcx, r14
call sym.Poly1305_Update
lea r10, [rbx + 0x2fc]
test byte [rbx + 0x6c], 2
mov rcx, r14
mov rdx, r10
lea r15, [rsp + 0x50]
mov qword [rsp + 0x38], r10
cmove rdx, r15
call sym.Poly1305_Final
and byte [rbx + 0x330], 0xfd
cmp byte [rsp + 0x40], 0
mov r10, qword [rsp + 0x38]
je 0x45e9f0
test byte [rbx + 0x6c], 2
je 0x45ed90
movdqu xmm2, xmmword [rbx + 0x2fc]
movups xmmword [rdi], xmm2
mov r15d, 1
mov qword [rbp], r13
jmp 0x45e77d
mov r8, rsi
mov rdx, r12
mov rcx, r14
call sym.Poly1305_Update
mov r9, rsi
mov r8, r12
mov rdx, rdi
mov rax, qword [rbx + 0x168]
mov rcx, r15
call qword [rax + 8]
add qword [rbx + 0x328], rsi
jmp 0x45e8cf
mov r8d, 0x10
lea rdx, [0x007737e0]
mov rcx, r14
sub r8, rax
call sym.Poly1305_Update
jmp 0x45e85b
test byte [rbx + 0x6c], 2
jne 0x45e986
mov r8, qword [rbx + 0x338]
mov rdx, r10
mov rcx, r15
call sym.CRYPTO_memcmp
test eax, eax
je 0x45e986
jmp 0x45e87c
mov r8d, 0x10
lea rdx, [0x007737e0]
mov rcx, r14
sub r8, rax
call sym.Poly1305_Update
jmp 0x45e925
lea r10, [rsp + 0x50]
lea rax, [rsp + 0x90]
mov qword [rsp + 0x38], r10
mov r15, r10
lea r11, [rcx + 0x1a0]
lea r9, [rcx + 0x180]
cmp rsi, 0x40
ja 0x45ec68
mov dword [rcx + 0x1a0], 0
mov r8d, pe_nt_image_headers64
mov rcx, r10
lea rdx, [0x007737e0]
mov qword [rsp + 0x20], r11
mov qword [rsp + 0x40], rax
call sym.ChaCha20_ctr32
mov rdx, r15
mov rcx, r14
call sym.Poly1305_Init
test byte [rbx + 0x6c], 2
mov rax, qword [rsp + 0x40]
mov dword [rbx + 0x1f0], 0
movdqu xmm5, xmmword [rbx + 0x30c]
mov qword [rbx + 0x328], rsi
mov qword [rbx + 0x320], 0xd
mov r10, qword [rsp + 0x38]
movups xmmword [r15 + 0x30], xmm5
jne 0x45eea0
test rsi, rsi
je 0x45f20b
lea rcx, [r12 + 1]
mov rdx, rdi
lea r9, [rsi - 1]
sub rdx, rcx
cmp rdx, 0xe
jbe 0x45f21b
cmp r9, 6
jbe 0x45f21b
mov r8, rsi
cmp r9, 0xe
jbe 0x45f292
movdqu xmm1, xmmword [r12]
movdqu xmm0, xmmword [r10 + 0x40]
xor ecx, ecx
shr r8, 4
add rcx, 0x40
pxor xmm0, xmm1
movups xmmword [r10 + 0x40], xmm1
movups xmmword [rdi], xmm0
cmp r8, 1
je 0x45ef6c
movdqu xmm1, xmmword [r12 + 0x10]
movdqu xmm0, xmmword [r10 + 0x50]
pxor xmm0, xmm1
movups xmmword [r10 + 0x50], xmm1
movups xmmword [rdi + 0x10], xmm0
cmp r8, 2
je 0x45ef6c
movdqu xmm1, xmmword [r12 + 0x20]
movdqu xmm0, xmmword [r10 + 0x60]
pxor xmm0, xmm1
movups xmmword [r10 + 0x60], xmm1
movups xmmword [rdi + 0x20], xmm0
cmp r8, 4
jne 0x45ef6c
movdqu xmm1, xmmword [r12 + 0x30]
movdqu xmm0, xmmword [r10 + 0x70]
pxor xmm0, xmm1
movups xmmword [r10 + 0x70], xmm1
movups xmmword [rdi + 0x30], xmm0
nop dword [rax]
mov rdx, rsi
lea r9, [rax + rsi]
add r12, rsi
add rdi, rsi
neg rdx
and edx, 0xf
lea r8, [rsi + rdx]
add rax, r8
add r8, 0x20
lea rsi, [r15 + 0x30]
mov ecx, edx
xor r11d, r11d
cmp edx, 8
jae 0x45ee58
and edx, 4
jne 0x45f270
test ecx, ecx
je 0x45ebea
mov byte [r9], 0
test cl, 2
jne 0x45f29f
mov r9d, pe_nt_image_headers64
movdqu xmm3, xmmword [rbx + 0x320]
mov rdx, rsi
mov rcx, r14
mov qword [rsp + 0x38], r9
movups xmmword [rax], xmm3
call sym.Poly1305_Update
mov r9, qword [rsp + 0x38]
mov rcx, r15
mov rdx, r9
call sym.OPENSSL_cleanse
test byte [rbx + 0x6c], 2
lea rdx, [rbx + 0x2fc]
mov rcx, r14
cmove rdx, rsi
call sym.Poly1305_Final
mov qword [rbx + 0x340], 0xffffffffffffffff
test byte [rbx + 0x6c], 2
je 0x45ede8
movdqu xmm4, xmmword [rbx + 0x2fc]
movups xmmword [rdi], xmm4
mov qword [rbp], r13
mov r15d, 1
jmp 0x45e77d
mov dword [rcx + 0x1a0], 0
mov r8d, 0x40
mov rcx, r10
lea rdx, [0x007737e0]
mov qword [rsp + 0x20], r11
mov qword [rsp + 0x48], rax
mov qword [rsp + 0x40], r11
mov qword [rsp + 0x38], r9
call sym.ChaCha20_ctr32
mov rdx, r15
mov rcx, r14
call sym.Poly1305_Init
lea rdx, [rbx + 0x30c]
mov r8d, 0x10
mov rcx, r14
mov dword [rbx + 0x1a0], 1
mov dword [rbx + 0x1f0], 0
call sym.Poly1305_Update
test byte [rbx + 0x6c], 2
mov r9, qword [rsp + 0x38]
mov qword [rbx + 0x320], 0xd
mov qword [rbx + 0x328], rsi
mov r11, qword [rsp + 0x40]
mov rax, qword [rsp + 0x48]
je 0x45ee10
mov qword [rsp + 0x20], r11
mov r8, rsi
mov rdx, r12
mov rcx, rdi
mov qword [rsp + 0x38], rax
call sym.ChaCha20_ctr32
mov r8, rsi
mov rdx, rdi
mov rcx, r14
call sym.Poly1305_Update
mov rax, qword [rsp + 0x38]
add r12, rsi
add rdi, rsi
neg rsi
mov rcx, r14
mov r8, rsi
lea rdx, [0x007737e0]
mov qword [rsp + 0x38], rax
and r8d, 0xf
call sym.Poly1305_Update
mov rax, qword [rsp + 0x38]
mov r8d, 0x10
mov r9d, 0x40
mov rsi, rax
jmp 0x45ebf0
mov r8, r13
mov rdx, r12
mov rcx, r14
mov r15d, 1
call sym.Poly1305_Update
add qword [rbx + 0x320], r13
or byte [rbx + 0x330], 1
jmp 0x45e98c
mov r8d, 0x10
mov rdx, r12
mov rcx, r15
sub r13, 0x10
call sym.CRYPTO_memcmp
test eax, eax
je 0x45e986
sub rdi, rsi
mov r8, rsi
xor edx, edx
mov rcx, rdi
call sym.memset
jmp 0x45e87c
mov r8d, 0x10
lea rdx, [0x007737e0]
mov rcx, r14
sub r8, rax
call sym.Poly1305_Update
jmp 0x45e90e
mov r8d, 0x10
mov rdx, r12
mov rcx, rsi
call sym.CRYPTO_memcmp
test eax, eax
jne 0x45f1e7
sub r13, 0x10
jmp 0x45ec52
mov r8, rsi
mov rdx, r12
mov rcx, r14
mov qword [rsp + 0x38], rax
mov qword [rsp + 0x48], r9
mov qword [rsp + 0x40], r11
call sym.Poly1305_Update
mov r11, qword [rsp + 0x40]
mov r8, rsi
mov rdx, r12
mov r9, qword [rsp + 0x48]
mov rcx, rdi
mov qword [rsp + 0x20], r11
call sym.ChaCha20_ctr32
mov rax, qword [rsp + 0x38]
jmp 0x45ed25
lea r10, [r9 + 8]
mov qword [r9], 0
mov qword [r9 + rdx - 8], 0
and r10, 0xfffffffffffffff8
sub r9, r10
lea ecx, [rdx + r9]
and ecx, 0xfffffff8
cmp ecx, 8
jb 0x45ebea
and ecx, 0xfffffff8
xor edx, edx
mov r9d, edx
add edx, 8
mov qword [r10 + r9], r11
cmp edx, ecx
jb 0x45ee88
jmp 0x45ebea
test rsi, rsi
je 0x45f20b
lea rcx, [r12 + 1]
mov rdx, rdi
lea r9, [rsi - 1]
sub rdx, rcx
cmp rdx, 0xe
jbe 0x45f245
cmp r9, 6
jbe 0x45f245
mov r8, rsi
cmp r9, 0xe
jbe 0x45f285
movdqu xmm0, xmmword [r10 + 0x40]
movdqu xmm5, xmmword [r12]
xor ecx, ecx
shr r8, 4
add rcx, 0x40
pxor xmm0, xmm5
movups xmmword [r10 + 0x40], xmm0
movups xmmword [rdi], xmm0
cmp r8, 1
je 0x45f0b8
movdqu xmm0, xmmword [r10 + 0x50]
movdqu xmm5, xmmword [r12 + 0x10]
pxor xmm0, xmm5
movups xmmword [r10 + 0x50], xmm0
movups xmmword [rdi + 0x10], xmm0
cmp r8, 2
je 0x45f0b8
movdqu xmm0, xmmword [r10 + 0x60]
movdqu xmm4, xmmword [r12 + 0x20]
pxor xmm0, xmm4
movups xmmword [r10 + 0x60], xmm0
movups xmmword [rdi + 0x20], xmm0
cmp r8, 4
jne 0x45f0b8
movdqu xmm0, xmmword [r12 + 0x30]
movdqu xmm4, xmmword [r10 + 0x70]
pxor xmm0, xmm4
movups xmmword [r10 + 0x70], xmm0
movups xmmword [rdi + 0x30], xmm0
jmp 0x45eba0
mov rdx, rsi
and rdx, 0xfffffffffffffff0
test sil, 0xf
je 0x45eba0
mov r8, rsi
sub r9, rdx
sub r8, rdx
cmp r9, 6
jbe 0x45efbe
add rcx, rdx
movq xmm1, qword [r12 + rdx]
add r10, rcx
mov rcx, r8
movq xmm0, qword [r10]
and rcx, 0xfffffffffffffff8
movq qword [r10], xmm1
pxor xmm0, xmm1
movq qword [rdi + rdx], xmm0
add rdx, rcx
cmp rcx, r8
je 0x45eba0
lea rcx, [rax + rdx]
movzx r8d, byte [r12 + rdx]
movzx r9d, byte [rcx]
mov byte [rcx], r8b
lea rcx, [rdx + 1]
xor r9d, r8d
mov byte [rdi + rdx], r9b
cmp rsi, rcx
jbe 0x45eba0
add rcx, rax
movzx r8d, byte [r12 + rdx + 1]
movzx r9d, byte [rcx]
mov byte [rcx], r8b
lea rcx, [rdx + 2]
xor r9d, r8d
mov byte [rdi + rdx + 1], r9b
cmp rsi, rcx
jbe 0x45eba0
add rcx, rax
movzx r8d, byte [r12 + rdx + 2]
movzx r9d, byte [rcx]
mov byte [rcx], r8b
lea rcx, [rdx + 3]
xor r9d, r8d
mov byte [rdi + rdx + 2], r9b
cmp rsi, rcx
jbe 0x45eba0
add rcx, rax
movzx r8d, byte [r12 + rdx + 3]
movzx r9d, byte [rcx]
mov byte [rcx], r8b
lea rcx, [rdx + 4]
xor r9d, r8d
mov byte [rdi + rdx + 3], r9b
cmp rsi, rcx
jbe 0x45eba0
add rcx, rax
movzx r8d, byte [r12 + rdx + 4]
movzx r9d, byte [rcx]
mov byte [rcx], r8b
lea rcx, [rdx + 5]
xor r9d, r8d
mov byte [rdi + rdx + 4], r9b
cmp rsi, rcx
jbe 0x45eba0
add rcx, rax
movzx r8d, byte [r12 + rdx + 5]
movzx r9d, byte [rcx]
mov byte [rcx], r8b
lea rcx, [rdx + 6]
xor r9d, r8d
mov byte [rdi + rdx + 5], r9b
cmp rsi, rcx
jbe 0x45eba0
add rcx, rax
movzx r8d, byte [r12 + rdx + 6]
movzx r9d, byte [rcx]
mov byte [rcx], r8b
xor r9d, r8d
mov byte [rdi + rdx + 6], r9b
jmp 0x45eba0
mov rdx, rsi
and rdx, 0xfffffffffffffff0
test sil, 0xf
je 0x45eba0
mov r8, rsi
sub r9, rdx
sub r8, rdx
cmp r9, 6
jbe 0x45f10a
add rcx, rdx
movq xmm0, qword [r12 + rdx]
add r10, rcx
mov rcx, r8
movq xmm1, qword [r10]
and rcx, 0xfffffffffffffff8
pxor xmm0, xmm1
movq qword [rdi + rdx], xmm0
add rdx, rcx
movq qword [r10], xmm0
cmp rcx, r8
je 0x45eba0
lea r8, [rax + rdx]
movzx ecx, byte [r12 + rdx]
xor cl, byte [r8]
mov byte [r8], cl
mov byte [rdi + rdx], cl
lea rcx, [rdx + 1]
cmp rsi, rcx
jbe 0x45eba0
add rcx, rax
movzx r8d, byte [r12 + rdx + 1]
xor r8b, byte [rcx]
mov byte [rcx], r8b
lea rcx, [rdx + 2]
mov byte [rdi + rdx + 1], r8b
cmp rsi, rcx
jbe 0x45eba0
add rcx, rax
movzx r8d, byte [r12 + rdx + 2]
xor r8b, byte [rcx]
mov byte [rcx], r8b
lea rcx, [rdx + 3]
mov byte [rdi + rdx + 2], r8b
cmp rsi, rcx
jbe 0x45eba0
add rcx, rax
movzx r8d, byte [r12 + rdx + 3]
xor r8b, byte [rcx]
mov byte [rcx], r8b
lea rcx, [rdx + 4]
mov byte [rdi + rdx + 3], r8b
cmp rsi, rcx
jbe 0x45eba0
add rcx, rax
movzx r8d, byte [r12 + rdx + 4]
xor r8b, byte [rcx]
mov byte [rcx], r8b
lea rcx, [rdx + 5]
mov byte [rdi + rdx + 4], r8b
cmp rsi, rcx
jbe 0x45eba0
add rcx, rax
movzx r8d, byte [r12 + rdx + 5]
xor r8b, byte [rcx]
mov byte [rcx], r8b
lea rcx, [rdx + 6]
mov byte [rdi + rdx + 5], r8b
cmp rsi, rcx
jbe 0x45eba0
add rcx, rax
movzx r8d, byte [r12 + rdx + 6]
xor r8b, byte [rcx]
mov byte [rcx], r8b
mov byte [rdi + rdx + 6], r8b
jmp 0x45eba0
xor r15d, r15d
cmp r13, 0x10
jbe 0x45e77d
sub rdi, r13
lea r8, [r13 - 0x10]
xor edx, edx
lea rcx, [rdi + 0x10]
call sym.memset
jmp 0x45e77d
mov r9, rax
xor edx, edx
mov r8d, 0x20
jmp 0x45ebbe
xor edx, edx
nop dword [rax]
movzx ecx, byte [r12 + rdx]
movzx r8d, byte [r15 + rdx + 0x40]
xor r8d, ecx
mov byte [r15 + rdx + 0x40], cl
mov byte [rdi + rdx], r8b
add rdx, 1
cmp rsi, rdx
jne 0x45f220
jmp 0x45eba0
xor edx, edx
nop word [rax + rax]
movzx ecx, byte [r12 + rdx]
xor cl, byte [r15 + rdx + 0x40]
mov byte [r15 + rdx + 0x40], cl
mov byte [rdi + rdx], cl
add rdx, 1
cmp rsi, rdx
jne 0x45f250
jmp 0x45eba0
mov dword [r9], 0
mov dword [r9 + rcx - 4], 0
jmp 0x45ebea
xor ecx, ecx
xor edx, edx
add rcx, 0x40
jmp 0x45f0d8
xor ecx, ecx
xor edx, edx
add rcx, 0x40
jmp 0x45ef8c
mov word [r9 + rcx - 2], 0
jmp 0x45ebea