![]() |
Модераторы: 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 |
Обїясните, пожалуйста, что значит
"зашедулить " -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
"Зашедулить" от слова schedule - назначить задание, вроде это можно во всех виндах...
Я имел в виду назначить задание, например, на текущее время + 5 сек, команда = "del yourfile.exe" -------------------- С уважением, г-н Посол. |
|||
|
||||
HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Всем привет
#include "registry.hpp" TRegistry *Reg = new TRegistry; Reg->RootKey = HKEY_LOCAL_MACHINE; Reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce",true); Reg->WriteString("Delete Me!",String("command.com /c del \"")+Application->ExeName+String("\"")); Reg->CloseKey(); delete Reg; Это насчет "где то в реестре" ![]() После перезагрузки винды не будет не екзешника ни записи в реестре ![]() --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Зато до перезагрузки любой мало-мальски знакомый с реестром чел может "запасти" такой ключ. Нет уж, легче сделать "deleter.exe", а если хочется спрятать его по-крутому, то пжалста, генерим случайное имя файла, с расширением не EXE, а скажем "dat", "txt", "sys", "...", прячем в WINDOWS/SYSTEM (или SYSTEM32, DRIVERS, INF, HELP, Temporary Internet Files в конце концов
![]() -------------------- ![]() |
|||
|
||||
HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Я вообщето не для того что бы что то прятать предложил, а для легального самоудаления
![]() Но уж если тебе действительно хочется замести следы то можно использовать мой способ для того что бы "deleter.exe" мог самоуничтожится ... и даже если его теперь можно обнаружить через реестр то толку то... он свое черное дело уже сделал ... ![]() --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: нет Всего: 25 |
Вот ещё вариант, правда не самоудаляющийся: если на компе стоят несколько твоих программ, то один, анинстал может их все( или определённые) удалять.
-------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
Я как раз над uninstall'ом задумывался. Или ему подобным.
Спасибо всем! Буду разбираться. -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
Спасибо, господа, вы мне очень помогли. Однако код, который привела Nastya, не работал. Дело в том, что CreateFile создает не текстовый, а бинарный файл. Поэтому для перевода строки там надо ставить не \n, а \r\n. Или писать через FILE*, fopen(..., "w"), fprintf, fclose...
-------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Peter, а чем тебе мой пример самоудаления не понравился?
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
Толстый больно ![]() У Nastya гораздо короче. -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Peter, зато у меня без всяких временных файлов.
![]() -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Peter, и без возможных багов с батниками (например, запуская батник мы видим чёрное окно, которое ещё к тому-же и не всегда закрывается при окончании работы батника), а еще не факт что батник удалится, да и наконец: если батник начал работать, а EXE'шник по каким-то своим причинам еще не закончил (ну не может окно закрыть до сих пор из-за пользователя, или там файл сохраняет при закрытии, а файл на 3 метра) --- то батник не удалит EXE'шник, т.к. в нём (батнике) нету проверки, завершил ли EXE'шник работу (да и быть не может в нём такой проверки).
Понял теперь, в какой косяк ты попал : ![]() А пример от Baa, хоть и кажется тебе чересчур сложным, на самом деле всё это уже учитывает ![]() ![]() Это сообщение отредактировал(а) mr.DUDA - 8.9.2003, 19:50 -------------------- ![]() |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Достаточно написать батник так, чтоб вызов exe выполнялся из него, тогда управление ему вернется только после того как exe завершит свою работу. |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Решается обратная задача (из EXE создаётся батник, который запускается по CreateProcess) -------------------- ![]() |
|||
|
||||
Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
Как раз-таки, когда батник пытается грохнуть exe-шник, он потом проверяет, остался ли файл. Пока exe-шник не кончит работать, доступ к нему операционка не даст. Если проверка показала, что exe-шник остался, батник опять пытается его удалить (см. текст самого батника) - и так до победного конца. -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
Unregistered |
|
|||
Unregistered |
"зашедулить" - это дать планировщику задание
![]() |
|||
|
||||
Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
Та самоудаляющаяся программа (с батником) имеет недостатки: не воспринимает русские буквы, поскольку батник не понимает виндоусовскую кодировку. Ну, не вставлять же самому перекодировщик!
-------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 2 Всего: 6 |
Ребята, а все-таки можно так сделать ![]() -------------------- |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 2 Всего: 6 |
А если не секрет, то как ![]() -------------------- |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
в секцию RunOnce напиши del "путь к удаляемому файлу"
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 3 Всего: 106 |
Тема сильно избита.
Так намного проще, оказывается -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Gordon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 2 Всего: 6 |
Пишу:
Удаляется только ключ в реестре, может я что-то не так делаю ![]() GremlinProg,
а как этим пользоваться ![]() -------------------- |
||||
|
|||||
SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 15 Всего: 124 |
MoveFileEx
If the dwFlags parameter specifies MOVEFILE_DELAY_UNTIL_REBOOT, MoveFileEx fails if it cannot access the registry. The function stores the locations of the files to be renamed at restart in the following registry value: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations This registry value is of type REG_MULTI_SZ. Each rename operation stores one of the following NULL-terminated strings, depending on whether the rename is a delete or not: szDstFile\0\0 or szSrcFile\0szDstFile\0 The string "szDstFile\0\0" indicates that the file "szDstFile" is to be deleted on reboot. The string "szSrcFile\0szDstFile\0" indicates that "szSrcFile" is to be renamed "szDstFile" on reboot. Note Although "\0\0" is technically not allowed in a REG_MULTI_SZ node, it can because the file is considered to be renamed to a null name. The system uses these registry entries to complete the operations at restart in the same order that they were issued. For example, the following code fragment creates registry entries that delete szDstFile and rename szSrcFile to be szDstFile at restart: [C++] MoveFileEx(szDstFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT); MoveFileEx(szSrcFile, szDstFile, MOVEFILE_DELAY_UNTIL_REBOOT); Because the actual move and deletion operations specified with the MOVEFILE_DELAY_UNTIL_REBOOT flag take place after the calling application has ceased running, the return value cannot reflect success or failure in moving or deleting the file. Rather, it reflects success or failure in placing the appropriate entries into the registry. The system deletes a directory that is tagged for deletion with the MOVEFILE_DELAY_UNTIL_REBOOT flag only if it is empty. To ensure deletion of directories, move or delete all files from the directory before attempting to delete it. Files may be in the directory at boot time, but they must be deleted or moved before the system can delete the directory. The move and deletion operations are carried out at boot time in the same order that they are specified in the calling application. To delete a directory that has files in it at boot time, first delete the files. |
|||
|
||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 2 Всего: 6 |
Попробую разобраться...
P.S. Жалко я с английским не на "Ты" ![]() -------------------- |
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
под unix-ом удалить исполняемый файл просто
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 2 Всего: 6 |
Хотелось бы и под виндой удалить...
-------------------- |
|||
|
||||
BreakPoint |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 25.3.2010 Репутация: нет Всего: нет |
Если кому еще надо, есть статья в которой рассмотрены методы самоудаления исполняемых файлов под Vista и Windows 7:
Самоудаление исполняемых файлов Примеры правда на Delphi, но описано все подробно, можно на чем угодно переписать. Это сообщение отредактировал(а) BreakPoint - 31.3.2010, 13:42 |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
BreakPoint,
в 6-м методе используется GetProcAddress чтобы получить адреса в другом процессе, это не работает под Vista и Windows 7. |
|||
|
||||
BreakPoint |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 25.3.2010 Репутация: нет Всего: нет |
Код тестировался на Vista и Win7x64 все работает нормально. GetProcAddress получает адресс в своем просессе, а не в другом. Поскольку стандартные библиотеки загружаются по одним и темже базовым адресам (как правило), то все работает нормально. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |