Как правильно записать в exe?
От: nen777w  
Дата: 04.11.08 16:13
Оценка:
Коллеги, кинте plz пару линков на статьи или поделитесь кусочком кода, отвечающим на вопрос, как правильно записать (разместить) в exe что то свое.
Например, Я хочу хранить в exe серийный номер, дабы не создавать на диске или в реестре файлов/записей.
Т.е. работает приложение. Открыли на запись этот же файл в бинарном режиме, сместились куда надо (нашли метку?) записали, закрыли файл, если что то нужно подкорректировать, подкорректировали.

06.11.08 14:36: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: Как правильно записать в exe?
От: remark Россия http://www.1024cores.net/
Дата: 04.11.08 16:38
Оценка: 2 (1)
Здравствуйте, nen777w, Вы писали:

N>Коллеги, кинте plz пару линков на статьи или поделитесь кусочком кода, отвечающим на вопрос, как правильно записать (разместить) в exe что то свое.

N>Например, Я хочу хранить в exe серийный номер, дабы не создавать на диске или в реестре файлов/записей.
N>Т.е. работает приложение. Открыли на запись этот же файл в бинарном режиме, сместились куда надо (нашли метку?) записали, закрыли файл, если что то нужно подкорректировать, подкорректировали.

Я думаю, что самое простое будет что-то типа такого.
Размещаешь в исполняемом файле свой буфер:
char placeholder_for_my_stuff [1024] = "nachalo_moego_bufera";

Дальше ищешь в исполняемом файле строчку "nachalo_moego_bufera" и после неё пишешь свои данные.

Только в выполняемый файл так просто писать не получится. Под юниксом надо вначале удалить выполняющийся файл, далее на его месте создать копию и в ней менять. В винде надо переименовать выполняющийся файл, далее на его месте создать копию и в ней менять.


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: Как правильно записать в exe?
От: _Ursus_  
Дата: 04.11.08 17:11
Оценка: 15 (1)
Здравствуйте, nen777w, Вы писали:

N>Коллеги, кинте plz пару линков на статьи или поделитесь кусочком кода, отвечающим на вопрос, как правильно записать (разместить) в exe что то свое.

N>Например, Я хочу хранить в exe серийный номер, дабы не создавать на диске или в реестре файлов/записей.
N>Т.е. работает приложение. Открыли на запись этот же файл в бинарном режиме, сместились куда надо (нашли метку?) записали, закрыли файл, если что то нужно подкорректировать, подкорректировали.

Серийник храним в виде ресурса типа RCDATA, обновляем его с помощью
BeginUpdateResource() -> UpdateResource() -> EndUpdateResource()
нет проблем
Re[2]: Как правильно записать в exe?
От: Sergey Chadov Россия  
Дата: 04.11.08 17:27
Оценка: +1
Здравствуйте, _Ursus_, Вы писали:


_U_>Серийник храним в виде ресурса типа RCDATA, обновляем его с помощью

_U_>BeginUpdateResource() -> UpdateResource() -> EndUpdateResource()
_U_>нет проблем

смущает вот это:

pFileName
[in] Pointer to a null-terminated string that specifies the executable file in which to update resources. An application must be able to obtain write access to this file; it cannot be currently executing.

--
Sergey Chadov

... << RSDN@Home 1.2.0 alpha rev. 685>>
Re: Как правильно записать в exe?
От: nen777w  
Дата: 05.11.08 13:59
Оценка:
Вопрос тогда в догонку.
Как я понял строки указанные явно, размещаются в специальной секции данных exe файла.
Два вопроса:
1) Есть ли способ гарантировано разместить строку (как метку) по заданому смещению.
2) Есть ли способ получить смещения по которым размещаются таблицы виртуальных функций (для конкретного класса)?

p.s.
Как наверно уже стало понятно, пишу защиту для Win32 приложения.
Re: Как правильно записать в exe?
От: MasterZiv СССР  
Дата: 05.11.08 17:33
Оценка:
nen777w пишет:

> Коллеги, кинте plz пару линков на статьи или поделитесь кусочком кода,

> отвечающим на вопрос, как правильно записать (разместить) в exe что то свое.
> Например, Я хочу хранить в exe серийный номер, дабы не создавать на
> диске или в реестре файлов/записей.
Прочитайте в MSDN про ресурсы. Пользовательские ресурсы.
Posted via RSDN NNTP Server 2.1 beta
Re: Как правильно записать в exe?
От: IID Россия  
Дата: 05.11.08 23:35
Оценка: +1
Здравствуйте, nen777w, Вы писали:

N> записать (разместить) в exe что то свое.

N>Например, Я хочу хранить в exe серийный номер, дабы не создавать на диске или в реестре файлов/записей.

Антивирусы, фаерволы и проактивные защиты будут очень недовольны Вирусы ведь тоже очень хотят храниться в EXE файлах.

P.S.: А потом шароварщики, юзающие такие горе-защиты, возмущаются, что их продукт начали детектировать как малварь.
kalsarikännit
Re: Как правильно записать в exe?
От: Rocky  
Дата: 06.11.08 07:02
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Коллеги, кинте plz пару линков на статьи или поделитесь кусочком кода, отвечающим на вопрос, как правильно записать (разместить) в exe что то свое.

N>Например, Я хочу хранить в exe серийный номер, дабы не создавать на диске или в реестре файлов/записей.
N>Т.е. работает приложение. Открыли на запись этот же файл в бинарном режиме, сместились куда надо (нашли метку?) записали, закрыли файл, если что то нужно подкорректировать, подкорректировали.

Имхо, это неправильно. Писать в свой же ехе не есть хорошо. Помимо того, что сказал IID по поводу антивирусов, добавлю:
1. тебе, по идее, не даст ОС записать в уже запушенный ехе, т.к. он будет защищен во время выполнения виндой;
2. лучше уж хранить в файле свои ключи.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Как правильно записать в exe?
От: nen777w  
Дата: 06.11.08 07:13
Оценка:
R>Имхо, это неправильно. Писать в свой же ехе не есть хорошо. Помимо того, что сказал IID по поводу антивирусов, добавлю:
R>1. тебе, по идее, не даст ОС записать в уже запушенный ехе, т.к. он будет защищен во время выполнения виндой;

Серьезно? А вы попробуйте
Есть даже утилита для тяжёлых случаев Unlocker называется.

R>2. лучше уж хранить в файле свои ключи.


Можно и так, но при переносе exe на другую машину он чист, а не хотелось бы. Раз патчили, значит левак.

Я по сути, буду генерировать ключ по ключу + привзяка к винту (винт есть носитель инофрмации), результат писать в файл.
Даже если пропатченный файл перенесли, он уже не будет запускаться на другой машине.
+ небольшие мутки с таблицами виртуальных функций.

Единственное что смущает что по этому поводу подумает антивирь.
Re[3]: Как правильно записать в exe?
От: Rocky  
Дата: 06.11.08 07:46
Оценка:
Здравствуйте, nen777w, Вы писали:

R>>1. тебе, по идее, не даст ОС записать в уже запушенный ехе, т.к. он будет защищен во время выполнения виндой;


N>Серьезно? А вы попробуйте

N>Есть даже утилита для тяжёлых случаев Unlocker называется.

Попробовал. Получил ERROR_SHARING_VIOLATION.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Как правильно записать в exe?
От: IID Россия  
Дата: 06.11.08 10:03
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Есть даже утилита для тяжёлых случаев Unlocker называется.


С очень хорошей долей вероятности может свалить систему в BSOD. Вероятность зависит от сторонних фильтров ФС, понатыканных сторонним софтом.

N>Можно и так, но при переносе exe на другую машину он чист, а не хотелось бы. Раз патчили, значит левак.

А как вы определите, патчили файл или нет ? (hint: любая ваша проверка внутри EXE точно так же пропатчивается). Security by obscurity короче.
Правильный способ убедиться в неизменности PE — цифровая подпись. Конечно, проверяющий код не должен быть скомпрометирован.

N>Я по сути, буду генерировать ключ по ключу + привзяка к винту (винт есть носитель инофрмации), результат писать в файл.

в файл, но не в EXE(!)

N>Даже если пропатченный файл перенесли, он уже не будет запускаться на другой машине.

Будет (см. выше о security)

N>+ небольшие мутки с таблицами виртуальных функций.

Всё что угодно, но только на этапе "навешивания" защиты, а не пересборка бинаря on the fly.

N>Единственное что смущает что по этому поводу подумает антивирь.

Антивирь совершенно справедливо надаёт линейкой по рукам. Больно. И отправит читать Шнайера.
kalsarikännit
Re[4]: Как правильно записать в exe?
От: nen777w  
Дата: 06.11.08 15:59
Оценка:
R>>>1. тебе, по идее, не даст ОС записать в уже запушенный ехе, т.к. он будет защищен во время выполнения виндой;

N>>Серьезно? А вы попробуйте

N>>Есть даже утилита для тяжёлых случаев Unlocker называется.

R>Попробовал. Получил ERROR_SHARING_VIOLATION.


Хех... Ну а если подумать?

1) Запускается файл exe, выползает диалог: введи брат ключ.
2) Брат вводит ключ
3) Создаем каталог tmp
4) Переносим!!! своё exe туда
5) Копируем своё exe оттуда на старое место

винда сейчас лочит от записи перенесённый exe в каталоге!

6) Открываем файл который мы вернули в зад на запись.
7) Патчим, антивирусняки совершенно не напрягаются по этому поводу т.к. этот скопированный назад exe не является запущенным
8) Создаем батник (или другим способом)
9) Говорим юзверю: брат спасибо за ключ щас надо перезапустицо.
10) Имеем результат. Файл пропатчен, антивирусняки спят спокойно.
Re[5]: Как правильно записать в exe?
От: nen777w  
Дата: 06.11.08 16:01
Оценка:
Здравствуйте, nen777w, Вы писали:

R>>>>1. тебе, по идее, не даст ОС записать в уже запушенный ехе, т.к. он будет защищен во время выполнения виндой;


N>>>Серьезно? А вы попробуйте

N>>>Есть даже утилита для тяжёлых случаев Unlocker называется.

R>>Попробовал. Получил ERROR_SHARING_VIOLATION.


N>Хех... Ну а если подумать?


N>1) Запускается файл exe, выползает диалог: введи брат ключ.

N>2) Брат вводит ключ
N>3) Создаем каталог tmp
N>4) Переносим!!! своё exe туда
N>5) Копируем своё exe оттуда на старое место

N>винда сейчас лочит от записи перенесённый exe в каталоге!


N>6) Открываем файл который мы вернули в зад на запись.

N>7) Патчим, антивирусняки совершенно не напрягаются по этому поводу т.к. этот скопированный назад exe не является запущенным
N>8) Создаем батник (или другим способом)
N>9) Говорим юзверю: брат спасибо за ключ щас надо перезапустицо.
N>10) Имеем результат. Файл пропатчен, антивирусняки спят спокойно.

Дополнение, про 8й пункт это я не дописал, что удаляем скопированный файл в tmp каталог вместе с каталогом после завершения приложения.
Re[5]: Как правильно записать в exe?
От: Rocky  
Дата: 06.11.08 16:25
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Хех... Ну а если подумать?


N>1) Запускается файл exe, выползает диалог: введи брат ключ.

N>2) Брат вводит ключ
N>3) Создаем каталог tmp
N>4) Переносим!!! своё exe туда
N>5) Копируем своё exe оттуда на старое место

N>винда сейчас лочит от записи перенесённый exe в каталоге!


N>6) Открываем файл который мы вернули в зад на запись.

N>7) Патчим, антивирусняки совершенно не напрягаются по этому поводу т.к. этот скопированный назад exe не является запущенным
N>8) Создаем батник (или другим способом)
N>9) Говорим юзверю: брат спасибо за ключ щас надо перезапустицо.
N>10) Имеем результат. Файл пропатчен, антивирусняки спят спокойно.

Жуть.

Вот по поводу 10-го пункта не соглашусь. Файрвол, если прога с инетом работает, подумает, что это новая версия и не пустит в инет, точнее спросит стоит ли пускать.

И еще: если прога лежит в Program Files, то там часто бывает режим только для чтения, вернуть пропатченную версию не получится под простым пользователем.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Как правильно записать в exe?
От: nen777w  
Дата: 06.11.08 16:36
Оценка:
N>>10) Имеем результат. Файл пропатчен, антивирусняки спят спокойно.
R>Жуть.
R>Вот по поводу 10-го пункта не соглашусь. Файрвол, если прога с инетом работает, подумает, что это новая версия и не пустит в инет, точнее спросит стоит ли пускать.
R>И еще: если прога лежит в Program Files, то там часто бывает режим только для чтения, вернуть пропатченную версию не получится под простым пользователем.

Эх... Кабы была поддержка сети, и сервер, я б защиту не так построил. А так конечно жуть, но работает.
Касперыч вот сидит и не жужит. Правда сказать я под Админом. Надо бы под простым юзером как Вы говорите попробовать.
Но думаю что запустить программу под администратром как то таки можно. Я помню где то уже делал такое, надо пошарица по исходникам.

Вопрос теперь в другом. Как найти в exe таблицы виртуальных функций. Вообще может либа какая есть которая PE файлы разбирает по кусочкам а потом собирает? А то ну так влом писать свой парсер, да и в формате надо разобраться.
Re[5]: Как правильно записать в exe?
От: Vamp Россия  
Дата: 06.11.08 19:34
Оценка:
Вот незря говорят, что российские программы — это мощные, продуманные, сложные защиты от копирования с небольшими дополнительными возможностями.
Это же надо, обходить защиту файлов, антивирусы и даже исзыскивать способ запуска приложения под администратором, только ради того, чтобы надавать по рукам наглецам, запускающим программу без лицензии...
Да здравствует мыло душистое и веревка пушистая.
Re: Как правильно записать в exe?
От: fay Украина www.bekhter.net
Дата: 07.11.08 20:40
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Коллеги, кинте plz пару линков на статьи или поделитесь кусочком кода, отвечающим на вопрос, как правильно записать (разместить) в exe что то свое.

N>Например, Я хочу хранить в exe серийный номер, дабы не создавать на диске или в реестре файлов/записей.
N>Т.е. работает приложение. Открыли на запись этот же файл в бинарном режиме, сместились куда надо (нашли метку?) записали, закрыли файл, если что то нужно подкорректировать, подкорректировали.
При такой постановке — задача не решаема
Best regards,
Oleg Bekhter
Software Developer
Re[7]: Как правильно записать в exe?
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 08.11.08 00:21
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Вопрос теперь в другом. Как найти в exe таблицы виртуальных функций. Вообще может либа какая есть которая PE файлы разбирает по кусочкам а потом собирает? А то ну так влом писать свой парсер, да и в формате надо разобраться.


Извините, а ваша защита тоже так же работать будет?
[КУ] оккупировала армия.
Re[2]: Как правильно записать в exe?
От: sax0n Украина  
Дата: 09.11.08 22:27
Оценка:
Из всех вариантов записи в ЕХЕ, если использовать, то лучше только "легальный" — через ресурсы. иначе АВ устроит кипишь .. с большой вероятностью.
а лучше все же, наоборот, удостовериться, что никто не сможет никогда изменить ЕХЕ, а отдельно писать информацию.. ИМХО
Re[8]: Как правильно записать в exe?
От: nen777w  
Дата: 10.11.08 09:55
Оценка:
K>Извините, а ваша защита тоже так же работать будет?

влом = нет пока желания писать велосипед, если такой велосипед уже где то катается
Re: Как правильно записать в exe?
От: Anpek  
Дата: 10.11.08 10:17
Оценка:
Здравствуйте, nen777w, Вы писали:

Вся сложность в записи в запущенный файл. А почему бы не заюзать библиотекчку для этого? Назвать как-нить лево, типа OpenGLDriver.dll b юзать её ресурся для чего тебе надо. От супер мега хацкеров конечно не спасет, ну лучше чем ничего
Re[2]: Как правильно записать в exe?
От: nen777w  
Дата: 12.11.08 16:20
Оценка:
A>Здравствуйте, nen777w, Вы писали:
A>Вся сложность в записи в запущенный файл. А почему бы не заюзать библиотекчку для этого? Назвать как-нить лево, типа OpenGLDriver.dll b юзать её ресурся для чего тебе надо. От супер мега хацкеров конечно не спасет, ну лучше чем ничего

Сложности записи в тело запущенного exe как раз нет. Я выше описал способ это сделать.
Помимо записи я хочу ещё сделать патч, в частности патч (настройку) VTBL.
Re: Как правильно записать в exe?
От: Vis Украина  
Дата: 13.11.08 22:35
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Коллеги, кинте plz пару линков на статьи или поделитесь кусочком кода, отвечающим на вопрос, как правильно записать (разместить) в exe что то свое.

N>Например, Я хочу хранить в exe серийный номер, дабы не создавать на диске или в реестре файлов/записей.
N>Т.е. работает приложение. Открыли на запись этот же файл в бинарном режиме, сместились куда надо (нашли метку?) записали, закрыли файл, если что то нужно подкорректировать, подкорректировали.

А как насчет такого трюка:
Пользователь скачивает инсталляционный пакет.
Непосредственно перед самой закачкой, какой-то php скрипт пишет в иссталляционынй пакет серийный номер,
либо как вариант, прописывается номер в exe-шник, и потом на сервере собирается инсталляционный пакет,
хотя это наверное сложнее.

Потому, в случае первого варианта, исталляционный пакет перед окончанием работы быстренько прописывает
в exe-шник сериыйный номер. Думаю, у антивируса не возникнет подозрения от того, что инсталляционный
пакет создает exe-файл?

То есть прикол в том, чтобы номер прописывался ДО первого запуска приложения пользователем, а именно во
время скачивания.

В общем, мой совет не к тому, как вообще записать в ехе-шник, а как записать так, чтобы ни один антивирус
носа не подточил, да и хакерам жизнь усложнить. Кроме того, если связать прописываемый серийный номер с
зарегистрированным пользователем, можно получить немного информации о том, кто из твоих пльзователей
стал источником взломанной проги, если конешно, фокус не разгадают и серийник не притрут. А там глядишь,
выйдешь на e-mail, IP-адреса, и личность хакера. Хотя это больше фантазии.
Re[2]: Как правильно записать в exe?
От: nen777w  
Дата: 15.11.08 13:09
Оценка:
Сори что квотинг убрал.
Ага. Я как раз так и думал. Типа юзверь выбирает место куда ставить, получаем серийный номер девайса, или ещё что то, просим ввести ключк, генерируем ключ привязаный к этому номеру, создаем в процессе инсталяции екзкшник с прописанным ключиком.
Вот как то так.

Хотя надёжно защитить не получится. На данный момент времени мне известно только одно приложение которое вот уже 2-года не могут взломать и наверно никогда и не взломают. Это Steinberg Cubase 4.
Steinberg Cubase 3 — базировался на такой же защите, но его усилиями команды H2O взломали, хотя они честно признались что это было охринительно сложно, в 4-й версии они что то там подправили и теперь вероятно взломать его уже не сможет никто.
Re[6]: Как правильно записать в exe?
От: Юрий Жмеренецкий ICQ 380412032
Дата: 15.11.08 14:16
Оценка: 1 (1)
Здравствуйте, Rocky, Вы писали:
...
R>И еще: если прога лежит в Program Files, то там часто бывает режим только для чтения, вернуть пропатченную версию не получится под простым пользователем.

В висте есть "виртуальные"(FILE_ATTRIBUTE_VIRTUAL) файлы — Физически такой файл находится в профиле, а отображается может на 'Program Files'. "Фича" для совместимости с любителями писать в системные папки.
Re[3]: Оффтопик
От: Rocky  
Дата: 15.11.08 14:44
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Хотя надёжно защитить не получится. На данный момент времени мне известно только одно приложение которое вот уже 2-года не могут взломать и наверно никогда и не взломают. Это Steinberg Cubase 4.

N>Steinberg Cubase 3 — базировался на такой же защите, но его усилиями команды H2O взломали, хотя они честно признались что это было охринительно сложно, в 4-й версии они что то там подправили и теперь вероятно взломать его уже не сможет никто.

Cubase 3 был защищен аппаратным ключом (USB), который они смогли проэмулировать программно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Как правильно записать в exe?
От: gear nuke  
Дата: 17.11.08 12:36
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Коллеги, кинте plz пару линков на статьи или поделитесь кусочком кода, отвечающим на вопрос, как правильно записать (разместить) в exe что то свое.


Вариант, допускающий запуск под контролем атакующего, не обеспечит надёжную защиту. Правильно — делать это на своём сервере. Как-то так
Автор: gear nuke
Дата: 30.04.08
.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.