首页
社区
课程
招聘
[作品提交]文件MD5值计算工具
发表于: 2008-6-30 08:59 6702

[作品提交]文件MD5值计算工具

2008-6-30 08:59
6702
功能很简单,怎么会这么简单??

		.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


[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 372
活跃值: (31)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
2
再沙发。。。
2008-6-30 10:11
0
雪    币: 65
活跃值: (811)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3

MD5,我学了N久了,就是看不明白`~
2008-7-1 08:59
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
貌似exe文件他就出错
2008-7-2 09:23
0
雪    币: 1309
活跃值: (207)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢楼主。。。。
2008-11-19 22:06
0
游客
登录 | 注册 方可回帖
返回
//