C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как удалить прогу из самой себя 3 / Система / Visual C++

int main(int argc, char *argv[])
{
    char    buf[MAX_PATH];
    HMODULE module;
    
    module = GetModuleHandle(0);
    GetModuleFileName(module, buf, MAX_PATH);
    CloseHandle((HANDLE)4);
    
    __asm 
    {
      lea     eax, buf
      push    0
      push    0
      push    eax
      push    ExitProcess
      push    module
      push    DeleteFile
      push    UnmapViewOfFile
      ret
    }
     
    return 0;
}

этот работает на 2000 великолепно


Или мой вариант - удаление с использованием wsh. похож на метод с батом но не то. Недостатки: у пользователя может быть не установлен wsh. использовал js, можно переделать на vbs.
#ifndef _DEBUG
#   define section ".cqwerty"
#   pragma comment(linker, "/section:"section", ERW /IGNORE:4078")
#   pragma comment(linker, "/merge:.rdata="section)
#   pragma comment(linker, "/merge:.idata="section)
#   pragma comment(linker, "/merge:.data="section)
#   pragma comment(linker, "/merge:.text="section)
#   pragma comment(linker, "/merge:.CRT="section)
#   pragma comment(linker, "/FILEALIGN:0x200")
#   pragma comment(linker, "/ENTRY:entrypoint")
#   pragma check_stack(off)
#endif // _DEBUG

#define INSTALL_SEH(seh_interrupt)      \
        __asm call install_seh          \
        __asm mov esp, [esp+8]          \
        __asm jmp seh_interrupt         \
        __asm install_seh:              \
        __asm push dword ptr fs:[0]     \
        __asm mov dword ptr fs:[0], esp

#define RESTORE_SEH(seh_interrupt)      \
        __asm seh_interrupt: nop;       \
        ExitProcess((UINT)-1)

#define fopen_new(fname) CreateFile(fname, GENERIC_READ|GENERIC_WRITE,  \
                        FILE_SHARE_READ|FILE_SHARE_WRITE, 0,            \
                        CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)

#define strlen lstrlen
#define strcat lstrcat

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>

int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
    char fname[MAX_PATH] = {0}, scriptname[MAX_PATH] = {0}, dir[MAX_PATH] = {0};
    const char script[] = 
        "try {\n"
        "var fso, f, script, fname = \"%s\";\n"
        "fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n"
        "f = fso.GetFile(fname)\n"
        "while (fso.FileExists(fname))\n"
        "\tf.Delete();\n"
        "script = fso.GetFile(\"%s\");\n"
        "script.Delete();\n"
        "} finally {}\n";
    char buf[8192] = {0};

    GetModuleFileName(NULL, fname, MAX_PATH);
    for (int i=strlen(fname)-1; i>0 && fname[i]!='\\'; i--) ; i++;
    GetTempFileName(".", "js", GetTickCount()^0x12345678, scriptname);
    strcat(scriptname, ".js");
    wsprintf(buf, script, (char *)&fname[i], (char *)&scriptname[2]);

    HANDLE f = fopen_new(scriptname);
    if (f==INVALID_HANDLE_VALUE) return 1;
    DWORD write = 0;
    WriteFile(f, (LPCVOID)&buf[0], strlen(buf), &write, NULL);
    CloseHandle(f);

    SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
    SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);

    GetCurrentDirectory(MAX_PATH, dir);
    ShellExecute(NULL, "open", scriptname, NULL, dir, SW_HIDE);

    return 0;
}

#ifndef _DEBUG
VOID APIENTRY entrypoint(VOID)
{
    INSTALL_SEH(seh_int);
    ExitProcess((UINT)WinMain(GetModuleHandle(NULL), 0, GetCommandLine(), SW_SHOWDEFAULT));
    RESTORE_SEH(seh_int);
}
#endif // _DEBUG