Function at 0x20084730
Capabilities:
Encrypt data using speck

Disassembly:
push r15
push r14
push rsi
push rdi
push rbp
push rbx
sub rsp, 0x88
mov esi, r9d
mov rbx, r8
mov r14, rdx
mov rdi, rcx
mov ecx, r9d
and ecx, 0x3f
cmp ecx, 0xf
jbe 0x200847fd
cmp ecx, 0x18
jae 0x2008481e
cmp ecx, 0x14
jae 0x20084886
cmp ecx, 0x11
jbe 0x2008490e
cmp ecx, 0x13
jne 0x20084ad3
lea rax, [0x2046dad8]
mov qword [rdi], rax
mov r8, rdi
mov r9d, 0xb7a6db5c
call fcn.2007d0a0
lea rax, [0x2046dbf8]
mov qword [rdi], rax
mov r15, qword [rdi + 0x60]
test r15, r15
je 0x20084e0b
nop
mov rcx, qword [r15 + 8]
test rcx, rcx
je 0x20084e03
nop
mov rax, qword [rcx]
mov rax, qword [rax + 0x10]
call qword [case.0x200c66ec.0]
test rax, rax
je 0x20084dec
nop
mov rcx, qword [rax]
mov r8, qword [rcx]
mov rcx, rax
mov edx, 1
mov rax, r8
call qword [case.0x200c66ec.0]
xor eax, eax
test esi, 0x200
jne 0x20084f0b
jmp 0x20084e03
cmp ecx, 8
jae 0x20084863
cmp ecx, 1
jbe 0x200848b0
cmp ecx, 2
jne 0x20084926
nop
movzx eax, word [rbx + 0x1a]
jmp 0x200852a3
cmp ecx, 0x19
jbe 0x200848c7
cmp ecx, 0x1d
jae 0x20084972
cmp ecx, 0x1a
je 0x20084bf9
mov eax, 0xffffffff
cmp ecx, 0x1c
je 0x200852a3
nop
movzx eax, byte [0x20564156]
cmp al, 0x5c
jne 0x2008516e
lea rax, [0x20564140]
jmp 0x200852a3
cmp ecx, 0xc
jae 0x200848f3
cmp ecx, 9
jbe 0x200849f3
mov eax, 0xffff
cmp ecx, 0xb
je 0x200852a3
nop
ud2
add ecx, 0xffffffec
lea rax, [0x2046eefc]
movsxd rcx, dword [rax + rcx*4]
add rcx, rax
jmp rcx
nop
movzx eax, byte [0x20564189]
cmp al, 0x96
je 0x200852b3
xor eax, eax
jmp 0x20084f03
test ecx, ecx
je 0x20084a9f
mov rcx, rdi
call fcn.20421e38
xor eax, eax
jmp 0x200852a3
cmp ecx, 0x18
jne 0x20084a3e
mov rcx, rdi
call fcn.2007ad00
test ebx, ebx
je 0x20084f58
test esi, 0x800
jne 0x20084c5b
xor ebp, ebp
jmp 0x20084f7a
jne 0x20084a77
nop
movzx eax, byte [0x20564175]
cmp al, 0x87
jne 0x200851ac
jmp 0x2008529c
cmp ecx, 0x10
jne 0x20084b52
xor eax, eax
test ebx, ebx
jne 0x20084fc6
jmp 0x20084f72
cmp ecx, 4
jbe 0x20084b9a
cmp ecx, 5
je 0x20084abf
cmp ecx, 6
jne 0x20084d72
xor eax, eax
sub eax, dword [r14 - 4]
cdqe
lea rdx, [r14 + rax]
add rdx, 0xffffffffffffff78
mov r15, rdx
mov r9d, 0xb1dea114
call fcn.2007d0a0
test edi, edi
je 0x20084e2d
mov rcx, r15
jmp 0x20084b68
cmp ecx, 0x1f
jae 0x20084bcc
cmp ecx, 0x1d
jne 0x20084c74
lea rax, [0x2046e1c8]
mov qword [r14], rax
mov r15, qword [r14 + 0x60]
test r15, r15
je 0x200853d8
test sil, 0x40
je 0x200851cd
nop
mov rcx, qword [r15 + 8]
test rcx, rcx
je 0x20084df6
test esi, 0x400
jne 0x20084857
nop
mov rax, qword [rcx]
mov rax, qword [rax + 0x10]
call qword [case.0x200c66ec.0]
test rax, rax
je 0x20084df6
nop
mov rcx, qword [rax]
mov r8, qword [rcx]
mov rcx, rax
mov edx, 1
mov rax, r8
call qword [case.0x200c66ec.0]
jmp 0x20084df6
cmp ecx, 8
jne 0x20084be1
lea rax, [0x2046dbf8]
mov qword [rdi], rax
mov r15, qword [rdi + 0x60]
test r15, r15
je 0x20084d19
test esi, 0x100
jne 0x20084f72
nop
mov rcx, qword [r15 + 8]
test rcx, rcx
jne 0x20084db5
test esi, 0x1000
jne 0x20084ecf
jmp 0x20084e10
nop
movzx eax, byte [0x20564233]
cmp al, 0xab
je 0x200853e4
test esi, 0x400
jne 0x20084c86
lea r8, [rsp + 0x80]
lea rax, [rsp + 0x58]
lea r10, [rsp + 0x78]
mov rdx, r10
mov rcx, rax
jmp 0x20084e79
cmp ecx, 0xe
jb 0x20084abf
cmp ecx, 0xf
jne 0x20084ca6
nop
mov rax, qword [rdi + 0x38]
mov rdx, qword [rax]
test rdx, rdx
je 0x20084da1
lea rcx, [rdi + 0x38]
jmp 0x20084b3e
mov rcx, rbx
call fcn.2007ad00
test edi, edi
je 0x2008519c
xor eax, eax
test sil, sil
js 0x20084cff
jmp 0x200852a3
xor eax, eax
jmp 0x200852a3
call fcn.2042482c
movzx eax, al
jmp 0x200852a3
nop
mov rax, qword [rbx]
mov rax, qword [rax + 0x18]
lea rdx, [rsp + 0x68]
mov rcx, rbx
mov r8d, edi
call qword [case.0x200c66ec.0]
mov rax, qword [rsp + 0x70]
mov rcx, qword [r14 + 8]
mov rax, qword [rax + 8]
cmp rax, qword [rcx + 8]
sete al
mov ecx, dword [rsp + 0x68]
cmp ecx, dword [r14]
sete cl
and cl, al
movzx eax, cl
jmp 0x200852a3
test r14d, r14d
je 0x20084f72
mov rcx, rdi
call fcn.200782c0
test esi, 0x100
je 0x20084f72
lea rax, [rsp + 0x60]
lea rdx, [rsp + 0x40]
mov rcx, rax
nop
mov r8, qword [rdi + 0x50]
cmp dword [r8], 0
jg 0x20084ea9
jmp 0x20084e6c
mov rcx, rdi
call fcn.2007c100
test r14d, r14d
je 0x20084f72
lea rcx, [rsp + 0x68]
test sil, 0x40
jne 0x20084ceb
mov rcx, rdi
call fcn.200782c0
mov rax, rdi
test sil, sil
jns 0x200852a3
mov al, 0x74
xchg byte [0x20564135], al
lea rax, [0x20564120]
jmp 0x200852a3
jne 0x20084cc5
nop
mov r15, qword [rbx + 8]
test r15, r15
sete bpl
movzx eax, byte [0x205640d2]
cmp al, 0x2a
je 0x2008511a
test esi, 0x800
je 0x200851ac
jmp 0x200852cc
jne 0x20084cd7
mov rcx, rdi
call fcn.20338a60
xor eax, eax
jmp 0x200852a3
test edi, edi
jne 0x20084f94
jmp 0x20085106
nop
movzx eax, word [r14 + 0x18]
jmp 0x200852a3
nop
mov qword [rsp + 0x58], r14
mov qword [rsp + 0x78], rbx
mov qword [rsp + 0x50], rdi
mov qword [rsp + 0x38], rdi
mov qword [rsp + 0x20], rbx
cmp rdi, rbx
jae 0x20084d24
test r14, r14
je 0x20084e41
cmp r14, 1
mov rcx, r14
adc rcx, 0
xor eax, eax
test sil, sil
js 0x20084e50
nop
mov rdx, qword [rsp + 0x20]
movzx edx, byte [rdx + rax]
mov r8, qword [rsp + 0x38]
mov byte [r8 + rax], dl
inc rax
cmp rcx, rax
jne 0x20084c32
jmp 0x20084e43
mov rcx, rdi
call fcn.200782c0
test sil, sil
mov rax, r14
js 0x200852a3
jmp 0x20084f72
mov rcx, rbx
mov rdx, r14
call fcn.2040717c
mov eax, eax
jmp 0x200852a3
mov cl, 0xc6
nop dword [rax + rax]
mov al, 0x12
lock cmpxchg byte [0x20564233], cl
je 0x20084d9a
cmp al, 0xab
jne 0x20084c90
jmp 0x20084d07
test edi, edi
je 0x20085106
test sil, 0x40
jne 0x20085147
mov rcx, r14
call fcn.200782c0
jmp 0x20085106
mov ecx, r14d
mov rdx, rdi
call fcn.20407204
mov eax, eax
jmp 0x200852a3
nop
movzx ecx, byte [0x20564135]
xor eax, eax
cmp cl, 0x74
je 0x20084d5c
jmp 0x200853a3
mov rdi, rcx
call fcn.200782c0
mov rax, rdi
test sil, sil
jns 0x200852a3
mov rcx, rbx
call fcn.200782c0
mov rax, rbx
test sil, 0x40
jne 0x200852a3
jmp 0x200853e4
mov bpl, 1
xor r15d, r15d
jmp 0x20084ed9
nop
mov qword [rsp + 0x30], r14
test esi, 0x800
jne 0x20084dab
test r14, r14
je 0x20084d5c
nop
mov rax, qword [rsp + 0x20]
movzx eax, byte [rax + r14 - 1]
mov rcx, qword [rsp + 0x38]
mov byte [rcx + r14 - 1], al
mov r14, qword [rsp + 0x30]
dec r14
mov qword [rsp + 0x30], r14
jne 0x20084d37
test sil, 0x40
je 0x200851c2
lea rax, [0x20564120]
jmp 0x200852a3
nop
mov qword [rsp + 0x40], r14
mov qword [rsp + 0x80], rdi
mov qword [rsp + 0x60], rdi
mov qword [rsp + 0x28], 0
lea r15, [rsp + 0x50]
xor ebp, ebp
jmp 0x200852da
xor eax, eax
jmp 0x2008535c
mov r9w, 0xffff
jmp 0x20084efa
lea r15, [rsp + 0x20]
lea rcx, [rsp + 0x38]
nop
mov rax, qword [rcx]
mov rax, qword [rax + 0x10]
call qword [case.0x200c66ec.0]
test rax, rax
je 0x20084ecf
nop
mov rcx, qword [rax]
mov r8, qword [rcx]
mov rcx, rax
mov edx, 1
mov rax, r8
call qword [case.0x200c66ec.0]
xor r9d, r9d
jmp 0x20084ec7
test sil, sil
js 0x20084e03
lea r15, [rsp + 0x28]
mov rcx, r15
call fcn.200782c0
jmp 0x200850fa
mov rcx, r15
call fcn.200782c0
test r14d, r14d
je 0x20084e20
mov rcx, rdi
call fcn.200782c0
mov rax, rdi
jmp 0x200852a3
lea r15, [rsp + 0x48]
mov bpl, 1
jmp 0x20084ee1
test esi, 0x100
mov rax, r15
jne 0x20085106
jmp 0x200852a3
xor eax, eax
nop
mov qword [rsp + 0x48], rax
xor eax, eax
jmp 0x200851ba
nop
mov qword [rsp + 0x48], 0
lea rax, [rsp + 0x68]
lea rcx, [rsp + 0x40]
lea r8, [rsp + 0x20]
mov rdx, rax
nop
mov r9, qword [rdi + 0x40]
mov r10, qword [r9]
test r10, r10
je 0x20084ebf
mov r9w, 0xffff
test byte [rdi + 0x70], 4
jne 0x20084efa
nop
mov r15, qword [rdi + 0x68]
cmp r15, r10
cmovb r15, r10
cmp r15, rdx
jbe 0x20084eb0
nop
mov qword [rdi + 0x68], r15
sub r15, qword [rax]
shr r15, 1
mov dword [r8], r15d
mov rax, qword [rcx]
mov rdx, qword [rax]
nop
movzx r9d, word [rdx]
jmp 0x20084efa
test esi, 0x1000
je 0x20084efa
xor ebp, ebp
jmp 0x200852e6
mov r9w, 0xffff
xor r15d, r15d
test esi, 0x2000
jne 0x20084efa
mov rcx, r15
call fcn.200782c0
xor ebp, ebp
test ebx, ebx
je 0x20084f72
test esi, 0x400
je 0x20084f72
mov rcx, rdi
call fcn.200782c0
jmp 0x2008510e
movzx eax, r9w
jmp 0x200852a3
mov bpl, 1
test sil, sil
js 0x20084f86
lea ecx, [rax - 0x44b04bc1]
mov edx, 0xba2e8ba3
imul rdx, rcx
shr rdx, 0x24
lea ecx, [rdx + rdx*4]
lea ecx, [rdx + rcx*4]
add ecx, edx
neg ecx
add ecx, eax
add ecx, 0xbb4fb43f
cdqe
lea rdx, [0x20564140]
movzx r8d, byte [rax + rdx]
lea r9, [0x2046ccd0]
xor r8b, byte [rcx + r9]
xor r8b, 0xd4
mov byte [rax + rdx], r8b
inc eax
cmp eax, 0x15
jle 0x20084f03
test sil, 0x40
jne 0x20084f72
mov al, 0x5c
xchg byte [0x20564156], al
lea rax, [0x20564140]
jmp 0x200852a3
mov rax, rdi
jmp 0x200852a3
test esi, 0x1000
jne 0x20085286
mov cl, 0x74
mov al, 0x62
lock cmpxchg byte [0x20564189], cl
jne 0x20084fb2
test esi, 0x200
je 0x20084fc2
mov rcx, r14
call fcn.200782c0
test sil, sil
js 0x20085154
jmp 0x20085106
cmp al, 0x96
jne 0x20084f7a
lea r15, [rsp + 0x58]
mov al, 0x96
jmp 0x200852bc
xor eax, eax
jmp 0x20084fd0
test sil, 0x40
je 0x200850ea
lea ecx, [rax - 0x6eb568ff]
mov edx, 0xaaaaaaab
imul rdx, rcx
shr rdx, 0x23
shl edx, 2
lea ecx, [rdx + rdx*2]
neg ecx
add ecx, eax
add ecx, 0x914a9701
cdqe
lea rdx, [0x20564180]
lea r8, [0x2046cd10]
movzx ecx, byte [rcx + r8]
xor cl, 0x94
add byte [rax + rdx], cl
inc eax
cmp eax, 9
jl 0x20084fc6
mov al, 0x96
xchg byte [0x20564189], al
test esi, 0x100
je 0x200852b3
mov eax, 1
mov ecx, 0x156086ee
mov edx, 0xea9f7926
mov r8d, 0x156086ef
mov r9d, 0xea9f7925
mov r10d, 0x86186187
lea r11, [0x20564120]
lea rbx, [0x2046ccb0]
nop dword [rax + rax]
mov r14d, r9d
imul r14, r10
shr r14, 0x20
mov r15d, r9d
sub r15d, r14d
shr r15d, 1
add r15d, r14d
shr r15d, 4
lea r14d, [r15 + r15*4]
lea r14d, [r15 + r14*4]
add r14d, r8d
movzx ebp, byte [r14 + rbx]
xor bpl, 0x57
add byte [rax + r11 - 1], bpl
cmp rax, 0x15
je 0x20084b7a
mov r14d, edx
imul r14, r10
shr r14, 0x20
mov r15d, edx
sub r15d, r14d
shr r15d, 1
add r15d, r14d
shr r15d, 4
lea r14d, [r15 + r15*4]
lea ebp, [r15 + r14*4]
add ebp, ecx
mov r14d, ebp
movzx ebp, byte [r14 + rbx]
xor bpl, 0x57
add byte [rax + r11], bpl
add rax, 2
add ecx, 0xfffffffe
add edx, 2
add r8d, 0xfffffffe
add r9d, 2
jmp 0x20085060
mov rcx, rdi
call fcn.200782c0
mov rax, rdi
jmp 0x200852a3
test ebx, ebx
je 0x20085106
mov rcx, r14
call fcn.200782c0
mov rax, r14
jmp 0x200852a3
mov rax, rdi
test sil, sil
js 0x200852a3
lea rax, [0x205640c0]
test bpl, 1
cmove rax, r15
jmp 0x200852a3
test si, si
js 0x20084f58
mov al, 0x2a
xchg byte [0x205640d2], al
jmp 0x2008511a
nop
inc qword [rsp + 0x28]
nop
mov rax, qword [rsp + 0x28]
cmp rax, qword [rsp + 0x40]
jae 0x2008519c
nop
mov rax, qword [rsp + 0x60]
mov rcx, qword [rsp + 0x28]
movzx eax, byte [rax + rcx]
mov byte [rbx + rcx], al
test esi, 0x100
je 0x20085141
mov cl, 0x91
lea r15, [rsp + 0x30]
lea rdx, [0x20564140]
nop dword [rax]
mov al, 0x77
lock cmpxchg byte [0x20564156], cl
je 0x200847ea
cmp al, 0x5c
jne 0x20085180
mov rax, rdx
jmp 0x200852a3
mov rax, rbx
jmp 0x200852a3
cmp al, 0x87
je 0x2008529c
mov cl, 0xbb
mov al, 0x66
lock cmpxchg byte [0x20564175], cl
je 0x200851cd
test esi, 0x200
je 0x200851a4
nop
mov rax, qword [rsp + 0x50]
jmp 0x200852a3
mov rax, r14
test esi, 0x100
jne 0x200852a3
mov ecx, 0xabaf3004
mov r8d, 0xabaf3003
xor r10d, r10d
movabs r11, 0x642c8590b21642c9
lea rax, [0x2046ccf0]
mov r14d, 0xabaf2ff5
add r14, rax
lea r15, [0x20564160]
nop dword [rax + rax]
mov rax, rcx
mul r11
mov r9, rdx
mov rax, r8
mul r11
mov rax, r8
sub rax, rdx
shr rax, 1
add rax, rdx
shr rax, 4
imul rax, rax, 0xffffffffffffffe9
add rax, r14
movzx eax, byte [r10 + rax + 0xe]
xor al, 0x2b
add byte [r10 + r15], al
cmp r10, 0x14
je 0x2008527d
mov rax, rcx
sub rax, r9
shr rax, 1
add rax, r9
shr rax, 4
imul rax, rax, 0xffffffffffffffe9
add rax, r14
add rax, 0xf
movzx eax, byte [rax + r10]
xor al, 0x2b
add byte [r10 + r15 + 1], al
add r10, 2
add rcx, 2
add r8, 2
jmp 0x20085210
test sil, sil
js 0x20084b1d
mov al, 0x87
xchg byte [0x20564175], al
xor eax, eax
test esi, 0x400
je 0x20084fd0
lea rax, [0x20564160]
add rsp, 0x88
pop rbx
pop rbp
pop rdi
pop rsi
pop r14
pop r15
ret
lea rax, [0x20564180]
jmp 0x200852a3
test esi, 0x4000
jne 0x200852b3
cmp al, 0x2a
je 0x2008510e
mov cl, 0x6a
mov al, 0x56
lock cmpxchg byte [0x205640d2], cl
jne 0x200852bc
test esi, 0x400
jne 0x20085147
mov ecx, 0x8116763a
mov edx, 0x7ee989d8
xor r8d, r8d
mov r9d, 0xaf286bcb
lea r10, [0x205640c0]
lea r11, [0x2046cc60]
lea rax, [0x20564180]
mov ebx, edx
imul rbx, r9
shr rbx, 0x20
mov r14d, edx
sub r14d, ebx
shr r14d, 1
add r14d, ebx
shr r14d, 4
lea ebx, [r14 + r14*8]
lea ebx, [r14 + rbx*2]
add ebx, ecx
movzx ebx, byte [rbx + r11]
xor bl, 0x2c
add byte [r8 + r10], bl
cmp r8, 0x11
je 0x2008512e
inc r8
dec ecx
inc edx
test esi, 0x2000
je 0x2008530e
jmp 0x200852a3
lea ecx, [rax - 0x4bdc2cf4]
mov edx, 0xaaaaaaab
imul rdx, rcx
shr rdx, 0x21
lea ecx, [rdx + rdx*2]
neg ecx
add ecx, eax
add ecx, 0xb423d30c
movsxd rdx, eax
lea rax, [0x20564230]
lea r8, [0x2046cd40]
sub r8, rcx
movzx ecx, byte [r8 + 2]
xor cl, 0x8a
add byte [rdx + rax], cl
lea eax, [rdx + 1]
cmp edx, 2
jge 0x200853d0
test esi, 0x200
je 0x2008535c
mov dl, 0xcd
lea rcx, [0x20564120]
mov al, 0xf1
lock cmpxchg byte [0x20564135], dl
je 0x2008501d
cmp al, 0x74
jne 0x200853b4
mov rax, rcx
jmp 0x200852a3
mov al, 0xab
xchg byte [0x20564233], al
test esi, 0x100
jne 0x200850fa
lea rax, [0x20564230]
jmp 0x200852a3
add byte [rax], al
add cl, ch
fcom dword [rdx]
add byte [rax], al
add byte [rdi], cl
test byte [rax], bl
or dword [rax], eax
add byte [rax - 0x73], cl
jmp 0x20086470
mov dword [rbp + 0x74], eax
xor ebp, ebp
and al, 0x50
mov esi, dword [rsp + 0x48]