Function at 0x4011a0
Capabilities:
Create new key via cryptacquirecontext
Encrypt data using rc4 via winapi
Encrypt or decrypt via wincrypt
Hash data via wincrypt
Hash data with md5
Initialize hashing via wincrypt
Read file on windows
Write file on windows

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x28
mov eax, dword [0x41b004]
xor eax, ebp
mov dword [ebp - 4], eax
push ebx
mov ebx, dword [ebp + 8]
push esi
push edi
xor esi, esi
mov dword [ebp - 0x28], edx
push esi
push 0x80
push 3
push esi
push 1
push 1
push ecx
mov byte [ebp - 0x1d], 0
or edi, 0xffffffff
mov dword [ebp - 8], 0
mov dword [ebp - 0x14], 0
mov dword [ebp - 0xc], 0
mov dword [ebp - 0x18], 0
call dword [sym.imp.KERNEL32.dll_CreateFileW]
mov dword [ebp - 0x24], eax
cmp eax, edi
je 0x40144e
push esi
push 0x80
push 4
push esi
push 1
push 2
push dword [ebp - 0x28]
call dword [sym.imp.KERNEL32.dll_CreateFileW]
mov edi, eax
cmp edi, 0xffffffff
je 0x401447
push esi
push 1
push str.Microsoft_Enhanced_Cryptographic_Provider_v1.0
push esi
lea eax, [ebp - 8]
push eax
call dword [sym.imp.ADVAPI32.dll_CryptAcquireContextW]
test eax, eax
jne 0x40125f
push 8
push 1
push str.Microsoft_Enhanced_Cryptographic_Provider_v1.0
push eax
lea eax, [ebp - 8]
push eax
call dword [sym.imp.ADVAPI32.dll_CryptAcquireContextW]
test eax, eax
jne 0x40125f
push str.Critical_failure_in_a_crypto_function___exit._n
call fcn.00401170
add esp, 4
jmp 0x401447
test ebx, ebx
je 0x4012c9
cmp word [ebx], si
je 0x4012c9
lea eax, [ebp - 0x18]
push eax
push 0
push 0
push 0x8003
push dword [ebp - 8]
call dword [sym.imp.ADVAPI32.dll_CryptCreateHash]
test eax, eax
je 0x401447
push 0
push ebx
call dword [sym.imp.KERNEL32.dll_lstrlenW]
push eax
push ebx
push dword [ebp - 0x18]
call dword [sym.imp.ADVAPI32.dll_CryptHashData]
test eax, eax
je 0x401447
lea eax, [ebp - 0x14]
push eax
push 0x800000
push dword [ebp - 0x18]
push 0x6801
push dword [ebp - 8]
call dword [sym.imp.ADVAPI32.dll_CryptDeriveKey]
test eax, eax
jne 0x4013c9
jmp 0x401447
mov ebx, dword [sym.imp.ADVAPI32.dll_CryptGenKey]
lea eax, [ebp - 0x14]
push eax
push 0x800001
push 0x6801
push dword [ebp - 8]
call ebx
test eax, eax
je 0x401447
lea eax, [ebp - 0xc]
push eax
push 1
push dword [ebp - 8]
call dword [sym.imp.ADVAPI32.dll_CryptGetUserKey]
test eax, eax
jne 0x401323
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0x8009000d
jne 0x401447
lea eax, [ebp - 0xc]
push eax
push 1
push 1
push dword [ebp - 8]
call ebx
test eax, eax
je 0x401447
lea eax, [ebp - 0x1c]
push eax
push 0
push 0
push 1
push dword [ebp - 0xc]
push dword [ebp - 0x14]
call dword [sym.imp.ADVAPI32.dll_CryptExportKey]
test eax, eax
je 0x401447
push dword [ebp - 0x1c]
call fcn.00405e23
mov ebx, eax
add esp, 4
test ebx, ebx
je 0x401447
lea eax, [ebp - 0x1c]
push eax
push ebx
push 0
push 1
push dword [ebp - 0xc]
push dword [ebp - 0x14]
call dword [sym.imp.ADVAPI32.dll_CryptExportKey]
test eax, eax
je 0x401447
mov eax, dword [ebp - 0xc]
test eax, eax
je 0x40138c
push eax
call dword [sym.imp.ADVAPI32.dll_CryptDestroyKey]
test eax, eax
je 0x401447
mov dword [ebp - 0xc], esi
push 0
lea eax, [ebp - 0x10]
push eax
push 4
lea eax, [ebp - 0x1c]
push eax
push edi
call dword [sym.imp.KERNEL32.dll_WriteFile]
test eax, eax
je 0x401447
push 0
lea eax, [ebp - 0x10]
push eax
push dword [ebp - 0x1c]
push ebx
push edi
call dword [sym.imp.KERNEL32.dll_WriteFile]
test eax, eax
je 0x401447
push ebx
call fcn.00405e08
add esp, 4
push 0x3f0
call fcn.00405e23
mov esi, eax
add esp, 4
test esi, esi
je 0x401447
xor bl, bl
nop
push 0
lea eax, [ebp - 0x10]
push eax
push 0x3e8
push esi
push dword [ebp - 0x24]
call dword [sym.imp.KERNEL32.dll_ReadFile]
test eax, eax
je 0x401447
cmp dword [ebp - 0x10], 0x3e8
mov eax, 1
push 0x3f0
movzx ebx, bl
cmovb ebx, eax
lea eax, [ebp - 0x10]
push eax
push esi
push 0
movzx eax, bl
push eax
push 0
push dword [ebp - 0x14]
call dword [sym.imp.ADVAPI32.dll_CryptEncrypt]
test eax, eax
je 0x401447
push 0
lea eax, [ebp - 0x10]
push eax
push dword [ebp - 0x10]
push esi
push edi
call dword [sym.imp.KERNEL32.dll_WriteFile]
test eax, eax
je 0x401447
test bl, bl
je 0x4013e0
mov byte [ebp - 0x1d], 1
mov eax, dword [ebp - 0x24]
test eax, eax
je 0x401455
push eax
call dword [sym.imp.KERNEL32.dll_CloseHandle]
test edi, edi
je 0x401460
push edi
call dword [sym.imp.KERNEL32.dll_CloseHandle]
test esi, esi
je 0x40146d
push esi
call fcn.00405e08
add esp, 4
mov eax, dword [ebp - 0x18]
pop edi
pop esi
pop ebx
test eax, eax
je 0x401485
push eax
call dword [sym.imp.ADVAPI32.dll_CryptDestroyHash]
mov dword [ebp - 0x18], 0
mov eax, dword [ebp - 0x14]
test eax, eax
je 0x401493
push eax
call dword [sym.imp.ADVAPI32.dll_CryptDestroyKey]
mov ecx, dword [ebp - 8]
test ecx, ecx
je 0x4014a3
push 0
push ecx
call dword [sym.imp.ADVAPI32.dll_CryptReleaseContext]
mov ecx, dword [ebp - 4]
mov al, byte [ebp - 0x1d]
xor ecx, ebp
call fcn.00401a6e
mov esp, ebp
pop ebp
ret