Function at 0x140031810
Capabilities:
Encrypt data using aes
Reference aes constants

Disassembly:
mov qword [rsp + 8], rbx
mov qword [rsp + 0x10], rbp
mov qword [rsp + 0x18], rsi
push rdi
sub rsp, 0x20
mov rax, qword [rcx]
mov rdi, r9
mov rsi, r8
mov rbp, rdx
mov rbx, rcx
call qword [rax + 0x20]
test al, al
jne 0x140030cc2
mov rcx, rbx
call fcn.14000dd30
lea r9, [rbx + 0x20]
mov r8, rdi
mov rdx, rsi
mov rcx, rbp
mov rbx, qword [rsp + 0x30]
mov rbp, qword [rsp + 0x38]
mov rsi, qword [rsp + 0x40]
add rsp, 0x20
pop rdi
jmp 0x140031810
mov qword [rsp + 0x20], r9
mov qword [rsp + 0x18], r8
push rbx
push rbp
push rdi
push r14
push r15
sub rsp, 0x40
mov rbp, rdx
mov rbx, rcx
lea rdx, str.cw
mov ecx, 0x100
mov r15, r9
mov rdi, r8
call fcn.140086920
lea rdx, [0x14009c800]
mov ecx, 0x100
call fcn.140086920
lea rdx, [0x14009c900]
mov ecx, 0x100
call fcn.140086920
lea rdx, [0x14009ca00]
mov ecx, 0x100
call fcn.140086920
mov r14, qword [r15 + 8]
sub r14, qword [r15]
sar r14, 2
shr r14, 2
dec r14
test rdi, rdi
je 0x140031e69
mov qword [rsp + 0x70], rsi
lea r8, [0x14009c900]
mov qword [rsp + 0x38], r12
lea r9, [0x14009ca00]
mov qword [rsp + 0x30], r13
lea r12, [rbx + 8]
mov r13, r14
mov qword [rsp + 0x20], r12
shl r13, 4
lea r10, str.cw
sub rbp, rbx
mov qword [rsp + 0x28], r13
mov qword [rsp + 0x78], rbp
nop dword [rax]
nop word [rax + rax]
mov edi, dword [r12 - 8]
xor ebx, ebx
mov eax, dword [r12 - 4]
mov r11d, dword [r12]
mov esi, dword [r12 + 4]
bswap edi
bswap eax
bswap r11d
bswap esi
test r14, r14
je 0x140031cb5
mov rbp, qword [r15]
lea r13, [r14 - 2]
add rbp, 8
lea r15, [0x14009c900]
lea r12, [0x14009ca00]
xor eax, dword [rbp - 4]
lea r8, [0x14009c800]
xor r11d, dword [rbp]
xor esi, dword [rbp + 4]
xor edi, dword [rbp - 8]
mov ecx, r11d
shr rcx, 0x18
movzx ecx, byte [rcx + r10]
imul r10d, ecx, 0x10101
mov ecx, r11d
shr ecx, 8
movzx edx, cl
movzx ecx, byte [rdx + r15]
imul edx, ecx, 0x1010001
mov ecx, r11d
shr ecx, 0x10
xor r10d, edx
movzx edx, cl
movzx ecx, byte [rdx + r8]
imul edx, ecx, 0x1000101
movzx ecx, r11b
lea r11, str.cw
movzx ecx, byte [rcx + r12]
xor r10d, edx
imul edx, ecx, 0x1010100
mov ecx, esi
shr rcx, 0x18
xor r10d, edx
movzx ecx, byte [rcx + r11]
imul r9d, ecx, 0x10101
mov ecx, esi
shr ecx, 8
movzx edx, cl
movzx ecx, byte [rdx + r15]
imul edx, ecx, 0x1010001
mov ecx, esi
shr ecx, 0x10
xor r9d, edx
movzx edx, cl
movzx ecx, byte [rdx + r8]
imul edx, ecx, 0x1000101
movzx ecx, sil
lea rsi, [0x14009c800]
movzx ecx, byte [rcx + r12]
xor r9d, edx
imul edx, ecx, 0x1010100
mov ecx, eax
shr rcx, 0x18
xor r9d, edx
movzx ecx, byte [rcx + r11]
imul r8d, ecx, 0x10101
mov ecx, eax
shr ecx, 8
movzx edx, cl
movzx ecx, byte [rdx + r15]
imul edx, ecx, 0x1010001
mov ecx, eax
shr ecx, 0x10
xor r8d, edx
movzx edx, cl
movzx ecx, byte [rdx + rsi]
imul edx, ecx, 0x1000101
movzx ecx, al
movzx eax, byte [rcx + r12]
xor r8d, edx
imul ecx, eax, 0x1010100
mov eax, edi
shr rax, 0x18
xor r8d, ecx
movzx eax, byte [rax + r11]
xor r8d, r10d
imul edx, eax, 0x10101
mov eax, edi
shr eax, 8
movzx ecx, al
movzx eax, byte [rcx + r15]
imul ecx, eax, 0x1010001
mov eax, edi
xor edx, ecx
shr eax, 0x10
movzx ecx, al
movzx eax, byte [rcx + rsi]
mov esi, r8d
imul ecx, eax, 0x1000101
xor esi, r9d
movzx eax, dil
bswap esi
movzx eax, byte [rax + r12]
xor edx, ecx
imul ecx, eax, 0x1010100
mov edi, edx
xor edi, ecx
xor edi, r8d
mov eax, edi
xor eax, r10d
lea r10, str.cw
xor eax, r9d
xor r8d, eax
mov r11d, eax
shl eax, 0x10
shr r11d, 0x10
or r11d, eax
mov eax, r8d
and eax, 0xffff00ff
shr r8d, 8
shl eax, 8
and r8d, 0xff00ff
or eax, r8d
xor eax, r11d
xor r11d, esi
xor edi, eax
xor esi, eax
xor eax, dword [rbp + 0xc]
xor r11d, edi
xor edi, dword [rbp + 8]
xor eax, r11d
xor r11d, dword [rbp + 0x10]
xor esi, dword [rbp + 0x14]
cmp rbx, r13
je 0x140031c7f
mov ecx, r11d
shr rcx, 0x18
movzx ecx, byte [rcx + r15]
imul r8d, ecx, 0x1010001
mov ecx, r11d
shr ecx, 8
movzx edx, cl
movzx ecx, byte [rdx + r10]
imul edx, ecx, 0x10101
mov ecx, r11d
shr ecx, 0x10
xor r8d, edx
movzx edx, cl
movzx ecx, byte [rdx + r12]
imul edx, ecx, 0x1010100
movzx ecx, r11b
xor r8d, edx
lea rdx, [0x14009c800]
movzx ecx, byte [rcx + rdx]
mov r11d, r8d
imul edx, ecx, 0x1000101
mov ecx, esi
shr rcx, 0x18
xor r11d, edx
movzx ecx, byte [rcx + r15]
imul r9d, ecx, 0x1010001
mov ecx, esi
shr ecx, 8
movzx edx, cl
movzx ecx, byte [rdx + r10]
imul edx, ecx, 0x10101
mov ecx, esi
shr ecx, 0x10
xor r9d, edx
movzx edx, cl
movzx ecx, byte [rdx + r12]
imul edx, ecx, 0x1010100
movzx ecx, sil
lea rsi, [0x14009c800]
movzx ecx, byte [rcx + rsi]
xor r9d, edx
imul edx, ecx, 0x1000101
mov ecx, eax
shr rcx, 0x18
xor r9d, edx
movzx ecx, byte [rcx + r15]
imul r8d, ecx, 0x1010001
mov ecx, eax
shr ecx, 8
movzx edx, cl
movzx ecx, byte [rdx + r10]
imul edx, ecx, 0x10101
mov ecx, eax
shr ecx, 0x10
xor r8d, edx
movzx edx, cl
movzx ecx, byte [rdx + r12]
imul edx, ecx, 0x1010100
movzx ecx, al
movzx eax, byte [rcx + rsi]
xor r8d, edx
imul ecx, eax, 0x1000101
mov eax, r8d
xor eax, ecx
mov ecx, edi
shr rcx, 0x18
xor eax, r11d
xor r11d, r9d
movzx ecx, byte [rcx + r15]
imul r8d, ecx, 0x1010001
mov ecx, edi
shr ecx, 8
movzx edx, cl
movzx ecx, byte [rdx + r10]
imul edx, ecx, 0x10101
mov ecx, edi
shr ecx, 0x10
xor r8d, edx
movzx edx, cl
movzx ecx, byte [rdx + r12]
imul edx, ecx, 0x1010100
xor r9d, eax
movzx ecx, dil
xor r8d, edx
mov edi, r8d
movzx ecx, byte [rcx + rsi]
mov esi, r9d
and esi, 0xffff00ff
imul edx, ecx, 0x1000101
shl esi, 8
shr r9d, 8
and r9d, 0xff00ff
or esi, r9d
xor edi, edx
xor edi, eax
xor r11d, edi
ror edi, 0x10
xor eax, r11d
bswap eax
xor eax, r11d
xor r11d, esi
xor edi, eax
xor esi, eax
xor r11d, edi
xor eax, r11d
add rbx, 2
add rbp, 0x20
cmp rbx, r14
jb 0x140031920
mov r15, qword [rsp + 0x88]
lea r8, [0x14009c900]
mov r12, qword [rsp + 0x20]
lea r9, [0x14009ca00]
mov r13, qword [rsp + 0x28]
mov rbp, qword [rsp + 0x78]
mov rcx, qword [r15]
lea rbx, [0x14009c800]
mov edx, edi
shr rdx, 0x18
movzx edx, byte [rdx + r8]
xor dl, byte [rcx + r13 + 3]
mov ecx, edi
mov byte [r12 + rbp - 8], dl
shr ecx, 0x10
movzx edx, cl
mov rcx, qword [r15]
movzx edx, byte [rdx + r9]
xor dl, byte [rcx + r13 + 2]
mov ecx, edi
mov byte [r12 + rbp - 7], dl
shr ecx, 8
movzx edx, cl
mov rcx, qword [r15]
movzx edx, byte [rdx + r10]
xor dl, byte [rcx + r13 + 1]
mov byte [r12 + rbp - 6], dl
mov rcx, qword [r15]
movzx edx, dil
movzx edx, byte [rdx + rbx]
xor dl, byte [rcx + r13]
mov byte [r12 + rbp - 5], dl
mov rcx, qword [r15]
mov edx, eax
shr rdx, 0x18
movzx edx, byte [rdx + r8]
xor dl, byte [rcx + r13 + 7]
mov ecx, eax
mov byte [r12 + rbp - 4], dl
shr ecx, 0x10
movzx edx, cl
mov rcx, qword [r15]
movzx edx, byte [rdx + r9]
xor dl, byte [rcx + r13 + 6]
mov ecx, eax
shr ecx, 8
mov byte [r12 + rbp - 3], dl
movzx edx, cl
mov rcx, qword [r15]
movzx edx, byte [rdx + r10]
xor dl, byte [rcx + r13 + 5]
mov byte [r12 + rbp - 2], dl
movzx ecx, al
mov rax, qword [r15]
movzx ecx, byte [rcx + rbx]
xor cl, byte [rax + r13 + 4]
mov byte [r12 + rbp - 1], cl
mov rax, qword [r15]
mov ecx, r11d
shr rcx, 0x18
movzx ecx, byte [rcx + r8]
xor cl, byte [rax + r13 + 0xb]
mov eax, r11d
mov byte [r12 + rbp], cl
shr eax, 0x10
movzx ecx, al
mov rax, qword [r15]
movzx ecx, byte [rcx + r9]
xor cl, byte [rax + r13 + 0xa]
mov eax, r11d
mov byte [r12 + rbp + 1], cl
shr eax, 8
movzx ecx, al
mov rax, qword [r15]
movzx ecx, byte [rcx + r10]
xor cl, byte [rax + r13 + 9]
mov byte [r12 + rbp + 2], cl
mov rax, qword [r15]
movzx ecx, r11b
movzx ecx, byte [rcx + rbx]
xor cl, byte [rax + r13 + 8]
mov byte [r12 + rbp + 3], cl
mov rax, qword [r15]
mov ecx, esi
shr rcx, 0x18
movzx ecx, byte [rcx + r8]
xor cl, byte [rax + r13 + 0xf]
mov byte [r12 + rbp + 4], cl
mov eax, esi
shr eax, 0x10
movzx ecx, al
mov rax, qword [r15]
movzx ecx, byte [rcx + r9]
xor cl, byte [rax + r13 + 0xe]
mov eax, esi
mov byte [r12 + rbp + 5], cl
shr eax, 8
movzx edx, al
mov rax, qword [r15]
mov ecx, dword [rax + r13 + 0xc]
shr ecx, 8
xor cl, byte [rdx + r10]
mov byte [r12 + rbp + 6], cl
mov rax, qword [r15]
movzx ecx, sil
movzx ecx, byte [rcx + rbx]
xor cl, byte [rax + r13 + 0xc]
mov byte [r12 + rbp + 7], cl
add r12, 0x10
sub qword [rsp + 0x80], 1
mov qword [rsp + 0x20], r12
jne 0x1400318e0
mov r13, qword [rsp + 0x30]
mov r12, qword [rsp + 0x38]
mov rsi, qword [rsp + 0x70]
add rsp, 0x40
pop r15
pop r14
pop rdi
pop rbp
pop rbx
ret