首页
社区
课程
招聘
[原创]WinMD5 for ASM V1.1(版本重要升级,升级版在14楼)
发表于: 2007-11-15 03:19 15085

[原创]WinMD5 for ASM V1.1(版本重要升级,升级版在14楼)

2007-11-15 03:19
15085

标 题: 【原创】MD5算法程序
作 者: 非安全
时 间: 2007-11-15
链 接: http://bbs1.pediy.com/showthread.php?t=54926

一个还算完美的程序,主程序代码如下:

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;  Programmed by nohacks, nohacks@163.com
;  Website: http://hi.baidu.com/nohacks
;           Win32 ASM is Masm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;  版本信息
;  WinMD5 for ASM V1.0   - 可以取得文本或文件的MD5值
;     
;                         2007年11月15日
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.386
.model        flat,        stdcall
option        casemap        :none

include                windows.inc
include                user32.inc
include                kernel32.inc
includelib        user32.lib
includelib        kernel32.lib
include                comdlg32.inc
includelib        comdlg32.lib
include                debug.inc
include              Stdlib.Inc
includelib        Stdlib.lib

m2m        Macro M1,M2
        push        M2
        pop                M1
endm
               
.const         
ICO_ICO                EQU             1
DLG_MAIN                EQU                1000
IDC_EDT_IN             EQU             1001
IDC_EDT_OUT            EQU             1002
IDC_BTN_TXT            EQU             1003
IDC_BTN_FILE           EQU             1004
IDC_PGB                EQU             1005
.data?
hWinMain                dd                ?
hInstance                dd                ?
hMenu HANDLE dword ?
TheThread DWORD ?
                                    
.data
FilterString         BYTE         "全部文件(*.*)",0,"*.*",0,0
temp              db      '%s',0DH,0AH,0
szReceive         db       '文件名:%s',0dh,0ah
                  db       'MD5值 :%s',0dh,0ah,0
TEMP db '.',0

include                md5.asm

_OpenFileDlg        Proc _hWnd,_lpName,_nMax
        LOCAL        @OFN:OPENFILENAME                           ;设置打开文件对话框
       
        invoke        RtlZeroMemory,_lpName,_nMax                 ;数据清零
        invoke        RtlZeroMemory,addr @OFN,SizeOf @OFN         ;同上
        mov                @OFN.lStructSize,SizeOf @OFN        
        mov                @OFN.lpstrFilter,offset FilterString
        m2m                @OFN.hwndOwner,_hWnd
        m2m                @OFN.lpstrFile,_lpName
        m2m                @OFN.nMaxFile,_nMax
        mov                @OFN.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
        mov             @OFN.lpstrInitialDir,offset TEMP
        invoke        GetOpenFileName,addr @OFN                      ;调用打开文件对话框
        ret
_OpenFileDlg endp

_SetWindowCenter proc _hWnd:DWORD
LOCAL swidth,sheight,dwidth,dheight
LOCAL rect:RECT
invoke GetSystemMetrics,SM_CXSCREEN   
        mov swidth,eax                          
        invoke GetSystemMetrics,SM_CYSCREEN  ;取屏幕分辨率  
        mov sheight,eax                          
        invoke GetWindowRect,_hWnd,addr  rect   ;取本程序窗口尺寸
        mov eax,rect.right                      ;下面几行计算并设置屏幕中心位置      
        sub eax,rect.left                       
        mov dwidth,eax                        
        sub swidth,eax                        
        mov eax,rect.bottom                 
        sub eax,rect.top                    
        mov dheight,eax                       
        sub sheight,eax                        
        shr sheight,1                           
        shr swidth,1   
                                    
invoke SetWindowPos,_hWnd,HWND_NOTOPMOST,swidth,sheight,dwidth,dheight,SWP_SHOWWINDOW ;设置窗口位置
ret
_SetWindowCenter endp

;********************************************************************
CloseMapFile PROC hMapFile:DWORD,hFileRead:DWORD
        invoke CloseHandle,hMapFile
       ; mov    hMapFile,0
        invoke CloseHandle,hFileRead
        ret
CloseMapFile endp

GetMd5Thread PROC H:DWORD

        LOCAL   @Text[MAX_PATH]:BYTE
        LOCAL   @FileText[MAX_PATH]:BYTE
        LOCAL   @TEMP[MAX_PATH]:BYTE
        LOCAL        @hFileRead,@hMapFile,@pMemory               
invoke        _OpenFileDlg,hWinMain,addr @Text,MAX_PATH             ;调用打开文件对话框
   .if eax==0
           ret
   .endif
                        invoke        SetDlgItemText,hWinMain,IDC_EDT_IN,addr @Text ;输出文件路径到编辑框
                        invoke ExtractFileName,addr @Text,addr @FileText  ;取短文件名
                         
                        invoke CreateFile,ADDR @Text,\
                                                GENERIC_READ ,\
                                                0,\
                                                NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,\
                                                NULL
                          .if eax==0
                               
                        invoke MessageBox,0,CTEXT("打开文件失败!"),CTEXT("错误"),MB_OK       
                           ret       
                          .endif
                       
                        mov                @hFileRead,eax
                        invoke CreateFileMapping,@hFileRead,NULL,PAGE_READONLY,0,0,NULL  ;创建映射文件
                          
                        mov @hMapFile,eax

                        invoke MapViewOfFile,@hMapFile,FILE_MAP_READ,0,0,0   ;复制到本进程空间
                         
                        mov @pMemory,eax  
                        invoke        SendDlgItemMessage,hWinMain,IDC_PGB,PBM_SETPOS,1,0      ;进度条开始                  
                        invoke  GetFileSize,@hFileRead,0                                 
                        invoke         _MD5,@pMemory,eax                                                       
                        invoke wsprintf ,addr  @TEMP,addr  szReceive, addr @FileText,eax  ;连接文本串                                                                                                                                
                        ;invoke        SendDlgItemMessage,hWinMain,IDC_EDT_OUT,EM_SETSEL,-1,0        ;选择文本                                               
                        invoke        SendDlgItemMessage,hWinMain,IDC_EDT_OUT,EM_REPLACESEL,0,addr @TEMP ;输出到编辑框                       
                        invoke        SendDlgItemMessage,hWinMain,IDC_PGB,PBM_SETPOS,100,0   ;进度条结束
                        invoke UnmapViewOfFile,@pMemory                             ;关闭映射
                        invoke CloseMapFile,@hMapFile,@hFileRead                    ;关闭打开文件
                                                                                                                                             
        ret

GetMd5Thread endp

_ProcDlgMain        proc        uses ebx edi esi, \
                hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD

local   @Text[MAX_PATH]:BYTE
        local   @Temp[MAX_PATH]:BYTE
        LOCAL        @hMem,@hFile,@Size,@Read       
        mov        eax,wMsg
               
        cmp        eax,WM_COMMAND                                 
        je        GetMd5
        cmp        eax,WM_INITDIALOG                             
        je        boxStart
        cmp        eax,WM_CLOSE
        je        boxClose       
         
retFalse:
        mov        eax,FALSE
        ret

boxClose:
                                          
   invoke        EndDialog,hWnd,NULL
   jmp        retTrue

boxStart:

        push        hWnd
        pop        hWinMain
    invoke LoadIcon,hInstance,ICO_ICO
    invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax    ;设置窗口图标  
    invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0, SWP_NOMOVE or SWP_NOSIZE ;窗口置顶
    INVOKE _SetWindowCenter,hWinMain     ;使窗体出现在屏幕中心
    jmp        retTrue

GetMd5:
    mov     eax,wParam
    .if   eax==IDC_BTN_TXT
                invoke SendDlgItemMessage,hWinMain,IDC_PGB,PBM_SETPOS,1,0     ;进度条开始
                invoke        GetDlgItemText,hWnd, IDC_EDT_IN,addr @Text,MAX_PATH   ;取用户输入                    
                invoke        _MD5,addr @Text,eax                         ;MD5转换
                invoke  wsprintf,addr  @Temp,addr  temp,eax            ;连接文本开始
                invoke        SendDlgItemMessage,hWnd,IDC_EDT_OUT,EM_REPLACESEL,0,addr @Temp ;输出到编辑框               
                invoke        SendDlgItemMessage,hWinMain,IDC_PGB,PBM_SETPOS,100,0    ;进度条结束
   .elseif   eax==IDC_BTN_FILE                                                                                          
                invoke CreateThread,NULL,0,addr  GetMd5Thread,0,0,0        ;创建线程                                                                                              
   .endif
                    
retTrue:
        mov        eax,TRUE
        ret
_ProcDlgMain        endp

Start:
        invoke        GetModuleHandle,NULL
        mov                hInstance,eax
        invoke        DialogBoxParam,hInstance,DLG_MAIN,NULL,_ProcDlgMain,0
        invoke        ExitProcess,NULL
End        Start

==========================================

开发环境:MASM+RadASM
系统:Windows XP +SP2


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (21)
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
2
学习,支持,感谢
2007-11-15 10:34
0
雪    币: 248
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
强人呀!支持下
2007-11-15 18:43
0
雪    币: 2943
活跃值: (1788)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
4
看过路过,支持非安全。
2007-11-15 19:14
0
雪    币: 230
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
.elseif eax==IDC_BTN_FILE
invoke CreateThread,NULL,0,addr GetMd5Thread,0,0,TheThread


不明白,这里为什么不出错呢?
往 地址 0 的地方写东西,没点提示...,高人指点下
2007-11-15 21:54
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
6
这个是回传给回调函数的参数,可以留空,本程序没有使用,所以留空
2007-11-16 06:48
0
雪    币: 3758
活跃值: (3337)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
7
谢谢楼主
正好最近收集了一批md5实现, 晚上回去做做性能测试
2007-11-16 13:58
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
8
“2007-11-15, 03:19”发的贴,大半夜干嘛呢,
是不是又让世界的某个角落变的不安全了
2007-11-16 23:00
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
楼上真幽默
2007-11-17 00:21
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
10
呵呵。。。。。
2007-11-17 21:47
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
11
[QUOTE='wofan[OCN];381641']看过路过,支持非安全。[/QUOTE]

谢谢哈
2007-11-19 06:47
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
12
哦,大大是否公布一下,让我们也研究下。。。。。。
2007-11-19 06:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好东东啊,收下慢慢研究!!希望楼主多发源码啊,哈哈
2007-11-19 13:39
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
14
标 题: 【原创】一个汇编写的MD5算法程序-WinMD5 for ASM V1.1
作 者: 非安全
时 间: 2007-11-21
链 接: http://bbs.pediy.com/showthread.php?t=55309

主程序代码如下:


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;  Programmed by nohacks, nohacks@163.com
;  Website: http://hi.baidu.com/nohacks
;           Win32 ASM is Masm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;  版本信息
;  WinMD5 for ASM V1.1   - 可以取得文本或文件的MD5值
;     
;                         2007年11月21日
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


.386
.model	flat,	stdcall
option	casemap	:none

include		windows.inc
include		user32.inc
include         shell32.inc
include		kernel32.inc
includelib	user32.lib
includelib	kernel32.lib
include		comdlg32.inc
includelib	comdlg32.lib
includelib      shell32.lib
include	        debug.inc
include	      Stdlib.Inc
includelib	Stdlib.lib

m2m	Macro M1,M2
	push	M2
	pop		M1
endm
		
.const          
 ICO_ICO                EQU             1
 DLG_MAIN		EQU		1000
 IDC_EDT_FILE           EQU             1001
 IDC_EDT_OUT            EQU             1002
 IDC_PGB                EQU             1003
 IDC_BTN_EXIT           EQU             1004
.data? 
hWinMain		dd		?
hInstance		dd		?
hMenu HANDLE dword ? 
TheThread DWORD ?
                            
.data
FileName          db      MAX_PATH  dup(0)
temp              db      '%s',0DH,0AH,0
FilterString	  db	 "全部文件(*.*)",0,"*.*",0,0
szReceive         db       '文件名   :%s',0dh,0ah
                  db       '文件大小 :%d','字节',0dh,0ah
                  db       '文件MD5值:%s ',0dh,0ah,0
TEMP              db       '.',0
 
include		md5.asm



_SetWindowCenter proc _hWnd:DWORD
LOCAL swidth,sheight,dwidth,dheight
LOCAL rect:RECT
invoke GetSystemMetrics,SM_CXSCREEN    
        mov swidth,eax                          
        invoke GetSystemMetrics,SM_CYSCREEN    
        mov sheight,eax                          
        invoke GetWindowRect,_hWnd,addr  rect   
        mov eax,rect.right                      
        sub eax,rect.left                       
        mov dwidth,eax                         
        sub swidth,eax                         
        mov eax,rect.bottom                 
        sub eax,rect.top                    
        mov dheight,eax                       
        sub sheight,eax                         
        shr sheight,1                           
        shr swidth,1                            
        invoke SetWindowPos,_hWnd,HWND_NOTOPMOST,swidth,sheight,dwidth,dheight,SWP_SHOWWINDOW
ret
_SetWindowCenter endp

;********************************************************************
CloseMapFile PROC hMapFile:DWORD,hFileRead:DWORD
        invoke CloseHandle,hMapFile 
        ;mov    hMapFile,0 
        invoke CloseHandle,hFileRead 
        ret 
CloseMapFile endp 

GetMd5Thread PROC PFile:DWORD
       
        LOCAL   @FileText[MAX_PATH]:BYTE
	LOCAL   @TEMP[MAX_PATH]:BYTE
	LOCAL	@hFileRead,@hMapFile,@pMemory,@FileSize		
			 
			invoke CreateFile, PFile,\ 
                                                GENERIC_READ ,\ 
                                                0,\ 
                                                NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,\ 
                                                NULL 
			  .if eax==0 
					jmp reterr
			  .endif
			  
			
			mov		@hFileRead,eax
			invoke ExtractFileName,PFile,addr @FileText  ; 取短文件名 
			
			invoke CreateFileMapping,@hFileRead,NULL,PAGE_READONLY,0,0,NULL 
			   .if eax==0
			       invoke CloseHandle,@hFileRead
			       jmp reterr
			    ret	
			   .endif
			
			mov @hMapFile,eax

			invoke MapViewOfFile,@hMapFile,FILE_MAP_READ,0,0,0 
			 .if eax==0  
			       invoke CloseMapFile,@hMapFile,@hFileRead
			       jmp reterr
			   .endif
			
                        mov @pMemory,eax  
                        invoke	SendDlgItemMessage,hWinMain,IDC_PGB,PBM_SETPOS,1,0   ;进度开始(注意:这里并不是实时进度)                      
                        invoke  GetFileSize,@hFileRead,0  
                        mov @FileSize,eax                               
			invoke	 _MD5,@pMemory,eax	                                               
                        invoke wsprintf ,addr  @TEMP,addr  szReceive, addr @FileText, @FileSize,eax                                                                                                                                 
			invoke	SendDlgItemMessage,hWinMain,IDC_EDT_OUT,EM_REPLACESEL,0,addr @TEMP			
			invoke	SendDlgItemMessage,hWinMain,IDC_PGB,PBM_SETPOS,100,0  ;进度结束	
			invoke	RtlZeroMemory,addr FileName,MAX_PATH                  ;	清空数据		
			INVOKE SendDlgItemMessage,hWinMain,IDC_EDT_FILE,WM_SETTEXT,0, addr FileName					
			invoke UnmapViewOfFile,@pMemory	
			invoke CloseMapFile,@hMapFile,@hFileRead
                        ret
       
       reterr:
       
       invoke MessageBox,0,CTEXT("文件打开失败,请检查是否为有效文件!"),CTEXT("WinMd5 for ASM v1.1"),MB_ICONERROR OR MB_OK
       
      	ret

GetMd5Thread endp

_ProcDlgMain	proc	uses ebx edi esi, \
                hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
	   
	LOCAL	@hMem,@hFile,@Size,@Read	
        mov	eax,wMsg
	cmp     eax ,WM_DROPFILES
	je      GetFile	
	cmp	eax,WM_COMMAND                                  
	je	Exit
	cmp	eax,WM_INITDIALOG                             
	je	boxStart
	cmp	eax,WM_CLOSE
	je	boxClose	
          
retFalse:
	mov	eax,FALSE
	ret

boxClose:
                                           
   invoke	EndDialog,hWnd,NULL
   jmp	retTrue

boxStart:

        push	hWnd
	pop	hWinMain
    invoke LoadIcon,hInstance,ICO_ICO
    invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax    ;设置窗口图标  
    invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0, SWP_NOMOVE or SWP_NOSIZE ;窗口置顶
    INVOKE _SetWindowCenter,hWinMain     ;使窗体出现在屏幕中心
    invoke DragAcceptFiles,hWnd,TRUE     ;允许拖放文件
    jmp	retTrue

GetFile:
 
     invoke DragQueryFile,wParam,0,addr FileName,MAX_PATH                          ;取拖放文件名
     invoke SendDlgItemMessage,hWnd,IDC_EDT_FILE,EM_REPLACESEL,0, addr FileName    ;输出到编辑框 
     invoke  DragFinish,wParam                                                     ;释放拖放资源
     invoke CreateThread,NULL,0,addr  GetMd5Thread,addr FileName,0,NULL	           ;创建线程
     
     
     
     
  Exit:
   mov     eax,wParam
    .if          eax==IDC_BTN_EXIT
   invoke	ExitProcess,NULL
   .endif
   
    	        
retTrue:
	mov	eax,TRUE
	ret
_ProcDlgMain	endp

Start:
	invoke	GetModuleHandle,NULL
	mov		hInstance,eax
	invoke	DialogBoxParam,hInstance,DLG_MAIN,NULL,_ProcDlgMain,0
	invoke	ExitProcess,NULL
End	Start



想对于1.0版

增加了对拖放文件的支持,取消了文本加密,修改美化了下界面,代码更加简练
上传的附件:
2007-11-22 00:20
0
雪    币: 486
活跃值: (13)
能力值: ( LV9,RANK:430 )
在线值:
发帖
回帖
粉丝
15
虽然看不懂,但是要支持一下,向你学习。
2007-11-22 08:17
0
雪    币: 381
活跃值: (140)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
16
这样的代码,收下了;在适当的时候可以直接挪到自己代码里。
2007-11-22 10:51
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
17
由于升级的改动不大,我就合并了,方便整理
2007-11-22 13:21
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
18
恩,谢谢了.....
2007-11-22 21:21
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
测试结果呢...
2007-11-24 23:10
0
雪    币: 409
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
支持,很不错的代码!
2007-11-25 20:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
只是加密的工具....有没有破解md5的啊.....
2007-12-3 11:36
0
雪    币: 236
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
非常不错,谢谢您的精彩分享!
2007-12-4 17:34
0
游客
登录 | 注册 方可回帖
返回
//