首页
社区
课程
招聘
[原创]win32汇编实现写的文件粉碎工具
发表于: 2007-8-2 13:53 9275

[原创]win32汇编实现写的文件粉碎工具

2007-8-2 13:53
9275
我自己写的文件粉碎工具,代码非常简单,高手请指点!
;文件粉碎工具
;
;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

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

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 168
活跃值: (233)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
2
精神不错。
不过, 看了你的源码 不是真正的粉碎。无法达到国际标准。
试试我的 WINAPIEX 的文件粉碎接口 看看。 ^_^  真正从磁盘结构去处理~
2007-8-2 14:25
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
3
完全外行....
不懂....
2007-8-2 14:49
0
雪    币: 215
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
对,文件粉碎有国际标准的.要按标准行事.
2007-8-2 15:11
0
雪    币: 168
活跃值: (233)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
5
给LZ 几套标准。慢慢去实现吧。
美国的DoD 5220.22-MNAVSO P-5239-26 NAVSO P-5239-26 德国的VSITR 俄罗斯的GOST P50739-95

按照这些标准写,如果不从磁盘结构入手,那么永远都不是真正的文件粉碎
2007-8-2 16:13
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
6
真正的文件粉碎,不见得吧
只要硬盘曾经被写过,就算低格十几遍都有可能被扫描还原,
所谓的文件粉碎也都是通常意义的
除非你的软件能让硬盘短路烧掉那就差不多了:)
2007-8-2 21:25
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
7


楼主的代码只是把文件数据全清空了,然后一个delfile...这个和直接delfile没区别吧?
2007-8-2 22:36
0
雪    币: 347
活跃值: (25)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
8
猪大大又来发广告来了

完全看不懂代码的说
2007-8-2 23:47
0
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
9
那还不如直接用打火机,何必写软件来烧呢
2007-8-3 10:47
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
10
呵呵,这不是文件破坏吗?
2007-8-3 12:13
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
11
感觉用asm是个噱头,完全没有任何asm的特性
2007-8-3 15:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
该有的功能:允许用户设置复写原文件物理地址多少次,并可以用指定的文本复写,或用默认的文本去复写原文件的物理地址 x  次!或者用随机的文本去复写原文件的物理地址 x 次!

相信这样做之后,差不多就可以达到国际标准了吧?

当然对于原文件所在的物理区间,也可以对其中的任意部分进行不同次数的复写,比如:物理区间中的第1个字节写十次用不同的值,而对于第2个字节则用另一些不同值写二十次,对第3个字节则写x次用不同值。这样整个下来,在这个物理区间内的不同单元用了不同的复写次数不同的值写完后,即使可以扫描也比较难扫描出原文,因为各单元被写过的次数不同,而扫描遍数却是对每个单元都进行了同次的回查,结果当然不是原文!

不过在这个时代,用的是DNA科技,只要你忘不了就一定能被查出来!
2007-8-15 22:24
0
雪    币: 471
活跃值: (3703)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
13
mj001的360文件粉粹机才强悍
2007-8-15 22:29
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zrq
14
弱弱的问一句:文件粉碎跟删除文件有什么区别?
2007-8-16 19:13
0
游客
登录 | 注册 方可回帖
返回
//