首页
社区
课程
招聘
[原创]MD5检测工具v1.0
发表于: 2009-11-20 18:42 6125

[原创]MD5检测工具v1.0

2009-11-20 18:42
6125
前天看到非安全兄弟以前发的帖子:
《WinMD5 for ASM V1.1》:
http://bbs.pediy.com/showthread.php?p=382854
于是昨晚就自己动手编写了一MD5检测工具,主要就是参考了非安全兄弟的代码,并对其进行修改,界面如下:

源码下载:
MD5检测工具.rar

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 433
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
2
.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

include                windows.inc
include                user32.inc
include         shell32.inc
include                kernel32.inc
include                SkinH.inc
includelib        SkinH.lib
includelib        user32.lib
includelib        kernel32.lib
include                comdlg32.inc
includelib        comdlg32.lib
includelib      shell32.lib
include                      Stdlib.Inc
includelib        Stdlib.lib
include                md5.asm

DlgProc                        PROTO        :HWND,:UINT,:WPARAM,:LPARAM
_GetMD5                        PROTO        :DWORD
AboutDlg                PROTO        :HWND,:UINT,:WPARAM,:LPARAM
_GetError                PROTO

.const

ICO_MAIN                        equ 1
IDD_DIALOG1                        equ 101
IDC_FILE                        equ 1001
IDC_OPEN                        equ 1002
IDC_PGB1                        equ 1004
IDC_EDT                                equ 1005
IDC_ABOUT                        equ 1007
IDC_EXIT                        equ 1008
IDD_DLG1                        equ 1000
IDC_IMG1                        equ 1003
IDC_CLOSE                        equ 1006

;#########################################################################

.data
szSHE                        db        'itunes.she',0       
lpstrFilter                db        'All Files(*.*)',0,'*.*',0,0
szOpenFileFailed        db        '文件打开失败!',0
szCreateMapFailed       db         '创建文件映射失败! ',0
szMapFileFailed                db        '映射文件到内存失败!',0
szErrer                        db        '错误',0
szOpenFileFail                db        '打开文件失败!',0
temp                      db      '%s',0DH,0AH,0
szReceive                 db       '文件名   :%s',0dh,0ah
                          db       '文件大小 :%d','字节',0dh,0ah
                          db       '文件MD5值:%s ',0dh,0ah,0
szErrTextFormat                db        '错误码:%d',0dh,0ah
                        db        '文本描述:%s',0dh,0ah
szZero                         db        ' ',0dh,0ah                   
lpstrFile                db        255 dup (0)
lpFileName                db        MAX_PATH dup (0)
szFileName                  db      MAX_PATH  dup(0)

;#########################################################################

.data?

hInstance                        dd         ?
hWinMain                        dd        ?

;#########################################################################

.code

_WindowCenter    proc    hWnd:DWORD
        local    @stRectDeskTop:RECT,@stRectWin:RECT
        local    @dwWidth:DWORD,@dwHeight:DWORD

        invoke    GetWindowRect,hWnd,addr @stRectWin
        invoke    GetDesktopWindow
        mov              ebx,eax
        invoke    GetWindowRect,ebx,addr @stRectDeskTop

        mov    eax,@stRectWin.bottom
        sub    eax,@stRectWin.top
        mov    @dwHeight,eax
        mov    eax,@stRectWin.right
        sub    eax,@stRectWin.left
        mov    @dwWidth,eax

        mov    ebx,@stRectDeskTop.bottom
        sub    ebx,@dwHeight
        shr    ebx,1
        mov    ecx,@stRectDeskTop.right
        sub    ecx,@dwWidth
        shr    ecx,1

        invoke    MoveWindow,hWnd,ecx,ebx,@dwWidth,@dwHeight,FALSE
        ret

_WindowCenter     endp

start:

        invoke GetModuleHandle,NULL
        mov                hInstance,eax
        invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
        invoke ExitProcess,0

;########################################################################

DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
        LOCAL        @stOFN:OPENFILENAME
       
        mov                eax,uMsg
        .if eax==WM_INITDIALOG
                push         hWin
                pop        hWinMain
                invoke        SkinH_AttachEx,addr szSHE,0
                invoke        LoadIcon,hWin,ICO_MAIN
                invoke        SendMessage,hWin,WM_SETICON,ICON_BIG,eax
                invoke        _WindowCenter,hWin
                invoke        SetWindowPos,hWin,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE
                invoke        DragAcceptFiles,hWin,TRUE
        .elseif eax==WM_DROPFILES
                invoke         DragQueryFile,wParam,0,addr lpFileName,MAX_PATH
                invoke  SendDlgItemMessage,hWin,IDC_FILE,EM_REPLACESEL,0,addr lpFileName
                invoke         DragFinish,wParam
                invoke        _GetMD5,addr lpFileName
        .elseif eax==WM_COMMAND
                mov        eax,wParam
                .if        eax==IDC_OPEN
                        invoke        RtlZeroMemory,addr @stOFN,sizeof @stOFN
                        push hWin
                        pop @stOFN.hwndOwner
                        mov @stOFN.lStructSize,sizeof @stOFN
                        mov eax,offset lpstrFilter
                        mov @stOFN.lpstrFilter,eax
                        mov eax,offset lpstrFile
                        mov @stOFN.lpstrFile,eax
                        mov @stOFN.nMaxFile,sizeof lpstrFile
                        mov @stOFN.Flags,OFN_FILEMUSTEXIST OR OFN_PATHMUSTEXIST
                        invoke GetOpenFileName,addr @stOFN
                        .if         eax == 1
                                invoke SetDlgItemText,hWin,IDC_FILE,@stOFN.lpstrFile
                        .endif       
                        invoke         _GetMD5,@stOFN.lpstrFile
                .elseif        eax == IDC_ABOUT
                        invoke        DialogBoxParam,hInstance,IDD_DLG1,hWin,addr AboutDlg,NULL       
                .elseif eax == IDC_EXIT
                        invoke EndDialog,hWin,0
                .endif
        .elseif eax==WM_CLOSE
                invoke EndDialog,hWin,0
        .else
                mov                eax,FALSE
                ret
        .endif
        mov                eax,TRUE
        ret

DlgProc endp
_GetMD5        proc lpFile:DWORD
        LOCAL Temp      [MAX_PATH]:BYTE
        LOCAL szFileText[MAX_PATH]:BYTE
        LOCAL hFileRead,hMapFile,pMemory,szFileSize
       
        invoke CreateFile,lpFile,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL
        .if         eax==0
                invoke         MessageBox,0,addr szOpenFileFail,addr szErrer,MB_OK or MB_ICONERROR
                invoke        _GetError
        .endif
        mov        hFileRead,eax
        invoke        ExtractFileName,lpFile,addr szFileText
        invoke        CreateFileMapping,hFileRead,NULL,PAGE_READONLY,0,0,NULL
        .if        eax==0
                invoke        CloseHandle,hFileRead
                invoke        MessageBox,0,addr szCreateMapFailed,addr szErrer,MB_ICONERROR or MB_OK
                invoke        _GetError
                ret
        .endif
        mov        hMapFile,eax
        invoke        MapViewOfFile,hMapFile,FILE_MAP_READ,0,0,0
        .if         eax==0
                invoke        CloseHandle,hMapFile
                invoke        MessageBox,0,addr szMapFileFailed,addr szErrer,MB_OK or MB_ICONERROR
                invoke        _GetError
                ret
        .endif
        mov pMemory,eax
        invoke        SendDlgItemMessage,hWinMain,IDC_PGB1,PBM_SETPOS,1,0
        invoke        SetDlgItemText,hWinMain,IDC_EDT,addr szZero
        invoke        GetFileSize,hFileRead,0
        mov        szFileSize,eax
        invoke        _MD5,pMemory,eax
        invoke        wsprintf,addr Temp,addr szReceive,addr szFileText,addr szFileSize,eax
        invoke        SendDlgItemMessage,hWinMain,IDC_EDT,EM_REPLACESEL,0,addr Temp
        invoke        SendDlgItemMessage,hWinMain,IDC_PGB1,PBM_SETPOS,100,0
        invoke        RtlZeroMemory,addr szFileName,MAX_PATH
        invoke        SendDlgItemMessage,hWinMain,IDC_FILE,WM_SETTEXT,0,addr szFileName
        invoke        UnmapViewOfFile,pMemory
        invoke        CloseHandle,pMemory
        invoke        CloseHandle,hMapFile
        ret
_GetMD5 endp
_GetError  proc
        LOCAL         hLocal                 [MAX_PATH]:BYTE
        LOCAL         szErrerText         [MAX_PATH]:BYTE
        LOCAL        szErrerCode        :DWORD
       
        invoke        GetLastError
        mov         szErrerCode,eax       
        invoke        FormatMessage,FORMAT_MESSAGE_FROM_SYSTEM,FORMAT_MESSAGE_FROM_STRING,0,LANG_NEUTRAL,addr hLocal,255,NULL
        invoke        wsprintf,addr szErrerText,addr szErrTextFormat,addr szErrerCode,addr hLocal
        invoke        SetDlgItemText,hWinMain,IDC_EDT,addr szErrerText
        ret

_GetError endp

AboutDlg proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
       
        mov         eax,uMsg
        .if         eax==WM_COMMAND
                mov         eax,wParam
                .if        eax==IDC_CLOSE
                        invoke EndDialog,hWin,0
                .endif
        .else
                mov        eax,FALSE
                ret
        .endif       
        mov        eax,TRUE
        ret

AboutDlg endp

end start
2009-11-21 19:28
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
3
感谢分享,界面漂亮呀
2009-11-21 20:03
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
弱弱的问一句,这个是干什么用打 ?
2009-11-22 00:19
0
雪    币: 433
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
5
用于计算文件的MD5值,以判断文件是否被篡改,难道你没注意到一些供下载的文件都有提供一MD5值
2009-11-22 09:59
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不错,感谢分享,界面有点苹果的味道吧,
2009-11-24 17:44
0
雪    币: 11
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
是好东西呀,我已经下载用过了哦
谢谢楼主
2009-11-28 20:49
0
游客
登录 | 注册 方可回帖
返回
//