информационная безопасность
без паники и всерьез
 подробно о проекте
Сетевые кракеры и правда о деле ЛевинаЗа кого нас держат?Страшный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Хакеры начали эксплуатировать критическую... 
 Критическая уязвимость UEFI позволяет... 
 Японский хостинг попросил клиентов... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
тоже вариант) тока не так просто реализовать) 25.08.01 18:02  Число просмотров: 1037
Автор: finder Статус: Незарегистрированный пользователь
<"чистая" ссылка>
.
<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





Рейтинг@Mail.ru


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