| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Запись кода в исполняемый фаил |
| Автор: TheDestroyer 25.7.2009, 17:18 | ||
| Здравствуйте Возник такой вопрос: как записать поседовательность байт в указанное место в самом исполняемом файле? Т.е. чтобы exe-шник писал сам в себя. Есть примерчик:
Но это патч не самого "себя", а бинарного файла отличного от запущенного exe-шника. А как изменить код самого запущенного файла? |
| Автор: jonie 25.7.2009, 18:25 |
| операционная система какая? В *n?x можно просто так и писать в себя, в windows система блокирует файл во время работы и это сделать не удасться (кроме как скопировать патчер, запустить его, самим выйти, и после патча пусть патчер запускает новый экземпляр того что падчит). |
| Автор: TheDestroyer 25.7.2009, 20:04 |
| Операционка - windows. Похоже неправильно выразился. Имеется ввиду писать не в сам фаил, а в загруженный исполняемый фаил в память.Видимо надо копать в сторону WriteProcessMemory. |
| Автор: Gordon 25.7.2009, 20:32 |
А может в сторону asm? |
| Автор: TheDestroyer 25.7.2009, 20:37 |
| Да, про асм подумал в первую очередь, но к сожалению не знаю как на нем это реализовать. Если кто приведет пример, буду благодарен. И интересно как лучше/удобнее реализовать данную задачу (асм или Си++)? |
| Автор: Леопольд 25.7.2009, 21:07 | ||
Типичное поведение для вирусов. |
| Автор: GoldFinch 25.7.2009, 21:13 |
| TheDestroyer, если надо патчить себя в памяти, то это делается обычным присваиванием *ptr=value; или memcpy() процесс может патчить сам себя как хочет. единственный нюанс что часть памяти может быть защищена от записи, это снимается через VirtualProtectEx при этом на диск ничего не сохранится ------- WriteProcessMemory нужна чтобы патчить в памяти другой процесс, при этом на диск тоже ничего не сохранится --------- процесс - это .exe + все .dll Добавлено через 56 секунд Леопольд, ты не знаешь что такое "вирус". |
| Автор: Леопольд 26.7.2009, 13:54 | ||
Как ты догадался? |
| Автор: Alek86 27.7.2009, 12:12 |
| интересно, а вариант создавать и подключать динамичсеки dll не лучше ли этих извращений? |
| Автор: GoldFinch 27.7.2009, 12:44 |
| Alek86, в большинстве случаев - нет |
| Автор: Alek86 27.7.2009, 12:45 |
ни разу такого не нужно было потому просто интересно - почему не лучше? из-за скорости? |
| Автор: GoldFinch 27.7.2009, 17:54 |
ни разу небыло нужно - значит ты вообще не занимался этой темой? это либо называется "расширение функциональности программ" - когда код .exe или .длл перехватывается в нескольких местах и управление передается на код расширяющий функциональность проги (он может быть в длл) либо это самомодифицирующийся\самонастраивающийся код - когда код твоей проги патчит сам себя в обоих случаях надо както патчить имеющийся в памяти код (можно иногда патчить значения указателей в данных) для самомодифицируюегося кода, записывать чтото в длл на диск, потом грузить эту длл с диска - это очень странное решение. оно говорит о том, что либо человек не понимает как работает ОС, и как чтото патчить в памяти либо это подходит для задач когда модифицировать код надо редко, может всего 1 раз. однако для таких задач всеравно все формируется в памяти используя FileMapping и затем сбрасывается на диск. Но при этом происходит столько лишних телодвижений, что это очень и очень сомнительно так что не лучше - потому что непонятно ЗАЧЕМ |
| Автор: Alek86 28.7.2009, 22:25 | ||
именно думаю, мало кто таким вообще занимается (кроме вирусов, канешн
|