原帖及讨论:http://bbs.bccn.net/thread-226811-1-1.html */ -------------------------------------------------------------------------------------- */ 出自: 编程中国 http://www.bccn.net */ 作者: zklhp E-mail:zklhp@sina.com QQ:493165744 */ 时间: 2008-8-4 编程论坛首发 */ 声明: 尊重作者劳动,转载请保留本段文字 */ --------------------------------------------------------------------------------------
偶用win32汇编写了个控制台下的MD5hasher 请各位指点 多拍板砖
把源码帖一下吧
主程序
;MASMPlus 代码模板 - 控制台程序 ;******************************************************************************** ;MD5 Hasher ;by zklhp Email:zklhp@sina.com ;2008.8.4 ;转载请保留完整 ;******************************************************************************** .386 .model flat, stdcall option casemap :none
include windows.inc include user32.inc include kernel32.inc include masm32.inc ;include gdi32.inc
;includelib gdi32.lib includelib user32.lib includelib kernel32.lib includelib masm32.lib include macro.asm .data lpszDigest db 17d dup(0) lpszBuffer db 512d dup(0) lpszOut db 128d dup(0)
_MD5hash proto :DWORD,:DWORD,:DWORD
.CODE include md5.asm ;参考多个版本的源代码编写 有一个不知道作者 在此一并表示感谢 START:
invoke StdOut,CTXT('MD5 hasher',0dh,0ah) invoke StdOut,CTXT('by zklhp Email:zklhp@sina.com',0dh,0ah) invoke GetCL,0,offset lpszBuffer invoke wsprintf,offset lpszOut,CTXT('Usage:%s 待加密字符串',0dh,0ah),offset lpszBuffer invoke StdOut,offset lpszOut invoke GetCL,1,offset lpszBuffer invoke wsprintf,offset lpszOut,CTXT('MD5("%s")='),offset lpszBuffer invoke StdOut,offset lpszOut invoke lstrlen,offset lpszBuffer invoke _MD5hash,offset lpszBuffer,eax,offset lpszDigest
lea esi,lpszDigest xor ecx,ecx ;改变顺序 方便输出 .while ecx < 4 mov eax,[esi+ecx*4] xchg ah,al rol eax,16d xchg al,ah mov [esi+ecx*4],eax ;int 3h inc ecx .endw
invoke wsprintf,offset lpszBuffer,CTXT('%08x%08x%08x%08x'),/ DWORD ptr [esi],DWORD ptr [esi+4h],DWORD ptr [esi+8h],DWORD ptr [esi+0ch]
invoke StdOut,offset lpszBuffer
;暂停显示,回车键关闭 invoke StdIn,offset lpszBuffer,sizeof lpszBuffer invoke ExitProcess,0 end START
md5.asm
.code
_MD5hash proc uses ebx edi esi,_lpBuffer:DWORD,_dwBufferLength:DWORD,_lpMD5Result:DWORD local @dwA:DWORD,@dwB:DWORD,@dwC:DWORD,@dwD:DWORD local @lpBuf:DWORD
mov ecx, _dwBufferLength add ecx, 128d ;分配足够大的 保证够用 invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,ecx ;貌似这样和平台相关 .if eax mov @lpBuf, eax .else dec eax ;出错返回 -1 ret .endif ;int 3h mov edi, eax mov esi, _lpBuffer mov ecx, _dwBufferLength shr ecx, 2 rep movsd mov ecx, _dwBufferLength and ecx, 11b rep movsb
mov edi, eax mov eax, _dwBufferLength inc eax add edi, eax mov BYTE ptr [edi-1], 080h mov edx, eax and edx, 111111b neg edx add edx, 40h cmp edx, 8h jae @f add edx, 40h @@: mov ecx, edx shr ecx, 2 xor eax, eax rep stosd mov ecx, edx and ecx, 11b rep stosb mov eax, _dwBufferLength inc edx add _dwBufferLength, edx xor edx, edx shl eax,3 mov DWORD ptr [edi-8], eax mov DWORD ptr [edi-4], edx mov edi, @lpBuf mov eax, 067452301h mov ebx, 0efcdab89h mov ecx, 098badcfeh mov edx, 010325476h
hashloop:
mov @dwA, eax mov @dwB, ebx mov @dwC, ecx mov @dwD, edx
push ebp mov esi, ebx and esi, ecx mov ebp, ebx not ebp and ebp, edx or esi, ebp lea esi, DWORD ptr ds:[eax+esi+0D76AA478H] add esi, DWORD ptr ds:[edi] rol esi, 7 add esi, ebx mov eax, esi mov esi, eax and esi, ebx mov ebp, eax not ebp and ebp, ecx or esi, ebp lea esi, DWORD ptr ds:[edx+esi+0E8C7B756H] add esi, DWORD ptr ds:[edi+4H] rol esi, 0CH add esi, eax mov edx, esi mov esi, edx and esi, eax mov ebp, edx not ebp and ebp, ebx or esi, ebp lea esi, DWORD ptr ds:[ecx+esi+0242070DBH] add esi, DWORD ptr ds:[edi+8H] rol esi, 11H add esi, edx mov ecx, esi mov esi, ecx and esi, edx mov ebp, ecx not ebp and ebp, eax or esi, ebp lea esi, DWORD ptr ds:[ebx+esi+0C1BDCEEEH] add esi, DWORD ptr ds:[edi+0CH] rol esi, 16H add esi, ecx mov ebx, esi mov esi, ebx and esi, ecx mov ebp, ebx not ebp and ebp, edx or esi, ebp lea esi, DWORD ptr ds:[eax+esi+0F57C0FAFH] add esi, DWORD ptr ds:[edi+10H] rol esi, 7H add esi, ebx mov eax, esi mov esi, eax and esi, ebx mov ebp, eax not ebp and ebp, ecx or esi, ebp lea esi, DWORD ptr ds:[edx+esi+04787C62AH] add esi, DWORD ptr ds:[edi+14H] rol esi, 0CH add esi, eax mov edx, esi mov esi, edx and esi, eax mov ebp, edx not ebp and ebp, ebx or esi, ebp lea esi, DWORD ptr ds:[ecx+esi+0A8304613H] add esi, DWORD ptr ds:[edi+18H] rol esi, 11H add esi, edx mov ecx, esi mov esi, ecx and esi, edx mov ebp, ecx not ebp and ebp, eax or esi, ebp lea esi, DWORD ptr ds:[ebx+esi+0FD469501H] add esi, DWORD ptr ds:[edi+1CH] rol esi, 16H add esi, ecx mov ebx, esi mov esi, ebx and esi, ecx mov ebp, ebx not ebp and ebp, edx or esi, ebp lea esi, DWORD ptr ds:[eax+esi+0698098D8H] add esi, DWORD ptr ds:[edi+20H] rol esi, 7 add esi, ebx mov eax, esi mov esi, eax and esi, ebx mov ebp, eax not ebp and ebp, ecx or esi, ebp lea esi, DWORD ptr ds:[edx+esi+8B44F7AFH] add esi, DWORD ptr ds:[edi+24H] rol esi, 0CH add esi, eax mov edx, esi mov esi, edx and esi, eax mov ebp, edx not ebp and ebp, ebx or esi, ebp lea esi, DWORD ptr ds:[ecx+esi+0FFFF5BB1H] add esi, DWORD ptr ds:[edi+28H] rol esi, 11H add esi, edx mov ecx, esi mov esi, ecx and esi, edx mov ebp, ecx not ebp and ebp, eax or esi, ebp lea esi, DWORD ptr ds:[ebx+esi+895CD7BEH] add esi, DWORD ptr ds:[edi+2CH] rol esi, 16H add esi, ecx mov ebx, esi mov esi, ebx and esi, ecx mov ebp, ebx not ebp and ebp, edx or esi, ebp lea esi, DWORD ptr ds:[eax+esi+06B901122H] add esi, DWORD ptr ds:[edi+30H] rol esi, 7H add esi, ebx mov eax, esi mov esi, eax and esi, ebx mov ebp, eax not ebp and ebp, ecx or esi, ebp lea esi, DWORD ptr ds:[edx+esi+0FD987193H] add esi, DWORD ptr ds:[edi+34H] rol esi, 0CH add esi, eax mov edx, esi mov esi, edx and esi, eax mov ebp, edx not ebp and ebp, ebx or esi, ebp lea esi, DWORD ptr ds:[ecx+esi+0A679438EH] add esi, DWORD ptr ds:[edi+38H] rol esi, 11H add esi, edx mov ecx, esi mov esi, ecx and esi, edx mov ebp, ecx not ebp and ebp, eax or esi, ebp lea esi, DWORD ptr ds:[ebx+esi+049B40821H] add esi, DWORD ptr ds:[edi+3CH] rol esi, 16H add esi, ecx mov ebx, esi mov esi, ebx and esi, edx mov ebp, edx not ebp and ebp, ecx or esi, ebp lea esi, DWORD ptr ds:[eax+esi+0F61E2562H] add esi, DWORD ptr ds:[edi+4H] rol esi, 5H add esi, ebx mov eax, esi mov esi, eax and esi, ecx mov ebp, ecx not ebp and ebp, ebx or esi, ebp lea esi, DWORD ptr ds:[edx+esi+0C040B340H] add esi, DWORD ptr ds:[edi+18H] rol esi, 9H add esi, eax mov edx, esi mov esi, edx and esi, ebx mov ebp, ebx not ebp and ebp, eax or esi, ebp lea esi, DWORD ptr ds:[ecx+esi+0265E5A51H] add esi, DWORD ptr ds:[edi+2CH] rol esi, 0EH add esi, edx mov ecx, esi mov esi, ecx and esi, eax mov ebp, eax not ebp and ebp, edx or esi, ebp lea esi, DWORD ptr ds:[ebx+esi+0E9B6C7AAH] add esi, DWORD ptr ds:[edi] rol esi, 14H add esi, ecx mov ebx, esi mov esi, ebx and esi, edx mov ebp, edx not ebp and ebp, ecx or esi, ebp lea esi, DWORD ptr ds:[eax+esi+0D62F105DH] add esi, DWORD ptr ds:[edi+14H] rol esi, 5 add esi, ebx mov eax, esi mov esi, eax and esi, ecx mov ebp, ecx not ebp and ebp, ebx or esi, ebp lea esi, DWORD ptr ds:[edx+esi+02441453H] add esi, DWORD ptr ds:[edi+28H] rol esi, 9H add esi, eax mov edx, esi mov esi, edx and esi, ebx mov ebp, ebx not ebp and ebp, eax or esi, ebp lea esi, DWORD ptr ds:[ecx+esi+0D8A1E681H] add esi, DWORD ptr ds:[edi+3CH] rol esi, 0EH add esi, edx mov ecx, esi mov esi, ecx and esi, eax mov ebp, eax not ebp and ebp, edx or esi, ebp lea esi, DWORD ptr ds:[ebx+esi+0E7D3FBC8H] add esi, DWORD ptr ds:[edi+10H] rol esi, 14H add esi, ecx mov ebx, esi mov esi, ebx and esi, edx mov ebp, edx not ebp and ebp, ecx or esi, ebp lea esi, DWORD ptr ds:[eax+esi+21E1CDE6H] add esi, DWORD ptr ds:[edi+24H] rol esi, 5H add esi, ebx mov eax, esi mov esi, eax and esi, ecx mov ebp, ecx not ebp and ebp, ebx or esi, ebp lea esi, DWORD ptr ds:[edx+esi+0C33707D6H] add esi, DWORD ptr ds:[edi+38H] rol esi, 9H add esi, eax mov edx, esi mov esi, edx and esi, ebx mov ebp, ebx not ebp and ebp, eax or esi, ebp lea esi, DWORD ptr ds:[ecx+esi+0F4D50D87H] add esi, DWORD ptr ds:[edi+0CH] rol esi, 0EH add esi, edx mov ecx, esi mov esi, ecx and esi, eax mov ebp, eax not ebp and ebp, edx or esi, ebp lea esi, DWORD ptr ds:[ebx+esi+455A14EDH] add esi, DWORD ptr ds:[edi+20H] rol esi, 14H add esi, ecx mov ebx, esi mov esi, ebx and esi, edx mov ebp, edx not ebp and ebp, ecx or esi, ebp lea esi, DWORD ptr ds:[eax+esi+0A9E3E905H] add esi, DWORD ptr ds:[edi+34H] rol esi, 5H add esi, ebx mov eax, esi mov esi, eax and esi, ecx mov ebp, ecx not ebp and ebp, ebx or esi, ebp lea esi, DWORD ptr ds:[edx+esi+0FCEFA3F8H] add esi, DWORD ptr ds:[edi+8H] rol esi, 9H add esi, eax mov edx, esi mov esi, edx and esi, ebx mov ebp, ebx not ebp and ebp, eax or esi, ebp lea esi, DWORD ptr ds:[ecx+esi+676F02D9H] add esi, DWORD ptr ds:[edi+1CH] rol esi, 0EH add esi, edx mov ecx, esi mov esi, ecx and esi, eax mov ebp, eax not ebp and ebp, edx or esi, ebp lea esi, DWORD ptr ds:[ebx+esi+8D2A4C8AH] add esi, DWORD ptr ds:[edi+30H] rol esi, 14H add esi, ecx mov ebx, esi mov esi, ebx xor esi, ecx xor esi, edx lea esi, DWORD ptr ds:[eax+esi+0FFFA3942H] add esi, DWORD ptr ds:[edi+14H] rol esi, 4 add esi, ebx mov eax, esi mov esi, eax xor esi, ebx xor esi, ecx lea esi, DWORD ptr ds:[edx+esi+8771F681H] add esi, DWORD ptr ds:[edi+20H] rol esi, 0BH add esi, eax mov edx, esi mov esi, edx xor esi, eax xor esi, ebx lea esi, DWORD ptr ds:[ecx+esi+6D9D6122H] add esi, DWORD ptr ds:[edi+2CH] rol esi, 10H add esi, edx mov ecx, esi mov esi, ecx xor esi, edx xor esi, eax lea esi, DWORD ptr ds:[ebx+esi+0FDE5380CH] add esi, DWORD ptr ds:[edi+38H] rol esi, 17H add esi, ecx mov ebx, esi mov esi, ebx xor esi, ecx xor esi, edx lea esi, DWORD ptr ds:[eax+esi+0A4BEEA44H] add esi, DWORD ptr ds:[edi+4H] rol esi, 4 add esi, ebx mov eax, esi mov esi, eax xor esi, ebx xor esi, ecx lea esi, DWORD ptr ds:[edx+esi+04BDECFA9H] add esi, DWORD ptr ds:[edi+10H] rol esi, 0BH add esi, eax mov edx, esi mov esi, edx xor esi, eax xor esi, ebx lea esi, DWORD ptr ds:[ecx+esi+0F6BB4B60H] add esi, DWORD ptr ds:[edi+1CH] rol esi, 10H add esi, edx mov ecx, esi mov esi, ecx xor esi, edx xor esi, eax lea esi, DWORD ptr ds:[ebx+esi+0BEBFBC70H] add esi, DWORD ptr ds:[edi+28H] rol esi, 17H add esi, ecx mov ebx, esi mov esi, ebx xor esi, ecx xor esi, edx lea esi, DWORD ptr ds:[eax+esi+289B7EC6H] add esi, DWORD ptr ds:[edi+34H] rol esi, 4H add esi, ebx mov eax, esi mov esi, eax xor esi, ebx xor esi, ecx lea esi, DWORD ptr ds:[edx+esi+0EAA127FAH] add esi, DWORD ptr ds:[edi] rol esi, 0BH add esi, eax mov edx, esi mov esi, edx xor esi, eax xor esi, ebx lea esi, DWORD ptr ds:[ecx+esi+0D4EF3085H] add esi, DWORD ptr ds:[edi+0CH] rol esi, 10H add esi, edx mov ecx, esi mov esi, ecx xor esi, edx xor esi, eax lea esi, DWORD ptr ds:[ebx+esi+4881D05H] add esi, DWORD ptr ds:[edi+18H] rol esi, 17H add esi, ecx mov ebx, esi mov esi, ebx xor esi, ecx xor esi, edx lea esi, DWORD ptr ds:[eax+esi+0D9D4D039H] add esi, DWORD ptr ds:[edi+24H] rol esi, 4H add esi, ebx mov eax, esi mov esi, eax xor esi, ebx xor esi, ecx lea esi, DWORD ptr ds:[edx+esi+0E6DB99E5H] add esi, DWORD ptr ds:[edi+30H] rol esi, 0BH add esi, eax mov edx, esi mov esi, edx xor esi, eax xor esi, ebx lea esi, DWORD ptr ds:[ecx+esi+1FA27CF8H] add esi, DWORD ptr ds:[edi+3CH] rol esi, 10H add esi, edx mov ecx, esi mov esi, ecx xor esi, edx xor esi, eax lea esi, DWORD ptr ds:[ebx+esi+0C4AC5665H] add esi, DWORD ptr ds:[edi+8] rol esi, 17H add esi, ecx mov ebx, esi mov esi, edx not esi or esi, ebx xor esi, ecx lea esi, DWORD ptr ds:[eax+esi+0F4292244H] add esi, DWORD ptr ds:[edi] rol esi, 6H add esi, ebx mov eax, esi mov esi, ecx not esi or esi, eax xor esi, ebx lea esi, DWORD ptr ds:[edx+esi+432AFF97H] add esi, DWORD ptr ds:[edi+1CH] rol esi, 0AH add esi, eax mov edx, esi mov esi, ebx not esi or esi, edx xor esi, eax lea esi, DWORD ptr ds:[ecx+esi+0AB9423A7H] add esi, DWORD ptr ds:[edi+38H] rol esi, 0FH add esi, edx mov ecx, esi mov esi, eax not esi or esi, ecx xor esi, edx lea esi, DWORD ptr ds:[ebx+esi+0FC93A039H] add esi, DWORD ptr ds:[edi+14H] rol esi, 15H add esi, ecx mov ebx, esi mov esi, edx not esi or esi, ebx xor esi, ecx lea esi, DWORD ptr ds:[eax+esi+655B59C3H] add esi, DWORD ptr ds:[edi+30H] rol esi, 6H add esi, ebx mov eax, esi mov esi, ecx not esi or esi, eax xor esi, ebx lea esi, DWORD ptr ds:[edx+esi+8F0CCC92H] add esi, DWORD ptr ds:[edi+0CH] rol esi, 0AH add esi, eax mov edx, esi mov esi, ebx not esi or esi, edx xor esi, eax lea esi, DWORD ptr ds:[ecx+esi+0FFEFF47DH] add esi, DWORD ptr ds:[edi+28H] rol esi, 0FH add esi, edx mov ecx, esi mov esi, eax not esi or esi, ecx xor esi, edx lea esi, DWORD ptr ds:[ebx+esi+85845DD1H] add esi, DWORD ptr ds:[edi+4H] rol esi, 15H add esi, ecx mov ebx, esi mov esi, edx not esi or esi, ebx xor esi, ecx lea esi, DWORD ptr ds:[eax+esi+6FA87E4FH] add esi, DWORD ptr ds:[edi+20H] rol esi, 6H add esi, ebx mov eax, esi mov esi, ecx not esi or esi, eax xor esi, ebx lea esi, DWORD ptr ds:[edx+esi+0FE2CE6E0H] add esi, DWORD ptr ds:[edi+3CH] rol esi, 0AH add esi, eax mov edx, esi mov esi, ebx not esi or esi, edx xor esi, eax lea esi, DWORD ptr ds:[ecx+esi+0A3014314H] add esi, DWORD ptr ds:[edi+18H] rol esi, 0FH add esi, edx mov ecx, esi mov esi, eax not esi or esi, ecx xor esi, edx lea esi, DWORD ptr ds:[ebx+esi+4E0811A1H] add esi, DWORD ptr ds:[edi+34H] rol esi, 15H add esi, ecx mov ebx, esi mov esi, edx not esi or esi, ebx xor esi, ecx lea esi, DWORD ptr ds:[eax+esi+0F7537E82H] add esi, DWORD ptr ds:[edi+10H] rol esi, 6H add esi, ebx mov eax, esi mov esi, ecx not esi or esi, eax xor esi, ebx lea esi, DWORD ptr ds:[edx+esi+0BD3AF235H] add esi, DWORD ptr ds:[edi+2CH] rol esi, 0AH add esi, eax mov edx, esi mov esi, ebx not esi or esi, edx xor esi, eax lea esi, DWORD ptr ds:[ecx+esi+02AD7D2BBH] add esi, DWORD ptr ds:[edi+8H] rol esi, 0FH add esi, edx mov ecx, esi mov esi, eax not esi or esi, ecx xor esi, edx lea esi, DWORD ptr ds:[ebx+esi+0EB86D391H] add esi, DWORD ptr ds:[edi+24H] rol esi, 15H add esi, ecx mov ebx, esi pop ebp
add eax, @dwA add ebx, @dwB add ecx, @dwC add edx, @dwD
add edi,40h sub _dwBufferLength,40h jnz hashloop ;int 3h mov esi, _lpMD5Result mov [esi], eax mov [esi+4h], ebx mov [esi+8h], ecx mov [esi+0Ch], edx invoke GlobalFree, @lpBuf ret
_MD5hash endp
感谢那些无私提供源码的前辈 程序+源码+参考资料已打包 md5hasher.rar  
|