![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
Пишу:
Компилю под DOS, запускаю - программа самоудаляется. Компилю под Windows, запускаю - доступ к exe-шнику запрещен. Что делать? -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Был уже такой топик, посвященный правда самомодификации EXE, но из той-же оперы. Вкратце -- нельзя ничего записать в исполняющийся EXE (так же как и удалить его). Для такой цели можно запихнуть в ресурсы EXE другую EXE (назовем ее "deleter.exe") в виде бинарного потока, затем при запуске "главной" (удаляемой) EXE'шки, вытянуть "deleter.exe" из ресурсов и сохранить куда-нибудь (например, в TEMP), запустить процесс "deleter.exe" и сразу же выйти из главной EXE. В свою очередь, прога "deleter.exe" дожидается завершения главной EXE (это можно сделать ч/з OpenProcess и WaitForSingleObject, можно просто сделать Sleep(5000), а можно и в цикле пытаться открыть файл EXE'шки на запись), и когда она точно завершила работу - убить файл ч/з DeleteFile.
-------------------- ![]() |
|||
|
||||
Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: нет Всего: 25 |
Если не ошибаюсь, то факе есть.
З.Ы. Это не Ц++, но можно создать батничек. -------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
Ars |
|
|||
Unregistered |
mr.DUDA
А кто же удалит deleter.exe? |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
А зачем его удалять
![]() В нём же нету никакой полезной инфы - пускай себе болтается ![]() ![]() ![]() ![]() ![]() ![]() -------------------- ![]() |
|||
|
||||
Unregistered |
|
|||
Unregistered |
1. Самоудаляющийся бат-файл.
2. Создание временного файла через CreateFile с флагом FILE_FLAG_DELETE_ON_CLOSE. Похож на предыдущий способ. |
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
На codenet нашла такой пример, не проверяла и не разбиралась, но может пригодится
Q> Как стереть самого себя? A> Эта программа уничтожает саму себя. #include <windows.h> #include <stdio.h> void DelSelf(void) { char modulename[MAX_PATH]; char batfile[MAX_PATH]; char batlines[MAX_PATH*4]; LPSTR tempdir; char Buf[MAX_PATH]; GetModuleFileName(NULL,modulename,MAX_PATH); tempdir = ((GetEnvironmentVariable(TEXT("TEMP"), Buf, MAX_PATH) > 0) ? Buf : NULL); strcpy(batfile,tempdir); strcat(batfile,"\\"); strcat(batfile,"delself.bat"); strcpy(batlines,"@echo off\n:try\ndel "); strcat(batlines,modulename); strcat(batlines,"\nif exist "); strcat(batlines,modulename); strcat(batlines," goto try\n"); strcat(batlines,"del "); strcat(batlines,batfile); DWORD NOfBytes; HANDLE hbf= CreateFile(batfile, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(hbf,batlines,strlen(batlines),&NOfBytes, NULL); CloseHandle(hbf); STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); si.wShowWindow = SW_HIDE; si.dwFlags = STARTF_USESHOWWINDOW; CreateProcess( NULL, batfile, NULL, NULL, FALSE, IDLE_PRIORITY_CLASS|DETACHED_PROCESS, NULL, NULL, &si, &pi); } void main() { DelSelf(); } -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
Ars |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 28.8.2003 Где: Московская обл. Репутация: 2 Всего: 2 |
В exe-шнике полезная инфа - только для дизассемблирования, а если надо скрыть следы, то этот способ не катит... По-моему, можно где-то в реестре записать строковое значение с именем файла и файл удалится при перезапуске Винды Это сообщение отредактировал(а) Ars - 28.8.2003, 16:32 -------------------- Есть многое на свете, друг Горацио, С чем очень долго можно прое..! |
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
естественно можна сделать батник который уничтожит ехе и потом сам себя
но имхо ето не по програмерски ![]() нада сделать так: invoke CreateProcess,0,cline,0,0,0,NORMAL_PRIORITY_CLASS,0,0,sinfo,pinfo invoke ExitProcess,0 cline: db 'cmd ( а вот тут нада задержку сделать) del main.exe',0 вот а как задержку сделать сами думайте ![]() -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
Unregistered |
|
|||
Unregistered |
пусти прогу в резедент и от туда удали сам исполняемый файл.
|
|||
|
||||
oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
это как?
-------------------- SST 465555 icq 200-512-712 |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
еще один тупой вариант: зашедулить удаление...
а что, вариант с FILE_FLAG_DELETE_ON_CLOSE не работает ? -------------------- С уважением, г-н Посол. |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Получается, все кто под Unix'ами батники пишут - это не спецы? |
|||
|
||||
Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: нет Всего: 25 |
Где-то у меня инфа по удалению, была. Или на форуме, где-то, или у меня на дискетках, посмотрю, может и найду
![]() -------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
Обїясните, пожалуйста, что значит
"зашедулить " -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |