информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetПортрет посетителяЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 700 с лишним git-серверов пострадало... 
 От повторного пришествия Шаи-Хулуда... 
 Крупный сбой Azure и других сервисов... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Как написать самоудалсяющуюся программу 25.08.01 12:04  Число просмотров: 994
Автор: finder Статус: Незарегистрированный пользователь
<"чистая" ссылка>
void MyDlg::OnDestroy()
{
CDialog::OnDestroy();

const char *AppName=AfxGetApp()->m_pszExeName;
FILE *f=fopen("selfdel.bat","w+");
fprintf(f,
":dc\n"
"del %s.exe\n"
"if exist %s.exe goto dc\n"
"del selfdel.bat",AppName,AppName);
fclose(f);
WinExec("selfdel.bat",FALSE);
}
<programming>
[C++] Как написать самоудалсяющуюся программу 25.08.01 08:21  
Автор: Goom Статус: Незарегистрированный пользователь
<"чистая" ссылка>
[C++] Как написать самоудалсяющуюся программу 01.09.01 16:44  
Автор: Odi$$ey Статус: Незарегистрированный пользователь
<"чистая" ссылка>
вот еще -

http://www.dore.ru/advises/advise.pl/f/2/i/24/t/1/x/index.html
[C++] Как написать самоудалсяющуюся программу 01.09.01 15:27  
Автор: Micky Статус: Незарегистрированный пользователь
<"чистая" ссылка>
А можно просто прописать на неё ссылочку в файл wininit.bat и тогда после любой перезагрузки системы файл будет удалён. Это файл в каталоге Виндов должен лежать.
[C++] Как написать самоудалсяющуюся программу 25.08.01 12:04  
Автор: finder Статус: Незарегистрированный пользователь
<"чистая" ссылка>
void MyDlg::OnDestroy()
{
CDialog::OnDestroy();

const char *AppName=AfxGetApp()->m_pszExeName;
FILE *f=fopen("selfdel.bat","w+");
fprintf(f,
":dc\n"
"del %s.exe\n"
"if exist %s.exe goto dc\n"
"del selfdel.bat",AppName,AppName);
fclose(f);
WinExec("selfdel.bat",FALSE);
}
cool :)) зато как у меня навороченно :))) 25.08.01 16:28  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
тоже вариант) тока не так просто реализовать) 25.08.01 18:02  
Автор: finder Статус: Незарегистрированный пользователь
<"чистая" ссылка>
.
[C++] Как написать самоудалсяющуюся программу 25.08.01 10:52  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
пока программа работает её удалить невозможно - файл занят системой
поэтому нужно чтобы какой то дргуой процесс удалил её после её завершения

я сам никогда такого не делал, но вот что первое пришло в голову :)
(криво, но других вариантов пока нет) :)

1) узнаёшь где находится таблица импорта в уже загруженном другом процессе (например explorer.exe - он всегда есть :) ) (как это сделать - разбирайся с PE форматом - долго объяснять)

2) пишешь с помощью WriteProcessMemory() по адресу ImageBase+64 (см. PE) небольшой кусок кода (там обычно свободно около 100 байт - DOS stub) (или другой адрес - не трудно найти неиспользуемое свободное место небольшой величины) - он должен будет выполниться вместо LocalAlloc : кроме запрашиваемой памяти выделить ещё один блок для размещения нашего основного кода, (т.е. вызвать настоящий LocalAlloc два раза), сохранить указатель на наш блок по адресу например ImageBase+4

2) заменяешь с помощью WriteProcessMemory() адрес в таблице импорта LocalAlloc на ImageBase+64

3) ждёшь пока значение по адресу ImageBase+4 не изменится

4) заменяешь адрес импорта LocalAlloc на прежний

5) теперь у нас есть "свой" кусок памяти в чужом процессе - пишем туда код для удаления нашей программы (он должен будет потом ещё и себя удалить - вернуть всё на место - как было раньше)

6) чтобы вызвать наш код опять заменяешь опять адрес в таблице импорта уже на точку входа основного кода

7) после того как дело сделано нужно вернуть прежний адрес в таблице импорта и вернуть управление той функции которая нас вызвала (освободить наш блок памяти не получится, но это не очень страшно :) )

нравится ? :))
удачи ;)

p.s. выделить "свой" блок памяти можно ещё одним способом - установить hook, который определив что он вызван в контексте нужного нам процесса выделит блок памяти.
но:
1) для этого нужна ещё одна DLL (т.е. удалять надо будет уже 2 файла) :)
2) всё равно перед удалением файлов нужно будет снять этот hook и вызывать основной код тем же способом - заменой адресов вызова
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach