Здравствуй DDG.
DDG>Здравствуйте, господа! Помогите разобраться. Каким способом можно записать кое какие данные в свой же exe-ник?
Я так полагаю, что тебе нужно записать в EXE, который на данный момент исполняется системой, т.е. является "открытым системой" ( потому что иначе — какие проблемы-то ? ). Следовательно, основная проблема — сделать исполняющийся EXE доступным на запись ( т.е. открыть его с доступом "GENERIC_WRITE" ). Естесственно,
вызов обычного CreateFileA/_lopen Windows жестоко обломает. Поэтому стандартные
методы тут не прокатят. Впрочем, под Win 9X есть такие штучки, как VxD, которые
работают в Ring 0 и которым в принципе дозволено практически все. Так что один из
вариантов — загрузить свой VxD и натравить его на свой же Exe-шник ( если не хочешь писать VxD, можешь сам перейти в Ring 0 и уже там сделать все, что надо
при помощи IFSMGR API ). Все прекрасно будет работать, но... с одной лишь оговоркой — данный метод не применим под Win NT/2K ( по причине отсутствия там
VxD ). В этом случае могу посоветовать только слегка поизвращаться — скажем,
из своего Exe-шника запустить еще какой-нибудь, при этом самому закрыться, далее второй Exe-шник ( уже без проблем ! ) пишет в твой и запускает тебя вновь, при этом сам закрывается... Извратно, но работать будет ( и, кстати, под любой Windows )
Здравствуйте DDG, Вы писали:
DDG>Здравствуйте, господа! Помогите разобраться. Каким способом можно записать кое какие данные в свой же exe-ник? DDG> :???:
Сначала перемещаешь себя куда-нибудь в TEMP (заодно переименовывая в yhrb766.tmp), далее копируешь себя по старому имени, теперь исправляешь, что надо. При следующем старте не забудь удалить старую копию (а можно вписать куда-то в реестр и винда сама удалит при загрузке)
Здравствуйте Dmitriy_Apraksin, Вы писали:
DA> Я так полагаю, что тебе нужно записать в EXE, который на данный момент исполняется системой, т.е. является "открытым системой" ( потому что иначе — какие проблемы-то ? ). Следовательно, основная проблема — сделать исполняющийся EXE доступным на запись ( т.е. открыть его с доступом "GENERIC_WRITE" ). DA> В этом случае могу посоветовать только слегка поизвращаться — скажем, DA>из своего Exe-шника запустить еще какой-нибудь, при этом самому закрыться, далее второй Exe-шник ( уже без проблем ! ) пишет в твой и запускает тебя вновь, при этом сам закрывается... Извратно, но работать будет ( и, кстати, под любой Windows )
DA> Dmitriy Apraksin
Единственная проблема. Как сделать так, чтобы этот какой-нибудь Exe-шник исчез с HDD после манипуляций с моим основным Exe-шником.
Здравствуйте DDG, Вы писали:
DDG>Единственная проблема. Как сделать так, чтобы этот какой-нибудь Exe-шник исчез с HDD после манипуляций с моим основным Exe-шником.
Если пойдет то можно удалить его во время старта с помошью MoveFileEx с ключом DELAY_UNTIL_REBOOT. Но это только для NT линейки.
Другой вариант почти был написан "пишет в твой и запускает тебя вновь" Что теперь мешает удалить какой-нибудь из твоего?
Либо помутить чего-нибудь с .bat файлами — они себя удаляют без проблем.
adb>Другой вариант почти был написан "пишет в твой и запускает тебя вновь" Что теперь мешает удалить какой-нибудь из твоего?
Дело в том, что себя мне потом запускать не надо.
Но проблема уже решена. Перед созданием процесса, который будет меня модифицировать, я открываю этот файл без права чтения и записи с флагом FILE_FLAG_DELETE_ON_CLOSE, а после создания процесса закрываю этот файл. Этот процесс начинает действовать после завершиния моего процесса, а его файл уничтожает система после его освобождения.
adb>Либо помутить чего-нибудь с .bat файлами — они себя удаляют без проблем.
Некрасиво.
Здравствуйте DDG, Вы писали:
DDG>Здравствуйте, господа! Помогите разобраться. Каким способом можно записать кое какие данные в свой же exe-ник? DDG>
Вот посмотри сдесь, что-то подобное уже обсуждалось. Запись в загруженный ЕХЕ-файл под NT