;下面获取自身所在分区格式,并判断是否是NTFS格式
invoke GetVolumeInformation,addr selfname,eax,eax,\
eax,eax,eax,addr szFileSystemName, sizeof szFileSystemName
mov byte ptr selfname+3,bl
.if dword ptr szFileSystemName!='SFTN';NTFS
invoke MessageBox,NULL,offset szErr,NULL,MB_blank>_OK
invoke ExitProcess, NULL
.endif
;下面判断自己是否在流(STREAM)中
;如果路径中含有两个:号,说明自己在文件流中
lea esi,selfname
xor edx,edx
@@:
LODSB
or al,al
jz @F ;遇到0结束
.if al==":"
INC edx
.endif
.if edx==2
mov byte ptr [esi-1],0
invoke DeleteFile,addr selfname ;删除宿主文件
invoke MessageBox,NULL,offset delname,offset szYes,MB_blank>_OK
invoke ExitProcess, NULL
.endif
jmp @B
;下面是当自身不在文件流中时,把自身复制到流中并运行
@@:
invoke CopyFile,addr selfname,addr delname,FALSE
invoke WinExec,addr delname,NULL
invoke ExitProcess, NULL
end main
附加品:
我在测试时发现,当delname(也就是流名)为" .:icyfox.exe" (.前为一空格,也可以是其他字符)时,会产生一个无法删除的文件" .",我的盘中还留着它,请大家想想办法帮我删掉它!我怀疑可能和那个文件夹漏洞有关,但现在是文件,我在后面加上\也删不掉
本文来源:icyfoxlovelace 作者:冰狐浪子