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

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

2007-11-15 03:19
15158

标 题: 【原创】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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
赞赏记录
参与人
雪币
留言
时间
Youlor
为你点赞~
2023-12-26 00:02
伟叔叔
为你点赞~
2023-9-25 00:00
PLEBFE
为你点赞~
2023-7-3 00:14
QinBeast
为你点赞~
2023-6-28 00:53
shinratensei
为你点赞~
2023-6-4 01:14
心游尘世外
为你点赞~
2023-5-30 00:11
飘零丶
为你点赞~
2023-5-20 05:36
最新回复 (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
雪    币: 3026
活跃值: (1873)
能力值: ( 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
活跃值: (227)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
6
这个是回传给回调函数的参数,可以留空,本程序没有使用,所以留空
2007-11-16 06:48
0
雪    币: 3759
活跃值: (3477)
能力值: ( 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
活跃值: (227)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
10
呵呵。。。。。
2007-11-17 21:47
0
雪    币: 750
活跃值: (227)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
11
[QUOTE='wofan[OCN];381641']看过路过,支持非安全。[/QUOTE]

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

主程序代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;  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)
能力值: ( LV12,RANK:430 )
在线值:
发帖
回帖
粉丝
15
虽然看不懂,但是要支持一下,向你学习。
2007-11-22 08:17
0
雪    币: 388
活跃值: (235)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
16
这样的代码,收下了;在适当的时候可以直接挪到自己代码里。
2007-11-22 10:51
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
17
由于升级的改动不大,我就合并了,方便整理
2007-11-22 13:21
0
雪    币: 750
活跃值: (227)
能力值: ( 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
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册