Добрый день. Взял делать один проект на elance. Чтобы убрать все намеки на субъективность по поводу проекта , приведу описание и краткую переписку на английском. Итак, название проекта ( перевод в скобках): Design Program "Wrapper" to make License Protection of existing programs (Спроектировать программу-обертку для преобразования существующих программ в защищенные программы с лицензией) Описание: Цена - до 500 баксов. Ясно, за такие деньги полноценный навесной протектор никто писать не будет , да и возможно ли это в принципе в данном контексте. Я решил зашивать исходную программу в шифрованном виде в некую программу-загрузчик. Последняя и будет по данному ключу выполнять распаковку из ресурсов и последующий запуск. Ясно, запуск из памяти - возможен, но под всякий exe наверное не надежно. Поэтому решил поступить хитро: распаковать в temp папку и оттуда запускать. Все параметры , как то: trial период, контрольные суммы exe-шников, хранить в реестре и особо не заморачиваться. Я сделал ставку $350. Вот мой proposal: Далее, при необходимости могу скинуть переписку. Вкратце суть такова. Он спросил, будет ли обертка работать на любом executable. Я сообщил, что решение универсально. Бла-бла и он принял предложение. Внес деньги на escrow. Вот я изготовил софтину, скинул ему на тест. Сразу же обнаружилось, что он пакует .NET сборки ( опять таки, хорошо что не заморачивался запуском из памяти, для сборок это не проканает). Все пашет, если сборка одна, standalone так сказать. А у него идет сборка + куча файлов. Естественно, распаковав exe в temp папочку, этот exe не увидит этих своих файлов ! Ну и вот он пишет : Короче , хочет отменить проект, так на его конкретной софтине( где куча файлов и они зависят от exe) это все не канает. И теперь вопрос. Как мне лучше поступить? Варианты таковы: - стоять на своем и решить вопрос с помощью арбитра. Софтина пашет отлично если нету никаких зависимостей у пакуемого файла от файлов, которые находятся в его папке. Он видимо хотел что-то вроде протектора навесного. За 350 баксов... мда, буржуины епт - сделать распаковку в текущую папку ( сделать файл скрытым и системным). После отработки - сносить. Не комильфо, но ничего больше в голову не приходит. - принять его отказ. Естественно, обидно, неделя времени впустую. ПС. У меня 5 проектов выполнено успешно на елансе, рейтинг 5.0. В принципе, портить картину не хочется конечно. Но времени жаль... -
tomeksergey Ну ваш решений отламываецца очень быстро (но вы и просили немного), попробуйте покриптить алгосы и просто дропайте валидный экзе назад куда надо (те оставляя юзера с полным комплектом) - все едино защиты никакой толком нет, ну или запускайте в той же папке с другим именем. Продолжайте диалог, короче.
PSR1257II Да, собственно так и думаю. Алгоритм упаковки в ресурсы - blowfish. Кроме того, формирую md5, чтобы сразу проверить лицензию на валидность. Тут проблем нет. А вот с голым исходным exe в той же папке - ситуация другая.. В сущности ничего не остается кроме этого.
А нельзя после скидывания в %TEMP% делать CreateProcess и указывать в параметрах Working Directory в котором лежат используемые файлы?
Kaimi Там есть параметр CurrentDirectory, но я думаю вряд ли прокатит. Например у него в софтине инсталяция, в которой три папочки. Естественно, сборка обращается к ним как Dir1/file.dat и тд.Вот что говорит msdn по поводу этого параметра : Выходит, если я задаю NULL, то текущей папкой будет та, в которой сам шифрованный wrapper лежит.
имхо, нормально сделанный запуск из памяти будет запускать любой ехе. Сразу как то подумал, что дропать в темп не канает, т.к. проге может быть важно ее местоположение. Kaimi По этой причине устанавливать рабочий каталог для запускаемого процесса не решение.
K10 Не подскажете, упаковщик типа upx поддерживает сборки .net? Как вариант, передрать оттуда код запуска из памяти. А по сути, этому товарищу нафиг не надо обычные win32 exe запускать. Ему только .net...
Если заказчик планирует лицензировать только сборки, то их спокойно можно загружать из памяти http://msdn.microsoft.com/en-us/library/h538bck7.aspx
tomeksergey Есть своя специфика, тем не менее. Например, по очевидным причинам, для сборки из памяти нельзя получить адрес на диске.