ida64.wll
Code:
.text:1010E8FC ; int __fastcall sub_1010E8FC(void *src)
.text:1010E8FC sub_1010E8FC proc near ; CODE XREF: sub_1010EB24+C6
.text:1010E8FC
.text:1010E8FC var_6C = dword ptr -6Ch
.text:1010E8FC s1 = byte ptr -14h
.text:1010E8FC
.text:1010E8FC push ebx
.text:1010E8FD add esp, 0FFFFFF98h
.text:1010E900 mov ebx, eax
.text:1010E902 push esp
.text:1010E903 call MD5Init
.text:1010E908 push ebx ; s
.text:1010E909 call _strlen
.text:1010E90E pop ecx
.text:1010E90F push eax ; n
.text:1010E910 push ebx ; src
.text:1010E911 lea eax, [esp+74h+var_6C]
.text:1010E915 push eax ; int
.text:1010E916 call MD5Update
.text:1010E91B push esp ; s
.text:1010E91C lea edx, [esp+70h+s1]
.text:1010E920 push edx ; dest
.text:1010E921 call MD5Final
.text:1010E926 xor ebx, ebx
.text:1010E928
.text:1010E928 loc_1010E928: ; CODE XREF: sub_1010E8FC+53
.text:1010E928 push 10h ; n
.text:1010E92A mov eax, ebx
.text:1010E92C shl eax, 4
.text:1010E92F add eax, offset unk_1014CDCC ; <<<
.text:1010E935 push eax ; s2
.text:1010E936 lea edx, [esp+74h+s1]
.text:1010E93A push edx ; s1
.text:1010E93B call _memcmp
.text:1010E940 add esp, 0Ch
.text:1010E943 test eax, eax
.text:1010E945 jnz short loc_1010E94B
.text:1010E947 mov al, 1
.text:1010E949 jmp short loc_1010E953
.text:1010E94B ; ---------------------------------------------------------------------------
.text:1010E94B
.text:1010E94B loc_1010E94B: ; CODE XREF: sub_1010E8FC+49
.text:1010E94B inc ebx
.text:1010E94C cmp ebx, 19h
.text:1010E94F jb short loc_1010E928
.text:1010E951 xor eax, eax
.text:1010E953
.text:1010E953 loc_1010E953: ; CODE XREF: sub_1010E8FC+4D
.text:1010E953 add esp, 68h
.text:1010E956 pop ebx
.text:1010E957 retn
.text:1010E957 sub_1010E8FC end
you can see comparison after MD5Final call - patch it
in ida32.wll method is similar
credits: infern0