Как правильно записать в 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>Извините, а ваша защита тоже так же работать будет?

влом = нет пока желания писать велосипед, если такой велосипед уже где то катается
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.