![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| TheDestroyer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Здравствуйте
Возник такой вопрос: как записать поседовательность байт в указанное место в самом исполняемом файле? Т.е. чтобы exe-шник писал сам в себя. Есть примерчик:
Но это патч не самого "себя", а бинарного файла отличного от запущенного exe-шника. А как изменить код самого запущенного файла? |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
операционная система какая? В *n?x можно просто так и писать в себя, в windows система блокирует файл во время работы и это сделать не удасться (кроме как скопировать патчер, запустить его, самим выйти, и после патча пусть патчер запускает новый экземпляр того что падчит).
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| TheDestroyer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Операционка - windows. Похоже неправильно выразился. Имеется ввиду писать не в сам фаил, а в загруженный исполняемый фаил в память.Видимо надо копать в сторону WriteProcessMemory.
|
|||
|
||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 2 Всего: 6 |
А может в сторону asm? -------------------- |
|||
|
||||
| TheDestroyer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Да, про асм подумал в первую очередь, но к сожалению не знаю как на нем это реализовать. Если кто приведет пример, буду благодарен. И интересно как лучше/удобнее реализовать данную задачу (асм или Си++)?
|
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Типичное поведение для вирусов. -------------------- вопросов больше чем ответов |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
TheDestroyer, если надо патчить себя в памяти, то это делается обычным присваиванием
*ptr=value; или memcpy() процесс может патчить сам себя как хочет. единственный нюанс что часть памяти может быть защищена от записи, это снимается через VirtualProtectEx при этом на диск ничего не сохранится ------- WriteProcessMemory нужна чтобы патчить в памяти другой процесс, при этом на диск тоже ничего не сохранится --------- процесс - это .exe + все .dll Добавлено через 56 секунд Леопольд, ты не знаешь что такое "вирус". |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Как ты догадался? -------------------- вопросов больше чем ответов |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
Как раз сейчас есть подобная задача. Думал что это невозможно. Спасибо! -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
интересно, а вариант создавать и подключать динамичсеки dll не лучше ли этих извращений?
|
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Alek86, в большинстве случаев - нет
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
ни разу такого не нужно было потому просто интересно - почему не лучше? из-за скорости? Это сообщение отредактировал(а) Alek86 - 27.7.2009, 12:46 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
ни разу небыло нужно - значит ты вообще не занимался этой темой? это либо называется "расширение функциональности программ" - когда код .exe или .длл перехватывается в нескольких местах и управление передается на код расширяющий функциональность проги (он может быть в длл) либо это самомодифицирующийся\самонастраивающийся код - когда код твоей проги патчит сам себя в обоих случаях надо както патчить имеющийся в памяти код (можно иногда патчить значения указателей в данных) для самомодифицируюегося кода, записывать чтото в длл на диск, потом грузить эту длл с диска - это очень странное решение. оно говорит о том, что либо человек не понимает как работает ОС, и как чтото патчить в памяти либо это подходит для задач когда модифицировать код надо редко, может всего 1 раз. однако для таких задач всеравно все формируется в памяти используя FileMapping и затем сбрасывается на диск. Но при этом происходит столько лишних телодвижений, что это очень и очень сомнительно так что не лучше - потому что непонятно ЗАЧЕМ |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
именно думаю, мало кто таким вообще занимается (кроме вирусов, канешн
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |