Посл.ответ |
Сообщение |
Ранг: 392.8 (мудрец), 108thx Активность: 0.26↘0.01 Статус: Участник REVENGE сила, БеХоЦе могила
|
Создано: 08 февраля 2006 12:04 · Личное сообщение · #1
Нашел следующий код для самоудаления exe, вылетает в XP на CloseHandle(THANDLE(4)), мож знает кто как исправить?
procedure DeleteSelf;
var
hModule: THandle;
szModuleName: array[0..MAX_PATH] of char;
hKrnl32: THandle;
pExitProcess, pDeleteFile, pFreeLibrary, pUnmapViewOfFile: Pointer;
ExitCode: UINT;
begin
try
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
except end;
end;
----- StarForce и Themida ацтой! | Сообщение посчитали полезным: |
|
Ранг: 500.5 (!), 8thx Активность: 0.23↘0 Статус: Участник
|
Создано: 08 февраля 2006 12:35 · Личное сообщение · #2
помойму всесто THANDLE(4) надо hModule
----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels | Сообщение посчитали полезным: |
Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор Author of DiE
|
Создано: 08 февраля 2006 12:41 · Личное сообщение · #3
прикольно... млин а где то я читал, что это можно только с помощью bat
файла =\ на 98 всё куул работает .. гы
Smon пишет:
помойму всесто THANDLE(4) надо hModule
да скорее всего... просто опечатка? или типа "доделай сам"? =)
----- [nice coder and reverser] | Сообщение посчитали полезным: |
Ранг: 392.8 (мудрец), 108thx Активность: 0.26↘0.01 Статус: Участник REVENGE сила, БеХоЦе могила
|
Создано: 08 февраля 2006 12:43 · Личное сообщение · #4
Smon неа... Процес закрывается на CloseHandle(hModule); и дальше не выполняется.
----- StarForce и Themida ацтой! | Сообщение посчитали полезным: |
Ранг: 392.8 (мудрец), 108thx Активность: 0.26↘0.01 Статус: Участник REVENGE сила, БеХоЦе могила
|
Создано: 08 февраля 2006 12:44 · Личное сообщение · #5
Hellspawn на 2000 тоже работает и CloseHandle(THANDLE(4)) (типа вряд ли это опечатка), а на XP не пашет.
----- StarForce и Themida ацтой! | Сообщение посчитали полезным: |
Ранг: 500.5 (!), 8thx Активность: 0.23↘0 Статус: Участник
|
Создано: 08 февраля 2006 13:39 · Поправил: Smon · Личное сообщение · #6
Вообще самоудаление в NT based виндах - дело помойму очень непростое. Есть вариант запускать экзешник недокументированными средствами из памяти, он будет отрубать хэндл себя открытого с диска и соответственно удалять. Но код там куда подлиннее будет
----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels | Сообщение посчитали полезным: |
Ранг: 2.0 (гость) Активность: 0=0 Статус: Участник
|
Создано: 08 февраля 2006 13:40 · Личное сообщение · #7
Maximus пишет:
Нашел следующий код
Delphi это ужас , вот на С++
hxxp://www.progz.ru/print.php?articles=3
Попытка избавиться от хендла \KernelObjects\CritSecOutOfMemoryEvent више чем на 2000 не получиться.
| Сообщение посчитали полезным: |
Ранг: 420.3 (мудрец) Активность: 0.24↘0 Статус: Участник
|
Создано: 08 февраля 2006 13:43 · Личное сообщение · #8
Maximus
Почитай www.delphikingdom.com/asp/answer.asp?IDAnswer=18216
А это немного другой принцип: в разделе uses объявляем модуль Registry:
uses Registry;
а нажатие кнопки обрабатываем следующим образом:
procedure TForm1.Button1Click(Sender: TObject);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
with reg do
begin
RootKey := HKEY_LOCAL_MACHINE;
LazyWrite := false;
OpenKey('Software\Microsoft\Windows\CurrentVersion\RunOnce', false);
WriteString('Delete Me!','command.com /c del FILENAME.EXT');
CloseKey;
free;
end;
end;
Всё дело в том, что параметры, заносимые в ключ HKEY_LOCAL_MACHINE\Software\Microsoft\ Windows\CurrentVersion\RunOnce удаляются после своего выполнения!
----- Сколько ни наталкивали на мысль – все равно сумел увернуться | Сообщение посчитали полезным: |
Ранг: 392.8 (мудрец), 108thx Активность: 0.26↘0.01 Статус: Участник REVENGE сила, БеХоЦе могила
|
Создано: 08 февраля 2006 13:47 · Личное сообщение · #9
Хе, ребза, я знаю что вы очень умные но все оказалось проще...
www.catch22.net/tuts/selfdel.asp
Тему закрываю
----- StarForce и Themida ацтой! | Сообщение посчитали полезным: |