我自己写的文件粉碎工具,代码非常简单,高手请指点!
;文件粉碎工具
;
;MSN:wangwg1976@hotmail.com
;mail:wwg266543@sian.com
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include comdlg32.inc
includelib comdlg32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN equ 1000
DLG_MAIN equ 100
IDC_FILE equ 101
IDC_BROWSE equ 102
IDC_ABOUT equ 103
IDC_STARTFS equ 104
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
hWinMain dd ?
szFileName db MAX_PATH dup (?)
.const
szFileExt db 'All Files(*.*)',0,'*.*',0,0
szNullFile db '您还没有选择需要粉碎的文件呢!',0
szErrOpenFile db '无法打开该文件!',0
szErrMapFile db '创建文件映射失败!',0
szErrViewFile db '内存文件映射失败!',0
szErrSMDFile db '无法粉碎该文件!',0
szSuccees db '文件粉碎成功!',0
szINFO db '提示信息',0
szTitle db '关于文件粉碎工具',0
szAbout db '使用该程序粉碎的文件,用数据恢复工具无法恢复.请谨慎使用该工具!',0dh,0ah
db '**********mail:wwg266543@sina.com*********', 0dh,0ah
db '**************MSN:wangwg1976@hotmail.com***********',0dh,0ah
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcFile proc
local @hFile,@hFileMap,@lpMemory,@dwFileSize
local @szFile[MAX_PATH]:byte
local @szBuffer[1024]:byte
;********************************************************************
; 打开文件
;********************************************************************
invoke GetDlgItemText,hWinMain,IDC_FILE,addr szFileName,MAX_PATH
invoke lstrlen,addr szFileName ;判断需要粉碎的文件是否设置
.if eax ==0
invoke MessageBox,hWinMain,addr szNullFile,addr szINFO,MB_OK
ret
.endif
invoke CreateFile,addr szFileName,GENERIC_READ + GENERIC_WRITE,FILE_SHARE_DELETE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
.if eax == INVALID_HANDLE_VALUE
invoke MessageBox,hWinMain,addr szErrOpenFile,addr szINFO,MB_OK or MB_ICONEXCLAMATION ;打开文件错误
ret
.endif
mov @hFile,eax ;保存打开文件句柄
invoke GetFileSize,@hFile,NULL ;得到文件大小
mov @dwFileSize,eax ;保存文件大小
;********************************************************************
; 建立内存映射文件
;********************************************************************
invoke CreateFileMapping,@hFile,NULL,PAGE_READWRITE,0,0,NULL ;内存映射文件
.if ! eax
invoke MessageBox,hWinMain,addr szErrMapFile,addr szINFO,MB_OK or MB_ICONEXCLAMATION
.endif
mov @hFileMap,eax ;保存内存映射句柄
invoke MapViewOfFile,eax,FILE_MAP_READ + FILE_MAP_WRITE,0,0,0
.if ! eax
invoke MessageBox,hWinMain,addr szErrViewFile,addr szINFO,MB_OK or MB_ICONEXCLAMATION
.endif
mov @lpMemory,eax ;保存内存映射指针
;********************************************************************
; 开始粉碎文件
;********************************************************************
invoke RtlZeroMemory,addr @lpMemory,sizeof @lpMemory ;填充0
.if eax == INVALID_HANDLE_VALUE
invoke MessageBox,hWinMain,addr szErrSMDFile,addr szINFO,MB_OK or MB_ICONEXCLAMATION ;粉碎失败
ret
.else
invoke UnmapViewOfFile,@lpMemory
invoke CloseHandle,@hFileMap
invoke CloseHandle,@hFile
.endif
invoke DeleteFile,addr szFileName
invoke MessageBox,hWinMain,addr szSuccees,addr szINFO,MB_OK
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_ABOUT
invoke MessageBox,hWnd,addr szAbout,addr szTitle,MB_OK
.elseif ax == IDC_STARTFS
call _ProcFile
.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
[课程]Linux pwn 探索篇!