Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];

Вниз

Удалить файл выполняющейся программы   Найти похожие ветки 

 
Pk   (2003-04-08 14:55) [0]

из этой же программы. То есть программа Project1.exe выполнившись должна удалить саму себя. Через DeleteFile не получается.


 
Diamond Cat   (2003-04-08 15:34) [1]

не раз обсуждалось. на прямую сделать это под виндами не возможно


 
MC TOL   (2003-04-08 16:09) [2]

>Diamond Cat © (08.04.03 15:34)

Зря Вы так... Хотя, может, в слове "напрямую" какой-то смысл, мне не ясный...
А если попробовать так? (см. ниже)

procedure DeleteSelf;
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 := system.ExitCode;

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;



 
MityaP   (2003-04-08 16:50) [3]

Взято из справки Озерова:
Работает под Windows 9x, но под NT не работает
(проверял лично)

var
Filename:String;
aTempBuf:array[0..MAX_PATH] of char;
bat_file:String;
f:TextFile;
si:TStartUpInfo;
pi:TProcessInformation;
begin
FileName:=Application.ExeName;
if GetShortPathName(PChar(FileName),aTempBuf,Sizeof(aTempBuf)-1)>0 then
FileName:=StrPAs(aTempBuf);

GetEnvironmentVariable("TEMP",aTempBuf,MAX_PATH);
bat_file:=StrPas(aTempBuf)+"\"+"delself.bat";
if GetShortPathName(PChar(bat_file),aTempBuf,Sizeof(aTempBuf)-1)>0 then
bat_file:=StrPAs(aTempBuf);

AssignFile(f,bat_file);
rewrite(f);
Writeln(f,"@echo off");
Writeln(f,":try");
Writeln(f,"del "+FileName);
Write(f,"if exist "+FileName);
Writeln(f," goto try");
Write(f,"del "+ bat_file);
CloseFile(f);
Memo1.Lines.LoadFromFile(bat_file);

ZeroMemory(@si,sizeof(si));
si.cb:=sizeof(si);
si.wShowWindow:=SW_HIDE;
si.dwFlags:=STARTF_USESHOWWINDOW;
CreateProcess(nil,PChar(bat_file),nil,nil,False,IDLE_PRIORITY_CLASS or DETACHED_PROCESS,
nil,nil,si,pi);
end;


 
MityaP   (2003-04-08 16:51) [4]

Дополнение [MityaP © (08.04.03 16:50)]:
// проверено и работает для WIN 9x. Не работает в WinNT

При работе программы происходит блокировка исполняемого файла программы на диске, до завершения работы программы. Данный код позволяет программе стереть саму себя с диска. При этом если программа уже загрузилась в память, то может работать и работать. Метод действия: создаётся временный bat файл в временной директории на диске, который удаляет программу и удаляет себя сам. При использовании кода в защите желательно использовать хотя бы простейшую шифровку текстовых строчек XOR-ом - они хорошо просматриваются диссассемблером и разумеется, хакеру не составит труда обнаружение защиты.



 
MityaP   (2003-04-08 16:53) [5]

в RSDN видел еще пример - в NT тоже удаляет...



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

Форум: "Основная";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.04 c
1-67349
новый
2003-04-09 15:21
2003.04.21
Как считывать с реестра строковые данные?


3-67168
Silver_
2003-04-03 10:35
2003.04.21
SQL (СУБД - Access)


3-67175
user111
2003-04-03 16:19
2003.04.21
Qreport


3-67182
Инна
2003-04-03 17:46
2003.04.21
сложный запрос и параметры


1-67366
Лана Розанова
2003-04-10 07:49
2003.04.21
Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский