![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
CO4UHUTEJIb |
|
|||
O_o Профиль Группа: Участник Сообщений: 10 Регистрация: 18.5.2009 Репутация: нет Всего: нет |
Подскажите пожалуйста, можно ли средствами WinApi, создать такой бинарный файл, который бы при запуске мог поменять файл на диске из которого он запущен? И если можно подскажите пожалуйста как.
|
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
EXE в EXE ????
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
12usver12 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
нет нельзя и удалить также, переименовать/переместить можно
|
|||
|
||||
12usver12 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
если быть точнее то при создании процесса на основе файла происходит что-то похожее
что сводит на нет попытки "Изменение екзешником себя во время выполнения", полностью файл будет "отпущен" после закрытия своего процесса |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
DarthTon |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 7.2.2009 Репутация: 5 Всего: 6 |
Ну вообще есть один метод. Но он не очень безопасный и я бы не рекомендовал его использовать.
Идея заключается в прямой перезаписи байтов файла на диске. Для этого сначала необходимо получить битмап занятых кластеров файла с помощью FSCTL_GET_RETRIEVAL_POINTERS (Екзешник обычно имеет достаточно большой размер для того, что бы он не был размещен в самом MFT) и пересчитать офсет файла на томе в офсет на диске. Чтобы винда разрешила писать в область диска принадлежащую тому, необходимо сохранить и удалить MBR (0й сектор)(в случае с GPT немного по-другому) и вызвать IOCTL_DISK_UPDATE_PROPERTIES для диска. После этого можно, собственно, записать данные куда надо и после этого восстановить MBR. Однако после восстановления MBR нет гарантии того, что разделам будут присвоены те же буквы что были до удаления. Можно и без манипуляций с MBR, но тогда надо использовать драйвер. Это сообщение отредактировал(а) DarthTon - 3.2.2012, 13:43 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
CO4UHUTEJIb |
|
|||
O_o Профиль Группа: Участник Сообщений: 10 Регистрация: 18.5.2009 Репутация: нет Всего: нет |
Всем спасибо за помощь.
|
|||
|
||||
bass |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 5.8.2007 Репутация: 2 Всего: 2 |
Почему нельзя ....
1 вариант Это запустить наш ехе в памяти другого процесса... Ищи запуск ехе из памяти.... 2 вариант создать длл инжектить в другой процесс, совой завершить, выполнить что нужно из длл, запустить заново процесс.. ... 3 А вот с этим можно поэкспирементировать на длл точно получаеться.... UnmapViewOfFile Все про ХР |
|||
|
||||
500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 3 Всего: 14 |
наверно можно изменить оверлей, он не грузится сам в память
-------------------- |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |