15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как стереть самого себя?

Эта программа уничтожает саму себя.

#include <windows.h>
#include <stdio.h>

void DelSelf(void)
{
        char modulename[MAX_PATH];
        char batfile[MAX_PATH];
        char batlines[MAX_PATH*4];
        LPSTR tempdir;
        char Buf[MAX_PATH]; 

        GetModuleFileName(NULL,modulename,MAX_PATH);

        tempdir = ((GetEnvironmentVariable(TEXT("TEMP"),
        Buf, MAX_PATH) > 0) ? Buf : NULL);

        strcpy(batfile,tempdir);
        strcat(batfile,"\\");
        strcat(batfile,"delself.bat");
        strcpy(batlines,"@echo off\n:try\ndel ");
        strcat(batlines,modulename);
        strcat(batlines,"\nif exist ");
        strcat(batlines,modulename);
        strcat(batlines," goto try\n");
        strcat(batlines,"del ");
        strcat(batlines,batfile);

        DWORD NOfBytes;

        HANDLE hbf= CreateFile(batfile, GENERIC_WRITE | GENERIC_READ,
        FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS,
        FILE_ATTRIBUTE_NORMAL, NULL);

        WriteFile(hbf,batlines,strlen(batlines),&NOfBytes, NULL);
        CloseHandle(hbf);

        STARTUPINFO         si;
        PROCESS_INFORMATION pi;
        ZeroMemory( &si, sizeof(si) );
        si.cb = sizeof(si);
        si.wShowWindow = SW_HIDE;
        si.dwFlags = STARTF_USESHOWWINDOW;
        
        CreateProcess(
                                        NULL,
                                        batfile,
                                        NULL,
                                        NULL,
                                        FALSE,
                                        IDLE_PRIORITY_CLASS|DETACHED_PROCESS,
                                        NULL,
                                        NULL,
                                        &si,
                                        &pi);

}
void main()
{
        DelSelf();
}