偶写的汇编版MD5 Hasher(win32 下的控制台程序)
*/ --------------------------------------------------------------------------------------*/ 出自: 编程中国 https://www.bccn.net
*/ 作者: zklhp E-mail:zklhp@ QQ:493165744
*/ 时间: 2008-8-4 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------
偶用win32汇编写了个控制台下的MD5hasher 请各位指点 多拍板砖
把源码帖一下吧
主程序
;MASMPlus 代码模板 - 控制台程序
;********************************************************************************
;MD5 Hasher
;by zklhp Email:zklhp@
;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@',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
(54.33 KB)
[[it] 本帖最后由 zklhp 于 2008-8-6 13:53 编辑 [/it]]