Форум программистов, компьютерный форум, киберфорум
Pure
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Как удалиться?

Запись от Pure размещена 23.05.2012 в 17:53
Показов 6329 Комментарии 4

тема уже поднималась. варианты с бат нас не устраивают поэтому ниже простенький код без бата.
для упрощения текста явно вызывается цмд. оно консольное и удобно пускается без окошка.
предполагается что оно лежит в систем32, так же для упрощения кода. Поисковые фичи и открытие процессов любой может накропать и достаточно быстро. Надеюсь кому пригодится)

ЗЫ: сделано по мотивам хабра.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <windows.h>
#include <stdio.h>
#pragma comment(linker,"/BASE:0x13140000")
 
 
 
DWORD WINAPI Trfunc (LPVOID param)
{
char *dat = (char*)param;
while(!DeleteFileA(dat));//циклимся пока не удалим
 
 
TerminateProcess(GetCurrentProcess(),0);
 
    return 0;
}
 
 
 
int main()
{
 
    //тут  суперполезный код
//..........................................
    for(int i=0;i<10;++i)
    {
printf("usefull code\n");
Sleep(1000);
    }
 
    //f 'nj бодяга для самоуничтожения
    PROCESS_INFORMATION pinf = {0};
    STARTUPINFO sinf = {0};
    sinf.cb = sizeof(STARTUPINFO);  
    static char buf [256]={0};
    GetModuleFileName(0,buf,256);//имя и путь самое себя   
    HMODULE hModule = GetModuleHandle(0);
    CreateProcess("C:\\WINDOWS\\system32\\cmd.exe",0,0,0,FALSE,CREATE_NO_WINDOW,0,0,&sinf,&pinf);//чтоб уж наверняка сами запускаем цмд
//для упрощения путь указан явно
    DWORD size=((PIMAGE_OPTIONAL_HEADER)((LPVOID)((BYTE*)(hModule)+((PIMAGE_DOS_HEADER)(hModule))->e_lfanew+sizeof(DWORD)+sizeof(IMAGE_FILE_HEADER))))->SizeOfImage;
    char* pp =(char*) VirtualAllocEx(pinf.hProcess,hModule,size+sizeof(buf),MEM_RESERVE|MEM_COMMIT,PAGE_EXECUTE_READWRITE);
    DWORD opt =0;
    char* p2 = pp+size; 
    WriteProcessMemory(pinf.hProcess,(LPVOID)pp,(LPCVOID)hModule,size,&opt);
    WriteProcessMemory(pinf.hProcess,p2,&buf,sizeof(buf),&opt);
    DWORD d;
    HANDLE htr = CreateRemoteThread(pinf.hProcess,0,0,Trfunc,p2,0,&d);
    CloseHandle(pinf.hProcess);
    CloseHandle(htr);
    return 0;
}
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 4
Комментарии
  1. Старый комментарий
    скажу я вам что попав в чужой процесс вы не найдёте там TerminateProcess и DeleteFileA и смысл, если код не возвращает открытый хэндл процесса , то и удалённого потока вам не удастся создать.
    но если хотите гасить через удалённый поток и чтоб ошибки не вылетела о обращении к нулю, почитайте мою последнею запись в блоге
    Запись от Van111 размещена 02.06.2012 в 14:58 Van111 вне форума
  2. Старый комментарий
    Аватар для Pure
    дорогой друг в варианте как удалиться -2, как раз по твоей теме, когда мы ничего не знаем и вынуждены обращаться к функциям косвенно.Обрати внимание, там нет ни одного имени функции Ну а вообще чего языком молотить? Компиллируй и проверяй. Ну и используй если надо.


    ЗЫ: в первом случае мы копируем образ целиком, это позволяет обращаться к функциям напрямки(в смысле по имени), будь то TerminateProcess или MessageBox.
    Поэтому дабы ты убедился, добавь в функцию потока MessageBox и все увидишь. Два немного разных подхода описано было. Специально для программы Джэм, как говориться.
    Буду считать что твой коммент - это была реклама твоего блоха, а не отсутствие желания изучать и экспериментировать
    Запись от Pure размещена 02.06.2012 в 15:52 Pure вне форума
  3. Старый комментарий
    Цитата Сообщение от Van111
    попав в чужой процесс вы не найдёте там TerminateProcess и DeleteFileA
    Почему? kernel32 загружена во все процессы, притом всегда по базовому адресу.
    Запись от Somebody размещена 02.06.2012 в 16:05 Somebody вне форума
  4. Старый комментарий
    Аватар для Pure
    да он прав в каком то смысле и если попасть в чужой процесс то нету имен, поэтому мы должны передать хэндл. однако если мы копируем образ целиком, то все в порядке.найдите все таки отличия в 2х вариантах.
    Запись от Pure размещена 02.06.2012 в 16:10 Pure вне форума
 
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru