Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Самоуничтожающийся проект 
:(
    Опции темы
New Neon
  Дата 1.8.2004, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.3.2004
Где: Хмельницкий, Укра ина

Репутация: нет
Всего: нет



Доброго всем времени суток. Дорогие програмисты не подскажете можноли создать самоудоляющиеся приложение (не исользуя реестр). Тоесть нужно создать прогу которая будет выполнятся только один раз (вроде тестового примера), а затем самоуничтожатся по её закрытии.

Примечание: проект состоит из одного исполняемого файла.

Это сообщение отредактировал(а) New Neon - 1.8.2004, 21:46
PM MAIL ICQ   Вверх
p0s0l
Дата 1.8.2004, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Создай bat-файл и запусти его, чтобы не было видно в таскбаре...
bat-файл должен пытаться удалять экзешник, при неудачных удалениях повторять попытку. А потом и себя должен удалить...
Есть и другие более изощренные методы... Когда-то в разделе C mr.Duda писал пример самоудаления через создание потока в процессе Explorer'а...


--------------------
С уважением, г-н Посол.
PM   Вверх
Illusion Dolphin
Дата 1.8.2004, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 4
Всего: 63



Код
procedure SelfDel;
var
  f : textFile;
  FileName : String;
begin
 FileName:=changefileext(paramstr(0),'.bat');
 AssignFile(f,FileName);
 Rewrite(f);
 writeln(f,':1');
 writeln(f,format('Erase "%s"',[paramstr(0)]));
 writeln(f,format('If exist "%s" Goto 1',[paramstr(0)]));
 writeln(f,format('Erase "%s"',[FileName]));
 CloseFile(f);
 ShellExecute(Application.Handle, 'Open', PChar(FileName), nil, nil, sw_hide);
 Halt;
end;


Это сообщение отредактировал(а) p0s0l - 29.9.2005, 11:20


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Akella
Дата 2.8.2004, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: нет
Всего: 329



в nt такое не пройдет, т.к. bat-файл будет дочерним процессом, и пока он не завершится, родительское приложение не будет выгружено. Не зря ведь народ пытается создать отдельный поток в процессе Проводника
PM MAIL   Вверх
Illusion Dolphin
Дата 2.8.2004, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 4
Всего: 63



dsergey, а примерчик простой найдётся?


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Akella
Дата 3.8.2004, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: нет
Всего: 329



это к господину p0s0l

PM MAIL   Вверх
p0s0l
Дата 3.8.2004, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Цитата
в nt такое не пройдет, т.к. bat-файл будет дочерним процессом, и пока он не завершится, родительское приложение не будет выгружено. Не зря ведь народ пытается создать отдельный поток в процессе Проводника

Ну по-крайней мере в XP это пашет, хоть и дочерний процесс создаётся...



--------------------
С уважением, г-н Посол.
PM   Вверх
Illusion Dolphin
Дата 3.8.2004, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 4
Всего: 63



Цитата
Ну по-крайней мере в XP это пашет, хоть и дочерний процесс создаётся...

А в win2000 это вроде не работает... Знает ли кто-нибудь решения (только не теоретически - этого добра навалом, а кусок практики 8) )?


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 3.8.2004, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



По просьбе трудящихся накатал самоудаление через CreateRemoteThread:
Код
uses TlHelp32;

function GetExplorerID : DWORD;
var
 hSnap : THandle;
 pe32 : TProcessEntry32;

begin
 Result := DWORD(-1);
 hSnap := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 pe32.dwSize := SizeOf(pe32);
 if Process32First(hSnap, pe32) then
   repeat
     if LowerCase(pe32.szExeFile) = 'explorer.exe' then
     begin
       Result := pe32.th32ProcessID;
       Break;
     end;
   until not Process32Next(hSnap, pe32);

 CloseHandle (hSnap);
end;

type
 TInjectCode = packed record
   PushOpcode : byte; // push FileName
   PushOperand : DWORD;
   CallOpcode : word; // call [DeleteFileA]
   CallOperand : DWORD;
   JzOpcode : byte; // jz @InjectCode
   JzOperand : byte;
   RetOpcode : byte; // ret
   AdrDeleteFile : DWORD; // адрес DeleteFileA
   FileName : array [0..4095] of char; // имя файла для удаления
 end;

var
 InjectCode : TInjectCode =
 (PushOpcode : $68;
  CallOpcode : $15FF;
  JzOpcode : $74;
  RetOpcode : $C3;
 );

procedure TForm1.Button1Click(Sender: TObject);
var
 hExplorer, hThread : THandle;
 adrThread : pointer;
 Delta, tmp : DWORD;

begin
 hExplorer := OpenProcess (PROCESS_ALL_ACCESS, False, GetExplorerID);

 adrThread := VirtualAllocEx (hExplorer, nil, SizeOf(InjectCode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
 Delta := DWORD(adrThread) - DWORD(@InjectCode);
 InjectCode.PushOperand := Delta + DWORD(@InjectCode.FileName);
 InjectCode.CallOperand := Delta + DWORD(@InjectCode.AdrDeleteFile);
 InjectCode.JzOperand := DWORD(@InjectCode) - DWORD(@InjectCode.RetOpcode);
 InjectCode.AdrDeleteFile := DWORD(GetProcAddress(LoadLibrary('kernel32.dll'), 'DeleteFileA'));
 CopyMemory (@InjectCode.FileName, PChar(Application.ExeName), Length(Application.ExeName));
 WriteProcessMemory (hExplorer, adrThread, @InjectCode, SizeOf(InjectCode), tmp);

 hThread := CreateRemoteThread (hExplorer, nil, 0, adrThread, nil, 0, tmp);
 CloseHandle (hThread);
 CloseHandle (hExplorer);
end;

Добавлено @ 20:30
Теперь, при выполнении этой процедурины в explorer'е создастся поток, который будет всё время пытаться удалить наш .exe-шник. Это ему удастся после того, как будет завершена наша прога...



--------------------
С уважением, г-н Посол.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1179 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.