Форум: "Основная";
Текущий архив: 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