Function at 0x401c50
Capabilities:
Hash data with md5

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x7c
mov ebx, dword [esp + 0x94]
mov esi, dword [esp + 0x90]
lea edi, [ebx + 1]
mov eax, edi
and eax, 0x3f
cmp eax, 0x38
je 0x401ed7
mov eax, edi
jmp 0x401c82
mov eax, edx
lea edx, [eax + 1]
mov ecx, edx
and ecx, 0x3f
cmp ecx, 0x38
jne 0x401c80
add eax, 9
mov ebp, edx
mov dword [esp], eax
mov dword [esp + 0x2c], edx
call sub.msvcrt.dll_malloc
mov dword [esp + 4], esi
mov dword [esp + 8], ebx
mov dword [esp], eax
mov esi, eax
mov dword [esp + 0x28], eax
call sub.msvcrt.dll_memcpy
cmp edi, ebp
mov byte [esi + ebx], pe_nt_image_headers32
jae 0x401cda
mov eax, ebx
add edi, esi
not eax
add eax, ebp
mov dword [esp + 8], eax
mov dword [esp + 4], 0
mov dword [esp], edi
call sub.msvcrt.dll_memset
mov edi, dword [esp + 0x28]
lea edx, [ebx*8]
mov esi, dword [esp + 0x2c]
mov ecx, edx
shr ecx, 8
shr ebx, 0x1d
mov eax, edi
add eax, esi
mov byte [eax + 1], cl
mov ecx, edx
mov byte [eax], dl
shr ecx, 0x10
shr edx, 0x18
mov byte [eax + 2], cl
mov byte [eax + 3], dl
mov eax, edi
lea eax, [eax + esi + 4]
mov byte [eax], bl
mov byte [eax + 1], 0
mov byte [eax + 2], 0
mov byte [eax + 3], 0
mov dword [esp + 0x14], 0
mov dword [esp + 0x24], 0x10325476
mov dword [esp + 0x20], 0x98badcfe
mov dword [esp + 0x1c], 0xefcdab89
mov dword [esp + 0x18], 0x67452301
mov edx, dword [esp + 0x28]
xor ecx, ecx
add edx, dword [esp + 0x14]
nop
movzx eax, byte [edx + 1]
add edx, 4
movzx ebx, byte [edx - 2]
shl eax, 8
shl ebx, 0x10
or eax, ebx
movzx ebx, byte [edx - 4]
or eax, ebx
movzx ebx, byte [edx - 1]
shl ebx, 0x18
or eax, ebx
mov dword [esp + ecx*4 + 0x30], eax
add ecx, 1
cmp ecx, 0x10
jne 0x401d50
mov esi, dword [esp + 0x24]
xor eax, eax
mov edi, dword [esp + 0x20]
mov ebx, dword [esp + 0x1c]
mov ebp, dword [esp + 0x18]
jmp 0x401dcd
mov edx, esi
mov ecx, esi
not edx
and ecx, ebx
and edx, edi
or edx, ecx
lea ecx, [eax + eax*4 + 1]
and ecx, 0xf
add edx, dword [eax*4 + 0x4079c0]
add edx, dword [esp + ecx*4 + 0x30]
mov ecx, dword [eax*4 + 0x4078c0]
add eax, 1
add edx, ebp
rol edx, cl
add edx, ebx
cmp eax, 0x40
je 0x401e16
mov ebp, esi
mov esi, edi
mov edi, ebx
mov ebx, edx
cmp eax, 0xf
jbe 0x401df0
cmp eax, 0x1f
jbe 0x401d92
cmp eax, 0x2f
ja 0x401e00
mov edx, edi
xor edx, ebx
lea ecx, [eax + eax*2 + 5]
xor edx, esi
and ecx, 0xf
jmp 0x401da5
mov edx, ebx
mov ecx, edi
not edx
and ecx, ebx
and edx, esi
or edx, ecx
mov ecx, eax
jmp 0x401da5
mov edx, esi
not edx
lea ecx, [eax*8]
or edx, ebx
sub ecx, eax
xor edx, edi
and ecx, 0xf
jmp 0x401da5
add dword [esp + 0x14], 0x40
mov eax, dword [esp + 0x14]
add dword [esp + 0x18], esi
add dword [esp + 0x1c], edx
add dword [esp + 0x20], ebx
add dword [esp + 0x24], edi
cmp dword [esp + 0x2c], eax
ja 0x401d44
mov eax, dword [esp + 0x28]
mov dword [esp], eax
call sub.msvcrt.dll_free
mov edi, dword [esp + 0x18]
mov esi, dword [esp + 0x98]
mov eax, edi
mov byte [esi], al
mov eax, edi
shr eax, 8
mov byte [esi + 1], al
mov eax, edi
shr eax, 0x10
mov byte [esi + 2], al
mov eax, edi
mov edi, dword [esp + 0x1c]
shr eax, 0x18
mov byte [esi + 3], al
mov eax, edi
mov byte [esi + 4], al
mov eax, edi
shr eax, 8
mov byte [esi + 5], al
mov eax, edi
shr eax, 0x10
mov byte [esi + 6], al
mov eax, edi
mov edi, dword [esp + 0x20]
shr eax, 0x18
mov byte [esi + 7], al
mov eax, edi
mov byte [esi + 8], al
mov eax, edi
shr eax, 8
mov byte [esi + 9], al
mov eax, edi
shr eax, 0x10
mov byte [esi + 0xa], al
mov eax, edi
mov edi, dword [esp + 0x24]
shr eax, 0x18
mov byte [esi + 0xb], al
mov eax, edi
mov byte [esi + 0xc], al
mov eax, edi
shr eax, 8
mov byte [esi + 0xd], al
mov eax, edi
shr eax, 0x10
mov byte [esi + 0xe], al
mov eax, edi
shr eax, 0x18
mov byte [esi + 0xf], al
add esp, 0x7c
pop ebx
pop esi
pop edi
pop ebp
ret
lea eax, [ebx + 9]
mov dword [esp], eax
call sub.msvcrt.dll_malloc
mov dword [esp + 4], esi
mov dword [esp + 8], ebx
mov esi, eax
mov dword [esp], eax
mov dword [esp + 0x28], eax
call sub.msvcrt.dll_memcpy
mov byte [esi + ebx], pe_nt_image_headers32
mov dword [esp + 0x2c], edi
jmp 0x401cda