Function at 0x403c00
Capabilities:
Encode data using xor
Hash data with md5

Disassembly:
push ebp
mov ebp, eax
push edi
add ebp, 0x21
push esi
push ebx
sub esp, 0x10c
mov dword [esp], ebp
mov dword [esp + 0x1c], eax
call sub.msvcrt.dll_strlen
mov edi, eax
lea eax, [eax + 0xe]
mov dword [esp], eax
call sub.msvcrt.dll_malloc
test eax, eax
mov esi, eax
je 0x403ef6
lea ebx, [esp + 0xf3]
mov dword [esp + 0x28], 0x67452301
mov dword [esp + 0x2c], 0xefcdab89
mov dword [esp + 0x30], 0x98badcfe
mov dword [esp + 0x34], 0x10325476
mov dword [esp + 0x3c], 0
mov dword [esp + 0x38], 0
mov dword [esp + 4], 0x412020
mov dword [esp + 0x10], ebx
mov dword [esp], ebx
call sub.msvcrt.dll_strcpy
lea eax, [esp + 0xf3]
mov dword [esp], eax
call sub.msvcrt.dll_strlen
test eax, eax
je 0x403ca2
lea edx, [esp + 0xf3]
xor byte [edx], 0xa5
add edx, 1
sub eax, 1
jne 0x403c97
mov eax, dword [esp + 0xf3]
lea edx, [edi + 1]
add edi, 0xd
mov dword [esp + 4], ebp
mov ebp, edi
shr ebp, 6
mov dword [esp + 8], edx
mov dword [esi], eax
mov eax, dword [esp + 0xf7]
mov byte [esi + 0xc], 0x7c
mov dword [esi + 4], eax
mov eax, dword [esp + 0xfb]
mov dword [esi + 8], eax
lea eax, [esi + 0xd]
mov dword [esp], eax
call sub.msvcrt.dll_memcpy
test ebp, ebp
mov edx, edi
mov dword [esp + 0x38], edi
jne 0x403f07
and edi, 0x3f
jne 0x403ed0
mov ecx, edx
and ecx, 0x3f
cmp ecx, 0x38
sbb ebx, ebx
add ebx, 2
cmp ecx, 0x38
sbb ebp, ebp
and ebp, 0xffffffc0
add ebp, 0x7c
cmp ecx, 0x38
sbb edi, edi
and edi, 0xffffffc0
add edi, 0x78
lea eax, [esp + 0x40]
mov edx, edi
sub edx, ecx
add eax, ecx
mov dword [esp + 8], edx
mov dword [esp + 4], 0x412040
mov dword [esp], eax
call sub.msvcrt.dll_memcpy
mov eax, dword [esp + 0x38]
mov ecx, dword [esp + 0x3c]
lea edx, [eax*8]
shl ecx, 3
shr eax, 0x1d
or eax, ecx
mov ecx, edx
shr ecx, 8
mov byte [esp + edi + 0x40], dl
mov byte [esp + edi + 0x41], cl
mov ecx, edx
shr edx, 0x18
mov byte [esp + edi + 0x43], dl
mov edx, eax
shr ecx, 0x10
shr edx, 8
mov byte [esp + edi + 0x42], cl
mov ecx, ebx
mov byte [esp + ebp + 0x41], dl
mov edx, eax
mov byte [esp + ebp + 0x40], al
shr edx, 0x10
shr eax, 0x18
mov byte [esp + ebp + 0x42], dl
lea edx, [esp + 0x40]
mov byte [esp + ebp + 0x43], al
lea eax, [esp + 0x28]
call fcn.00401560
mov eax, dword [esp + 0x28]
lea ebp, [esp + 0xc2]
mov edx, eax
mov ecx, eax
shr edx, 8
mov byte [esp + 0xe3], al
mov byte [esp + 0xe4], dl
mov edx, eax
shr eax, 0x18
mov byte [esp + 0xe6], al
mov eax, dword [esp + 0x2c]
shr edx, 0x10
mov byte [esp + 0xe5], dl
mov edx, eax
shr edx, 8
mov byte [esp + 0xe7], al
mov byte [esp + 0xe8], dl
mov edx, eax
shr eax, 0x18
mov byte [esp + 0xea], al
mov eax, dword [esp + 0x30]
shr edx, 0x10
mov byte [esp + 0xe9], dl
mov edx, eax
shr edx, 8
mov byte [esp + 0xeb], al
mov byte [esp + 0xec], dl
mov edx, eax
shr eax, 0x18
mov byte [esp + 0xee], al
mov eax, dword [esp + 0x34]
shr edx, 0x10
mov byte [esp + 0xed], dl
mov edx, eax
shr edx, 8
mov byte [esp + 0xf0], dl
mov edx, eax
shr edx, 0x10
mov byte [esp + 0xef], al
shr eax, 0x18
mov byte [esp + 0xf1], dl
lea edx, [esp + 0xe3]
mov byte [esp + 0xf2], al
mov eax, ebp
jmp 0x403e64
movzx ecx, byte [edx]
mov ebx, ecx
and ecx, 0xf
shr bl, 4
movzx ecx, byte [ecx + str.0123456789abcdef]
add edx, 1
mov edi, ebx
and edi, 0xff
movzx edi, byte [edi + str.0123456789abcdef]
mov byte [eax + 1], cl
mov ebx, edi
mov byte [eax], bl
add eax, 2
cmp edx, dword [esp + 0x10]
jb 0x403e61
mov byte [eax], 0
mov dword [esp], esi
call sub.msvcrt.dll_free
mov eax, dword [esp + 0x1c]
mov dword [esp + 4], ebp
mov dword [esp + 8], 0x20
mov dword [esp], eax
call sub.msvcrt.dll_memcmp
test eax, eax
sete al
add esp, 0x10c
pop ebx
movzx eax, al
pop esi
pop edi
pop ebp
ret
shl ebp, 6
lea ecx, [esp + 0x40]
add ebp, esi
mov dword [esp + 0x14], edx
mov dword [esp + 8], edi
mov dword [esp + 4], ebp
mov dword [esp], ecx
call sub.msvcrt.dll_memcpy
mov edx, dword [esp + 0x14]
jmp 0x403cf8
mov byte [esp + 0xc2], 0
lea ebp, [esp + 0xc2]
jmp 0x403ea0
mov edx, esi
mov ecx, ebp
lea eax, [esp + 0x28]
call fcn.00401560
mov edx, dword [esp + 0x38]
jmp 0x403cef