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

Вниз

Удаление программы самой из себя!   Найти похожие ветки 

 
Rauf   (2004-01-25 18:10) [0]

Попрошу не удалять этот пост.
И еще попрошу отнестись к этому очень серьозно. Особенно мастеров.
Плиз, еще раз напишите все ваши предложения на эту тему, любые, даже об абсурдности данной идеи. Только плиз по-серьознее!!!
Извините за беспокойство если что!!!


 
Sergey_Masloff   (2004-01-25 18:16) [1]

предлагаю тебе удалить твое сообщение само из себя ;-)
P.S. на эту тему писано-переписано 100 раз. Добавить нечего


 
Rauf   (2004-01-25 18:21) [2]

В том то и дело, что есть что!!!
Я не зря вас попросил еще раз высказаться!!!


 
Anatoly Podgoretsky   (2004-01-25 18:25) [3]

Так добавляй не стесняйся, не играй в загадки.


 
Sergey_Masloff   (2004-01-25 18:30) [4]

Что тебе конкретно нужно?


 
Rauf   (2004-01-25 18:32) [5]

Есть идейка и даже реализованная, просто было интересно упоменал ли о ней кто-нибудь вообще?


 
Sergey_Masloff   (2004-01-25 18:33) [6]

оно?

program SelfDelete;
{$APPTYPE CONSOLE}
uses SysUtils, Windows;

procedure DeleteSelf;
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;

begin
DeleteSelf();
end.


 
Rauf   (2004-01-25 18:35) [7]

А ты сам пробовал?


 
Sergey_Masloff   (2004-01-25 18:40) [8]

да


 
Rauf   (2004-01-25 18:44) [9]

и что получилось?


 
Sergey_Masloff   (2004-01-25 18:52) [10]

начинаешь утомлять. Да получилось. Как-то не имею привычки хранить неработающие примеры.


 
Anatoly Podgoretsky   (2004-01-25 19:03) [11]

Не работающий ладно, но и чрезвычайно опасный.


 
Sergey_Masloff   (2004-01-25 19:10) [12]

Anatoly Podgoretsky © (25.01.04 19:03) [11]
>но и чрезвычайно опасный...
да, я бы и не приводил но он в гугле первой же ссылкой так что моя совесть чиста...
>Не работающий ладно,
работает же... я проверял правда давно это было.


 
Rauf   (2004-01-25 19:17) [13]

На "C" этот код не пашет

Вот смотрите

#include <windows.h>

void main()
{
HMODULE module = GetModuleHandle( NULL );
char buf[ 256 ];
GetModuleFileName( module, buf, sizeof( buf ) );
CloseHandle( (HANDLE)4 );
ULONG p = (ULONG)module + 1;
HMODULE hDll = GetModuleHandle( "kernel32.dll" );
void *pExitProcess = GetProcAddress( hDll, "ExitProcess" ),
*pDeleteFile = GetProcAddress( hDll, "DeleteFileA" ),
*pFreeLibrary = GetProcAddress( hDll, "FreeLibrary" );
__asm
{
lea eax, buf
push 0
push 0
push eax
push pExitProcess
push p
push pDeleteFile
push pFreeLibrary
ret
}
}

Как же ты его проверял!!!???
И че то смысла кода не пойму.


 
Rauf   (2004-01-25 19:19) [14]

Может хоть ради приличия заменил бы некоторые push"ы на call"ы???


 
Rauf   (2004-01-25 19:22) [15]

Кстати вот ссылка на мою прогу
www.iry.narod.ru/selfdelete.exe
Чтобы прога удалялась надо щелкнуть левой кнопкой по клиентской области. Извините за интерфейс, не до этого было!!!

Прога написана на MSVC7.1


 
Anatoly Podgoretsky   (2004-01-25 19:23) [16]

Sergey_Masloff (25.01.04 19:10) [12]
Работоспособность зависит от многих условий, опасность состоит в том, что это хакерский трюк, и в зависимости от тех же условий последствия могут быть разные. От нормальной работы до порчи.
В свое время проверял на Win95 Osr2 там не работало.


 
Sergey_Masloff   (2004-01-25 19:37) [17]

Anatoly Podgoretsky © (25.01.04 19:23) [16]
>Работоспособность зависит от многих условий, опасность состоит >в том, что это хакерский трюк, и в зависимости от тех же >условий последствия могут быть разные
абсолютно согласен. В рабочем проекте такой код не применил бы ни за что... Да и вообще в свое время только с целью посмотреть скачал исходник. Сейчас специально перезагружался чтобы компильнуть. Win2000 - работает, WinXP - тоже работает.


 
Sergey_Masloff   (2004-01-25 19:39) [18]

Rauf © (25.01.04 19:17) [13]
у тебя операционка какая? Все и на C работает MSVC 6 sp 4


 
Ihor Osov'yak   (2004-01-25 19:49) [19]

Да нет, уж больно недокументировано.. Начиная от того, что и в каком порядке в таблице хендлеров лежит. Кончая такими дебрями, в которые .. Даже не знаю как сказать..
Следствие - сильно чувствительное к версии операционки. Там работает, там нет... Хотя решение оригинальное..
Но как Джо. Который неуловимый..


 
Rauf   (2004-01-25 19:51) [20]

XP у меня, создал проект на MSVC7.1, что под MSVS 2003. Не пашет!


 
Rauf   (2004-01-25 19:53) [21]

Sergey_Masloff
А можно вообще узнать на каком принципе основан код?


 
Sergey_Masloff   (2004-01-25 19:54) [22]

Ihor Osov"yak © (25.01.04 19:49) [19]
вобщем, судя по дате когда у меня это появилось - это на WinNT4 работало. Про 2000 и XP я сказал. Но ты прав насчет неуловимого Д. так как я не понимаю на фига вообще это нужно. А так способов напридумывали судя по ссылкам в гугле - полно...


 
xxxx   (2004-01-25 20:06) [23]

Удалено модератором
Примечание: Offtopic


 
Sergey_Masloff   (2004-01-25 20:48) [24]

Rauf © (25.01.04 19:19) [14]
>ради приличия заменил бы некоторые push"ы на call"ы???
см. ret


 
xxxx   (2004-01-25 20:56) [25]

Удалено модератором
Примечание: Отжохни три дня


 
xxxx   (2004-01-25 20:57) [26]

Удалено модератором


 
xxxx   (2004-01-25 20:59) [27]

Удалено модератором
Примечание: Вот и подумай у кого мозгов меньше.


 
Rauf   (2004-01-25 21:40) [28]

Извиняюсь, если покажусь ламером, но
что делает CloseHandle( THandle( 4 ) );
и что означает ассемблерный код!!!
Конкретно к чему приводит набор push"ей и ret???

Если не трудно конечно.
Заранее спасибо.


 
Sergey_Masloff   (2004-01-25 22:42) [29]

это надо б у автора спросить (про 4)
про ассемблерный могу кое-что сказать но завтра - поздно уже...


 
Rauf   (2004-01-26 13:17) [30]

Нучто
Sergey_Masloff,
давай ты обещал!!!
А то ветка сбежит!!!


 
Юрий Зотов   (2004-01-26 13:35) [31]

Если программа легальная (т.е., не вирус, не троян и т. п.), то и удалять себя она должна легальными средствами. То есть:
1. Под NT - вызвать MoveFileEx c MOVEFILE_DELAY_UNTIL_REBOOT, а под 9x - прописать строку в секцию Rename файла WinInit.ini.
2. Предложить юзеру перезагрузить систему прямо сейчас.
3. Если юзер ответил "Да", то перезагрузить ее

А если программа нелегальная (т.е., вирус, троян и т. п.) - то и нехрен писать такие программы.


 
NeyroSpace   (2004-01-26 13:38) [32]

Берешь пишешь на API мал. прогу-камикадзе 8Кб запихиваешь ее в ЕХЕ. Когда нужно рожаешь ее на свет божий, она все убивает и сама умирает.


 
Юрий Зотов   (2004-01-26 13:47) [33]

> NeyroSpace © (26.01.04 13:38) [32]
> ...и сама умирает.

И возникает сказка про белого бычка - каким же образом эта прога сможет убить саму себя?


 
NeyroSpace   (2004-01-26 13:51) [34]

енто точно... поторопился...
над модулем камикадзе еще предстоит подумать :-)


 
Vint   (2004-01-26 13:59) [35]

NeyroSpace © (26.01.04 13:51) [34]

да нет, почему? нормальная идея пишешь ее например в конец диска перед выходом из своей проги запускаешь, она удаляет твою прогу, а сама уберется когда сделаешь скандиск ;)
еще можно поравить таблицу размещения файлов, а можно создать виртуальный диск, а на него выделить и запустить твою прогу удаляющую основную программу...
еще есть способ с бат файлом


 
Ihor Osov'yak   (2004-01-26 14:10) [36]

Говорили же, о юзании недокументированных вещей. Это относится в первую очередь к 4. Структуру таблицы хендлов, вернее, что стоит за хендлами - MS не очень документирует. Немного есть в Соломона с Руссиновичем, немного в Шрайберга, тот же Рихтер немного говорит, когда рассматривает наследование хендлов.. У автора наверно хватило терпения очень глубоко софтайсой поковыряться..
А суть решения, как я представляю себе, примерно такова. Файл exe проецируется (мапируется, отображается) на адресное пространство процесса, и это главная причина, почему exe нельзя уничтожить при работающем процессе. При окончании процесса этот маппинг системой уничтожатся, и файл exe становится доступным для уничтожения.
При самоубиении exe процесса нужно систему заставить "закрыть" мапирование еще в тот момент, когда поток процесса продолжает работать - чтобы были шансы на удаления файла после "размапирования".. Собственно - те странные push перед ret - хитрый способ вызова функций на удаление.
Что там делает "размапирование" - не знаю, вероятнее всего - закрытие хендла 4, так как ExitProcess будет вызываться после DeleteFile..

Почему идет столь оригинальный вызов функций апи? Не знаю, может дань хакерским привычкам, может экономия байтов кода, может веские причины..
Одним словом - человек, наверное, с софтайсом или kd очень много времени провел. И чтобы до конца понять, как это работает - тоже нужно много времени с отладчиком провести. Вероятнее всего, в режиме ядра.
Понятно, все написанное выше - имхо, и не исключено - далеко от истины.


 
Ihor Osov'yak   (2004-01-26 14:13) [37]

2 [31] Юрий Зотов © (26.01.04 13:35)

Все верно. Здесь чисто академический интерес. Во всяком случае у меня, лумаю у Sergey_Masloff. Относительно Rauf - нужно спрашивать у него.
Если интерес не академический - читать [31]


 
Rauf   (2004-01-26 14:37) [38]

На счет написания такой никому не нужной проги, я согласен, но тогда можно исключить и пару сотен никому не нужных обучающих программ, так как мне кажется при написании таких прог и при просматривании таких дискуссий можно узнать много много интересного.
Во вторых, я проверил код Sergey_Masloff"а
на Delphi7 и на VC++7.1 - не пашет. У кого нибудь вообще пашет???
Код проверялся на Windows XP.
Если у кого пашет, опишите на чем компилировали и в какой ОС???


 
DiamondShark   (2004-01-26 15:17) [39]


> Если у кого пашет, опишите на чем компилировали и в какой
> ОС???

Copy-paste из Sergey_Masloff (25.01.04 18:33) [6].
D5.0 build 5.62
W2k build 2195 SP3
Работает.
Только надо не из под среды запускать :-)


 
Anatoly Podgoretsky   (2004-01-26 15:21) [40]

DiamondShark © (26.01.04 15:17) [39]
А чего так, не работает :-)



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

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

Наверх





Память: 0.54 MB
Время: 0.011 c
1-38911
Piter
2004-02-04 00:42
2004.02.13
Возврат результата


14-39039
Романов Р.В.
2004-01-13 09:32
2004.02.13
Товарищи, используйте евроразетки для подключения ПК!


1-38797
uu
2004-02-03 12:40
2004.02.13
Разряд


1-38853
kex86
2004-02-02 12:51
2004.02.13
Почему не проходит блок


3-38733
Санек
2004-01-24 19:13
2004.02.13
Таблица с вычисляемыми вертикальными полями ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский