Сейчас на форуме: asfa, bartolomeo, hgdagon (+6 невидимых)

 eXeL@B —› Программирование —› Самоудаление Exe
Посл.ответ Сообщение


Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.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.230
Статус: Участник

Создано: 08 февраля 2006 12:35
· Личное сообщение · #2

помойму всесто THANDLE(4) надо hModule

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 08 февраля 2006 12:41
· Личное сообщение · #3

прикольно... млин а где то я читал, что это можно только с помощью bat
файла =\ на 98 всё куул работает .. гы
Smon пишет:
помойму всесто THANDLE(4) надо hModule

да скорее всего... просто опечатка? или типа "доделай сам"? =)

-----
[nice coder and reverser]





Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 08 февраля 2006 12:43
· Личное сообщение · #4

Smon неа... Процес закрывается на CloseHandle(hModule); и дальше не выполняется.

-----
StarForce и Themida ацтой!





Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 08 февраля 2006 12:44
· Личное сообщение · #5

Hellspawn на 2000 тоже работает и CloseHandle(THANDLE(4)) (типа вряд ли это опечатка), а на XP не пашет.

-----
StarForce и Themida ацтой!




Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 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.240
Статус: Участник

Создано: 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.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 08 февраля 2006 13:47
· Личное сообщение · #9

Хе, ребза, я знаю что вы очень умные но все оказалось проще...
www.catch22.net/tuts/selfdel.asp
Тему закрываю

-----
StarForce и Themida ацтой!



 eXeL@B —› Программирование —› Самоудаление Exe
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати