对话框的,里面有个按钮叫self delete,点击事件代码为:
void CSelfDeleteDlg::OnBtnselfdelete()
{
// TODO: Add your control notification handler code here
typedef int(WINAPI *PFClose)(LPVOID);
OSVERSIONINFO os_info;
os_info.dwOSVersionInfoSize =sizeof(os_info);
LPVOID pBuffer=NULL;
PFClose pClose,pDelete;
char fn[4096];
HINSTANCE hins=GetModuleHandle(NULL);
GetModuleFileName(NULL,fn,4096);
if(!GetVersionEx(&os_info)) return;
switch(os_info.dwPlatformId )
{
case VER_PLATFORM_WIN32_NT:
__try
{
while(CloseHandle((HANDLE)4));
}
__except(1)
{}
CloseHandle((HANDLE)4);
pClose=PFClose(UnmapViewOfFile);
break;
case VER_PLATFORM_WIN32_WINDOWS:
pClose=PFClose(FreeLibrary);
break;
default:
return;
}
pDelete=PFClose(DeleteFile);
pBuffer=VirtualAlloc(NULL,4096,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
_asm
{
call _delete_end
}
_asm
{
_test_close:
push hins
call [pClose]
or eax,eax
jz _test_close
lea eax,fn
push eax
call [pDelete]
or eax,eax
jz _Exit_Process
call eax
_Exit_Process:
push 0
push MEM_RELEASE
push 0
push pBuffer
push ExitProcess
push VirtualFree
ret
}
_delete_end:
_asm
{
pop ebx
push 128
push ebx
push [pBuffer]
call memcpy
jmp pBuffer
}
return;
}
里面的汇编功能逐步删除自身文件
---------------------------------------------
主要就是那段汇编,通过地址跳转和压栈,出栈来删除