Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: CL | DM;

Вниз

Может ли ехе...   Найти похожие ветки 

 
Artur   (2005-02-03 21:18) [0]

Может ли ехе-файл удалить самого себя? Есть ли варианты кроме bat-файла?


 
Anatoly Podgoretsky ©   (2005-02-03 21:40) [1]

Не может, а с bat-файл это не он сам себя, но хорошо.


 
Gero ©   (2005-02-03 21:45) [2]

Теоретически нет.


 
z007   (2005-02-03 22:59) [3]


> Есть ли варианты кроме bat-файла?

есть еще варианты с exe, com и dll - файлами )


 
Просто Джо ©   (2005-02-04 02:37) [4]


> Может ли ехе-файл удалить самого себя?


Может, а почему нет? Не сказано же - во время его выполнения.

Решение для NT:
MoveFileEx(szSrcFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);

Решение для 9x:
Ищем файл $WINDIR$\wininit.ini
В секцию [rename] пишем:
NULL=путь_и_имя_файла

Итог:
При следующей перезагрузке файл будет удален.


 
Просто Джо ©   (2005-02-04 02:41) [5]

Кстати, в SDK и MSDN -- ошибка (?)

Указано, что имя ключа должно быть "NUL". Во всех попадавшихся мне файлах wininit.ini я видел только "NULL". То-ли инсталляторы неграмотные, то-ли опечатка в MSDN.

Впрочем, я никогда не пробовал писать "NUL", а сейчас нет 9x под рукой, чтобы проверить, отрабатывается ли также "NUL".


 
Klev   (2005-02-04 04:24) [6]

Проверял только на Win2K и W98 - все работает. Компиллировал с помощью D6.

Для (xp?)/2000:
procedure selfdeletent;
var
 module: HModule;
 buf: array[0..MAX_PATH - 1] of char;  
 p: ULong;
 hKrnl32: HModule;
 pExitProcess,  
 pDeleteFile,
 pFreeLibrary: pointer;
begin
 module := GetModuleHandle(nil);
 GetModuleFileName(module, buf, SizeOf(buf));  
 CloseHandle(THandle(4));
 p := ULONG(module) + 1;
 hKrnl32 := GetModuleHandle("kernel32");  
 pExitProcess := GetProcAddress(hKrnl32, "ExitProcess");
 pDeleteFile := GetProcAddress(hKrnl32, "DeleteFileA");
 pFreeLibrary := GetProcAddress(hKrnl32, "FreeLibrary");
 asm
   lea eax, buf
   push 0
   push 0
   push eax
   push pExitProcess
   push p
   push pDeleteFile
   push pFreeLibrary
   ret
 end;
end;

Для 98/95/(me?):
Procedure selfDelete98;
Var Hmodule:Thandle;
Szmodulename:Array[0..Max_path] Of Char;
 Hkrnl32 : Thandle;
 Pexitprocess, Pdeletefile, Pfreelibrary,
 Punmapviewoffile : Pointer;
 Exitcode:Uint;
Begin
Hmodule:= Getmodulehandle(Nil);

Getmodulefilename(Hmodule, Szmodulename,
  Sizeof(Szmodulename));

 Hkrnl32 := Getmodulehandle( "kernel32" );
 Pexitprocess := Getprocaddress( Hkrnl32, "exitprocess" );
 Pdeletefile := Getprocaddress( Hkrnl32, "deletefilea" );
 Pfreelibrary := Getprocaddress( Hkrnl32, "freelibrary" );
 Punmapviewoffile := Getprocaddress( Hkrnl32, "unmapviewoffile" );

Exitcode := 0;

If($80000000 And Getversion())<>0 Then
// Win95, 98, Me
Asm

 Lea     Eax, Szmodulename
 Push    Exitcode
 Push    0
 Push    Eax
 Push    Pexitprocess
 Push    Hmodule
 Push    Pdeletefile
 Push    Pfreelibrary
 Ret
End
Else
Begin
Closehandle(Thandle(4));

Asm
 Lea     Eax, Szmodulename
 Push    Exitcode
 Push    0
 Push    Eax
 Push    Pexitprocess
 Push    Hmodule
 Push    Pdeletefile
 Push    Punmapviewoffile
 Ret
 End
End
End;


 
GrayFace ©   (2005-02-04 06:53) [7]

В XP не работает.


 
Marser ©   (2005-02-04 17:18) [8]

Системный реестр, ключ RunOnce


 
Kerk ©   (2005-02-04 17:25) [9]

Klev   (04.02.05 4:24) [6]

попса



Страницы: 1 вся ветка

Текущий архив: 2005.03.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
6-1105626253
dolmat
2005-01-13 17:24
2005.03.20
Вызов удаленного соединения


3-1108749618
Urvin
2005-02-18 21:00
2005.03.20
Поймать отключение сервера


14-1109342839
Rouse_
2005-02-25 17:47
2005.03.20
Маленькое ММР


14-1109572361
1008
2005-02-28 09:32
2005.03.20
Может статься так, что:


14-1109682820
Ирина
2005-03-01 16:13
2005.03.20
Знак радиации