Function at 0x14009aa70
Capabilities:
Hash data via wincrypt
Hash data with md5
Initialize hashing via wincrypt
Read file on windows

Disassembly:
push rbp
push rsi
push rdi
push r12
push r13
push r14
push r15
mov eax, 0x1090
call fcn.1400d6fe0
sub rsp, rax
lea rbp, [rsp + 0x30]
mov qword [rbp + 0x28], 0xfffffffffffffffe
mov qword [rbp + 0x10b8], rbx
mov rax, qword [0x1401c7ef8]
xor rax, rbp
mov qword [rbp + 0x1050], rax
mov r15, r8
mov r13, rdx
mov rbx, rcx
mov qword [rbp + 0x20], rdx
mov rax, qword [rdx]
mov eax, dword [rax - 0x10]
inc eax
movsxd rcx, eax
xor edi, edi
mov qword [rbp + 0x18], rdi
call fcn.1400d6a4c
mov r14, rax
mov r9, qword [r13]
mov ecx, dword [r9 - 0x10]
inc ecx
movsxd r8, ecx
or r12, 0xffffffffffffffff
mov qword [rsp + 0x20], r12
mov rdx, rax
lea rcx, [rbp + 0x18]
call qword [sym.imp.MSVCR100.dll_wcstombs_s]
mov rcx, rbx
call fcn.14009a970
test eax, eax
jne 0x14009ab29
mov rdx, qword [r13]
sub rdx, 0x18
lock xadd dword [rdx + 0x10], r12d
dec r12d
test r12d, r12d
jg 0x14009ab22
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
xor eax, eax
jmp 0x14009ade8
lea r8, [0x14012ad58]
mov rdx, r14
lea rcx, [rbp]
call qword [sym.imp.MSVCR100.dll_fopen_s]
mov rcx, qword [rbx]
cmp qword [rbp], rdi
jne 0x14009ab7c
test rcx, rcx
je 0x14009ab53
xor edx, edx
call qword [sym.imp.ADVAPI32.dll_CryptReleaseContext]
mov qword [rbx], rdi
mov rdx, qword [r13]
sub rdx, 0x18
lock xadd dword [rdx + 0x10], r12d
dec r12d
test r12d, r12d
jg 0x14009ab22
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
xor eax, eax
jmp 0x14009ade8
xor eax, eax
mov qword [rbp + 0x30], rax
mov qword [rbp + 0x38], rax
mov qword [rbp + 0x40], rax
lea rax, [rbp + 0x40]
mov qword [rsp + 0x20], rax
xor r9d, r9d
xor r8d, r8d
mov edx, 0x8003
call qword [sym.imp.ADVAPI32.dll_CryptCreateHash]
mov rcx, qword [rbp]
call qword [sym.imp.MSVCR100.dll_feof]
test eax, eax
jne 0x14009abfb
nop word [rax + rax]
mov r9, qword [rbp]
mov edx, 1
mov r8d, 0x1000
lea rcx, [rbp + 0x50]
call qword [sym.imp.MSVCR100.dll_fread]
xor r9d, r9d
mov r8d, eax
lea rdx, [rbp + 0x50]
mov rcx, qword [rbp + 0x40]
call qword [sym.imp.ADVAPI32.dll_CryptHashData]
mov rcx, qword [rbp]
call qword [sym.imp.MSVCR100.dll_feof]
test eax, eax
je 0x14009abc0
mov dword [rbp + SafeArrayLock], 0x10
mov dword [rsp + 0x20], edi
lea r9, [rbp + 0x10]
lea r8, [rbp + 0x30]
mov edx, 2
mov rcx, qword [rbp + 0x40]
call qword [sym.imp.ADVAPI32.dll_CryptGetHashParam]
mov rcx, qword [rbp + 0x40]
test rcx, rcx
je 0x14009ac2c
call qword [sym.imp.ADVAPI32.dll_CryptDestroyHash]
mov qword [rbp + 0x40], rdi
mov rcx, qword [rbp]
call qword [sym.imp.MSVCR100.dll_fclose]
mov ecx, 0x400
call fcn.1400d6a4c
mov rsi, rax
mov r9, rdi
nop word [rax + rax]
movzx r8d, byte [rbp + r9 + 0x30]
mov eax, 4
nop dword [rax + rax]
movzx edx, r8b
movzx ecx, al
shr dl, cl
and dl, 0xf
cmp dl, 0xa
jge 0x14009ac76
add dl, 0x30
jmp 0x14009ac79
add dl, 0x57
mov byte [rdi + rsi], dl
inc rdi
sub eax, 4
jns 0x14009ac60
inc r9
cmp r9, 0x10
jl 0x14009ac50
mov byte [rsi + 0x20], 0
mov rcx, qword [rbx]
test rcx, rcx
je 0x14009aca1
xor edx, edx
call qword [sym.imp.ADVAPI32.dll_CryptReleaseContext]
xor edi, edi
mov qword [rbx], rdi
test rsi, rsi
je 0x14009ad16
mov rcx, rsi
call qword [sym.imp.KERNEL32.dll_lstrlenA]
lea edx, [rax + 1]
cmp edx, 0x3fffffff
jg 0x14009ad16
movsxd rax, edx
add rax, rax
lea rcx, [rax + 0xf]
cmp rcx, rax
ja 0x14009acd8
movabs rcx, 0xffffffffffffff0
and rcx, 0xfffffffffffffff0
mov rax, rcx
call fcn.1400d6fe0
sub rsp, rcx
lea rbx, [rsp + 0x30]
test rbx, rbx
je 0x14009ad16
mov word [rbx], di
mov dword [rsp + 0x28], edx
mov qword [rsp + 0x20], rbx
mov r9d, r12d
mov r8, rsi
xor edx, edx
lea ecx, [rdx + 3]
call qword [sym.imp.KERNEL32.dll_MultiByteToWideChar]
test eax, eax
cmove rbx, rdi
jmp 0x14009ad19
mov rbx, rdi
lea rcx, str._h_r_
mov rax, qword [str._h_r_]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetElement]
add rax, 0x18
mov qword [rbp + 8], rax
test rbx, rbx
je 0x14009ad75
test rbx, 0xffffffffffff0000
jne 0x14009ad62
movzx edi, bx
xor edx, edx
mov ecx, edi
call fcn.140001110
test rax, rax
je 0x14009ad87
mov r8d, edi
mov rdx, rax
lea rcx, [rbp + 8]
call fcn.140004fb0
jmp 0x14009ad87
xor eax, eax
mov rcx, r12
mov rdi, rbx
repne scasw ax, word [rdi]
not rcx
dec rcx
jmp 0x14009ad77
mov ecx, edi
mov r8d, ecx
mov rdx, rbx
lea rcx, [rbp + 8]
call fcn.14000c510
nop
lea rdx, [rbp + 8]
mov rcx, r15
call fcn.14000fc40
nop
mov rdx, qword [rbp + 8]
add rdx, 0xffffffffffffffe8
mov eax, r12d
lock xadd dword [rdx + 0x10], eax
dec eax
test eax, eax
jg 0x14009adb3
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov rcx, r14
call sub.MSVCR100.dll_void___cdecl_operator_delete___void____ptr64_
mov rcx, rsi
call sub.MSVCR100.dll_void___cdecl_operator_delete___void____ptr64_
nop
mov rdx, qword [r13]
sub rdx, 0x18
lock xadd dword [rdx + 0x10], r12d
dec r12d
test r12d, r12d
jg 0x14009ade3
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov eax, 1
mov rcx, qword [rbp + 0x1050]
xor rcx, rbp
call fcn.1400d6f80
mov rbx, qword [rbp + 0x10b8]
lea rsp, [rbp + 0x1060]
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbp
ret