![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
null56 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: нет Всего: 12 |
Всем привет
Возникла задача, чтобы по истечению работы приложения, удалялся бы исполняемый файл самого приложения. Как известно, операционка помечает файлы, которые используются в данный момент и стандартным способом не получится
Я порыл в интернете нашел 1,5 способа: 1) создание bat файла в процессе работы программы, который бы в бесконечном цикле пытался удалить нужный файл, а потом закрывался (или сам себя тоже удалял, я так и не понял) http://sources.ru/cpp/faqs/47.htm 2) Второй способ, который я нашел, связан с использованием функции
но я так и не понял, можно ли выполнить с помощью неё задуманное Вопрос: существует ли способ (алтернативный от создания вспомогательных файлов на жестком диске) удаления, в процессе выполнения, собственного исполняемого файла? если есть, подскажите пожалуйста Заранее благодарен всем откликнувшимся ЗЫ: вариант через временные файлы может решить мою проблему? |
||||
|
|||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
используй MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT и путем назначения NULL
это нормальная операция, когда удалить файл больше некому, не надо мусорить батниками -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: нет Всего: 12 |
Создание нового процесса не решит эту проблему?
1) Создаю новый процесс 2) Тут же завершаю текущий 3) Удаляю из нового процесса файл ... кажется вряд ли ( Добавлено через 46 секунд GremlinProg, да, я тоже к этому склоняюсь |
|||
|
||||
null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: нет Всего: 12 |
Немного не в ту степь....
Раз под вындой нет fork, то реально ли сэмитировать его собственноручно? В смысле: 1) Создать область памяти 2) Загрузить туда исполняемый код 3) Передать указатель на эту область 4) Завершить первоначальный процесс или пускай не через память, а через какие - нибудь "временные файлы", которые бы находились на на жестком диске, а в памяти, которые можно было бы заполнить и запустить, а позже они бы почистились? нет ли ничего подобного в винде? |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
null56, инжектом в другой процесс)
но вообще, наверное можно создать скрипт wsh (.vbs, .js) который сам себя удалит Добавлено через 3 минуты и 8 секунд вообще в идее с инжектом чтото есть. можно взять любой .exe, например notepad.exe, запустить его замороженным (SUSPENEDED) заменить в памяти код на нужный тебе, который в конце делает ExitProcess() тогда у этой запускаемой программы выполнение не дойдет даже до ее точки входа и загрузки ее длл, фактически от нее будет просто позаимствован файл. |
|||
|
||||
null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: нет Всего: 12 |
GoldFinch, а ты реализовывал подмену кода другого процесса? я нет. подсказать можешь куда смотреть?
|
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
Такая задача весьма нетривиальная и занимательная.
Здесь есть несколько нюансов - в дочерний процесс надо писать шеллкод, а С++ и шеллкоды - вещи малосовместимые, поэтому шеллкод проще написать на асме, благо он короткий. Само собой если писать 32-разрядный шеллкод, его надо внедрять в 32-разрядный процесс, для 64-разрядного- 64-разрядный процесс. Собственно вот код:
тестировал на 32рязрядной winXP, при этом заметил что если запускать калькулятор - шеллкод не срабатывает, и ollydbg почему-то не может приаттачиться к калькулятору (не видит его в списке процессов), а с блокнотом и другими программами все работает. Это сообщение отредактировал(а) GoldFinch - 28.1.2010, 21:23 |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
GoldFinch, ты это под каким антивирусом запускал?
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
GremlinProg, nod32
Вобщем-то если процесс создает дочерний процесс, то он имеет право делать с дочерним чтоугодно, так что антивирусы не должны этому мешать. Другое дело инжект уже в работающий процесс. |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
гениально! т.е. ты считаешь, что если ты запускаешь чужой софт из своего, значит антивирус считает тебя добропорядочным юзером и спокойно смотрит на твои в нем ковыряния? выбери более правдоподобный ответ вопрос был риторический, но скорее всего, теперь найдутся те, кто захочет это проверить null56, если еще не понятно, GoldFinch, тебе предлагает полагаться на то, что пользователь твоего софта ничего не знает об антивирусах (в принципе, большинство советов GoldFinch в этом разделе предполагают именно такой расклад), если это не так - сам делай выводы что использовать разумнее -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
Есть куча программ которые запускают другие программы, например TotalCommander, если ты не знал, программы можно запускать не только через ярлычок или через эксплорер. Антивирус (и фаервол) никуда не смотрит и ничего не считает, там есть проактивка которая перехватывает часть функций АПИ ОС, и проверяет опасность тех или иных действий. Например фаерфол может запрещать инжект в процесс который добавлен в настройки фаервола как приложение которому разрешено работать с сетью. Но он не будет запрещать любой инжект как таковой, т.к. это вполне легальное действие. "антивирус считает тебя добропорядочным юзером и спокойно смотрит на твои в нем ковыряния" при чем тут юзер? в чем ковыряния? в антивирусе? пиши грамотно, по русски, а то я ничего не понимаю. Это сообщение отредактировал(а) GoldFinch - 29.1.2010, 11:16 |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
не надо путать редьку с хреном ![]()
на счет его легальности мы уже давно все выяснили, "НЕ ЛЕГАЛЬНО", безтолку не спорь, все доказано документально а вот на счет "не будет запрещать любой инжект", ну давай, пускай на тройке более-менее популярных антивирусов свой инжект в калькулятор, нодпад и т.п. софт )) кто первый пропустит? только вот если хоть один не пропустит, любой дальнейший выпад на эту тему будешь обсуждать с остальными, кто не осилил почитать учебник по информатике -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
||||
|
||||
null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: нет Всего: 12 |
не ссортесь, ребята...
на счет легитимности способа GoldFinch я сам особо не уверен надо проверять на различных антивирях и смотреть как они себя ведут. По своей сути я попросил GoldFinch показать мне метод инжекции, как его можно реализовать в винде, с другой стороны стоит палево со стороны антивирусов... сейчас стоит задача найти компромисс методами проверок... спасибо вам обоим за участие |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |