功能很简单,怎么会这么简单??

代码:
.386 .model flat, stdcall option casemap :none ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Include 文件定义 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> include windows.inc include masm32.inc includelib masm32.lib include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib include comdlg32.inc includelib comdlg32.lib MD5RESULT STRUCT dtA dd ? dtB dd ? dtC dd ? dtD dd ? MD5RESULT ENDS ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Equ 等值定义 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ICO_MAIN equ 1000 DLG_MAIN equ 100 IDC_FILE equ 101 IDC_BROWSE equ 102 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 数据段 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .data bfBuffer db 256 dup (0) szMD5Format db '%.8x%.8x%.8x%.8x',0 .data? hInstance dd ? hWinMain dd ? szFileName db MAX_PATH dup (?) stMD5Result MD5RESULT <?> .const szFileExt db '文本文件',0,'*.*',0,0 szNewFile db '.new.txt',0 szErrOpenFile db '无法打开源文件!',0 szErrCreateFile db '无法创建新的文本文件!',0 szSuccees db '文件转换成功,新的文本文件保存为',0dh,0ah,'%s',0 szSucceesCap db '提示',0 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 代码段 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .code FF proc uses ebx ecx,dta,dtb,dtc,dtd,x,s:byte,t ; a = b + ((a + F(b,c,d) + x + t) << s ) mov eax,dtb mov ebx,dtc mov ecx,dtd ; F(x,y,z) = (x and y) or ((not x) and z) and ebx,eax not eax and eax,ecx or eax,ebx add eax,dta add eax,x add eax,t mov cl,s rol eax,cl add eax,dtb ret FF endp GG proc uses ebx ecx,dta,dtb,dtc,dtd,x,s:byte,t ; a = b + ((a + G(b,c,d) + x + t) << s) mov eax,dtb mov ebx,dtc mov ecx,dtd ; G(x,y,z) = (x and z) or (y and (not z)) and eax,ecx not ecx and ecx,ebx or eax,ecx add eax,dta add eax,x add eax,t mov cl,s rol eax,cl add eax,dtb ret GG endp HH proc uses ebx ecx,dta,dtb,dtc,dtd,x,s:byte,t ; a = b + ((a + H(b,c,d) + x + t) << s) mov eax,dtb mov ebx,dtc mov ecx,dtd ; H(x,y,z) = x xor y xor z xor eax,ebx xor eax,ecx add eax,dta add eax,x add eax,t mov cl,s rol eax,cl add eax,dtb ret HH endp II proc uses ebx ecx,dta,dtb,dtc,dtd,x,s:byte,t ; a = b + ((a + I(b,c,d) + x + t) << s) mov eax,dtb mov ebx,dtc mov ecx,dtd ; I(x,y,z) = y xor (x or (not z)) not ecx or eax,ecx xor eax,ebx add eax,dta add eax,x add eax,t mov cl,s rol eax,cl add eax,dtb ret II endp procMD5hash proc uses eax ebx ecx edx edi esi,ptBuffer:dword,dtBufferLength:dword,ptMD5Result:dword local dta:dword,dtb:dword,dtc:dword,dtd:dword mov edi,ptBuffer mov eax,dtBufferLength inc eax add edi,eax mov byte ptr [edi-1],080h xor edx,edx mov ebx,64 div ebx neg edx add edx,64 cmp edx,8 jae @f add edx,64 @@: mov ecx,edx xor al,al rep stosb mov eax,dtBufferLength inc edx add dtBufferLength,edx xor edx,edx mov ebx,8 mul ebx mov dword ptr [edi-8],eax mov dword ptr [edi-4],edx mov edx,dtBufferLength mov edi,ptBuffer mov esi,ptMD5Result assume esi:ptr MD5RESULT mov [esi].dtA,067452301h mov [esi].dtB,0efcdab89h mov [esi].dtC,098badcfeh mov [esi].dtD,010325476h hashloop: mov eax,[esi].dtA mov dta,eax mov eax,[esi].dtB mov dtb,eax mov eax,[esi].dtC mov dtc,eax mov eax,[esi].dtD mov dtd,eax invoke FF,dta,dtb,dtc,dtd,dword ptr [edi+00*4],07,0d76aa478h mov dta,eax invoke FF,dtd,dta,dtb,dtc,dword ptr [edi+01*4],12,0e8c7b756h mov dtd,eax invoke FF,dtc,dtd,dta,dtb,dword ptr [edi+02*4],17,0242070dbh mov dtc,eax invoke FF,dtb,dtc,dtd,dta,dword ptr [edi+03*4],22,0c1bdceeeh mov dtb,eax invoke FF,dta,dtb,dtc,dtd,dword ptr [edi+04*4],07,0f57c0fafh mov dta,eax invoke FF,dtd,dta,dtb,dtc,dword ptr [edi+05*4],12,04787c62ah mov dtd,eax invoke FF,dtc,dtd,dta,dtb,dword ptr [edi+06*4],17,0a8304613h mov dtc,eax invoke FF,dtb,dtc,dtd,dta,dword ptr [edi+07*4],22,0fd469501h mov dtb,eax invoke FF,dta,dtb,dtc,dtd,dword ptr [edi+08*4],07,0698098d8h mov dta,eax invoke FF,dtd,dta,dtb,dtc,dword ptr [edi+09*4],12,08b44f7afh mov dtd,eax invoke FF,dtc,dtd,dta,dtb,dword ptr [edi+10*4],17,0ffff5bb1h mov dtc,eax invoke FF,dtb,dtc,dtd,dta,dword ptr [edi+11*4],22,0895cd7beh mov dtb,eax invoke FF,dta,dtb,dtc,dtd,dword ptr [edi+12*4],07,06b901122h mov dta,eax invoke FF,dtd,dta,dtb,dtc,dword ptr [edi+13*4],12,0fd987193h mov dtd,eax invoke FF,dtc,dtd,dta,dtb,dword ptr [edi+14*4],17,0a679438eh mov dtc,eax invoke FF,dtb,dtc,dtd,dta,dword ptr [edi+15*4],22,049b40821h mov dtb,eax invoke GG,dta,dtb,dtc,dtd,dword ptr [edi+01*4],05,0f61e2562h mov dta,eax invoke GG,dtd,dta,dtb,dtc,dword ptr [edi+06*4],09,0c040b340h mov dtd,eax invoke GG,dtc,dtd,dta,dtb,dword ptr [edi+11*4],14,0265e5a51h mov dtc,eax invoke GG,dtb,dtc,dtd,dta,dword ptr [edi+00*4],20,0e9b6c7aah mov dtb,eax invoke GG,dta,dtb,dtc,dtd,dword ptr [edi+05*4],05,0d62f105dh mov dta,eax invoke GG,dtd,dta,dtb,dtc,dword ptr [edi+10*4],09,002441453h mov dtd,eax invoke GG,dtc,dtd,dta,dtb,dword ptr [edi+15*4],14,0d8a1e681h mov dtc,eax invoke GG,dtb,dtc,dtd,dta,dword ptr [edi+04*4],20,0e7d3fbc8h mov dtb,eax invoke GG,dta,dtb,dtc,dtd,dword ptr [edi+09*4],05,021e1cde6h mov dta,eax invoke GG,dtd,dta,dtb,dtc,dword ptr [edi+14*4],09,0c33707d6h mov dtd,eax invoke GG,dtc,dtd,dta,dtb,dword ptr [edi+03*4],14,0f4d50d87h mov dtc,eax invoke GG,dtb,dtc,dtd,dta,dword ptr [edi+08*4],20,0455a14edh mov dtb,eax invoke GG,dta,dtb,dtc,dtd,dword ptr [edi+13*4],05,0a9e3e905h mov dta,eax invoke GG,dtd,dta,dtb,dtc,dword ptr [edi+02*4],09,0fcefa3f8h mov dtd,eax invoke GG,dtc,dtd,dta,dtb,dword ptr [edi+07*4],14,0676f02d9h mov dtc,eax invoke GG,dtb,dtc,dtd,dta,dword ptr [edi+12*4],20,08d2a4c8ah mov dtb,eax invoke HH,dta,dtb,dtc,dtd,dword ptr [edi+05*4],04,0fffa3942h mov dta,eax invoke HH,dtd,dta,dtb,dtc,dword ptr [edi+08*4],11,08771f681h mov dtd,eax invoke HH,dtc,dtd,dta,dtb,dword ptr [edi+11*4],16,06d9d6122h mov dtc,eax invoke HH,dtb,dtc,dtd,dta,dword ptr [edi+14*4],23,0fde5380ch mov dtb,eax invoke HH,dta,dtb,dtc,dtd,dword ptr [edi+01*4],04,0a4beea44h mov dta,eax invoke HH,dtd,dta,dtb,dtc,dword ptr [edi+04*4],11,04bdecfa9h mov dtd,eax invoke HH,dtc,dtd,dta,dtb,dword ptr [edi+07*4],16,0f6bb4b60h mov dtc,eax invoke HH,dtb,dtc,dtd,dta,dword ptr [edi+10*4],23,0bebfbc70h mov dtb,eax invoke HH,dta,dtb,dtc,dtd,dword ptr [edi+13*4],04,0289b7ec6h mov dta,eax invoke HH,dtd,dta,dtb,dtc,dword ptr [edi+00*4],11,0eaa127fah mov dtd,eax invoke HH,dtc,dtd,dta,dtb,dword ptr [edi+03*4],16,0d4ef3085h mov dtc,eax invoke HH,dtb,dtc,dtd,dta,dword ptr [edi+06*4],23,004881d05h mov dtb,eax invoke HH,dta,dtb,dtc,dtd,dword ptr [edi+09*4],04,0d9d4d039h mov dta,eax invoke HH,dtd,dta,dtb,dtc,dword ptr [edi+12*4],11,0e6db99e5h mov dtd,eax invoke HH,dtc,dtd,dta,dtb,dword ptr [edi+15*4],16,01fa27cf8h mov dtc,eax invoke HH,dtb,dtc,dtd,dta,dword ptr [edi+02*4],23,0c4ac5665h mov dtb,eax invoke II,dta,dtb,dtc,dtd,dword ptr [edi+00*4],06,0f4292244h mov dta,eax invoke II,dtd,dta,dtb,dtc,dword ptr [edi+07*4],10,0432aff97h mov dtd,eax invoke II,dtc,dtd,dta,dtb,dword ptr [edi+14*4],15,0ab9423a7h mov dtc,eax invoke II,dtb,dtc,dtd,dta,dword ptr [edi+05*4],21,0fc93a039h mov dtb,eax invoke II,dta,dtb,dtc,dtd,dword ptr [edi+12*4],06,0655b59c3h mov dta,eax invoke II,dtd,dta,dtb,dtc,dword ptr [edi+03*4],10,08f0ccc92h mov dtd,eax invoke II,dtc,dtd,dta,dtb,dword ptr [edi+10*4],15,0ffeff47dh mov dtc,eax invoke II,dtb,dtc,dtd,dta,dword ptr [edi+01*4],21,085845dd1h mov dtb,eax invoke II,dta,dtb,dtc,dtd,dword ptr [edi+08*4],06,06fa87e4fh mov dta,eax invoke II,dtd,dta,dtb,dtc,dword ptr [edi+15*4],10,0fe2ce6e0h mov dtd,eax invoke II,dtc,dtd,dta,dtb,dword ptr [edi+06*4],15,0a3014314h mov dtc,eax invoke II,dtb,dtc,dtd,dta,dword ptr [edi+13*4],21,04e0811a1h mov dtb,eax invoke II,dta,dtb,dtc,dtd,dword ptr [edi+04*4],06,0f7537e82h mov dta,eax invoke II,dtd,dta,dtb,dtc,dword ptr [edi+11*4],10,0bd3af235h mov dtd,eax invoke II,dtc,dtd,dta,dtb,dword ptr [edi+02*4],15,02ad7d2bbh mov dtc,eax invoke II,dtb,dtc,dtd,dta,dword ptr [edi+09*4],21,0eb86d391h mov dtb,eax mov eax,dta add [esi].dtA,eax mov eax,dtb add [esi].dtB,eax mov eax,dtc add [esi].dtC,eax mov eax,dtd add [esi].dtD,eax add edi,64 sub edx,64 jnz hashloop mov ecx,4 @@: mov eax,dword ptr [esi] xchg al,ah rol eax,16 xchg al,ah mov dword ptr [esi],eax add esi,4 loop @b mov esi,ptMD5Result ret procMD5hash endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _ProcFile proc pszFileName,pbfBuffer local @hFile,@hFileNew,@hFileMap,@lpMemory,@lpMemorywr,@dwFileSize local @szNewFile[MAX_PATH]:byte local @szBuffer[512]:byte LOCAL @stMD5Result:MD5RESULT ;******************************************************************** ; 打开文件 ;******************************************************************** invoke CreateFile,pszFileName,GENERIC_READ,FILE_SHARE_READ,0,\ OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0 .if eax == INVALID_HANDLE_VALUE ;invoke MessageBox,hWinMain,addr szErrOpenFile,NULL,MB_OK or MB_ICONEXCLAMATION ret .endif mov @hFile,eax invoke GetFileSize,@hFile,NULL mov @dwFileSize,eax ;******************************************************************** ; 建立内存映射文件 ;******************************************************************** invoke CreateFileMapping,@hFile,NULL,PAGE_READONLY,0,0,NULL .if ! eax ;invoke MessageBox,hWinMain,addr szErrOpenFile,NULL,MB_OK or MB_ICONEXCLAMATION jmp _Ret1 .endif mov @hFileMap,eax invoke MapViewOfFile,eax,FILE_MAP_READ,0,0,0 .if ! eax ;invoke MessageBox,hWinMain,addr szErrOpenFile,NULL,MB_OK or MB_ICONEXCLAMATION jmp _Ret2 .endif mov @lpMemory,eax ;CountMd5Hash invoke VirtualAlloc,0,@dwFileSize,1000h,40h mov @lpMemorywr,eax invoke MemCopy,@lpMemory,@lpMemorywr,@dwFileSize invoke procMD5hash, @lpMemorywr, @dwFileSize, addr @stMD5Result invoke VirtualFree,@lpMemorywr,@dwFileSize,MEM_RELEASE lea esi,@stMD5Result assume esi:ptr MD5RESULT invoke wsprintfA,pbfBuffer,addr szMD5Format,[esi].dtA,[esi].dtB,[esi].dtC,[esi].dtD _Ret3: invoke UnmapViewOfFile,@lpMemory _Ret2: invoke CloseHandle,@hFileMap _Ret1: invoke CloseHandle,@hFile ret _ProcFile endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam local @stOpenFileName:OPENFILENAME mov eax,wMsg .if eax == WM_CLOSE invoke EndDialog,hWnd,NULL ;******************************************************************** .elseif eax == WM_INITDIALOG push hWnd pop hWinMain invoke LoadIcon,hInstance,ICO_MAIN invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax invoke SendDlgItemMessage,hWnd,IDC_FILE,EM_SETLIMITTEXT,MAX_PATH,0 ;******************************************************************** .elseif eax == WM_COMMAND mov eax,wParam .if ax == IDC_BROWSE ;******************************************************************** invoke RtlZeroMemory,addr @stOpenFileName,sizeof OPENFILENAME mov @stOpenFileName.lStructSize,SIZEOF @stOpenFileName mov @stOpenFileName.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST push hWinMain pop @stOpenFileName.hwndOwner mov @stOpenFileName.lpstrFilter,offset szFileExt mov @stOpenFileName.lpstrFile,offset szFileName mov @stOpenFileName.nMaxFile,MAX_PATH invoke GetOpenFileName,addr @stOpenFileName .if eax invoke SetDlgItemText,hWnd,IDC_FILE,addr szFileName .endif ;******************************************************************** .elseif ax == IDC_FILE invoke GetDlgItemText,hWnd,IDC_FILE,addr szFileName,MAX_PATH mov ebx,eax invoke GetDlgItem,hWnd,IDOK invoke EnableWindow,eax,ebx ;******************************************************************** .elseif ax == IDOK invoke _ProcFile,addr szFileName,addr bfBuffer invoke SetDlgItemText,hWnd,IDC_FILE,addr bfBuffer .endif ;******************************************************************** .else mov eax,FALSE ret .endif mov eax,TRUE ret _ProcDlgMain endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start: invoke GetModuleHandle,NULL mov hInstance,eax invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL invoke ExitProcess,NULL ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> end start