Здравствуйте, drVanо, Вы писали:
V> R>Мне сантиметрами меряться не очень интересно. Давай я признаю, что у тебя длиннее, а ты признаешь, что написать код без релоков это не бином Ньютона?
V> Давай ты лучше признаешь, что все что ты предлагал ТС-у вместе с вантусом — это полный шлак.
Ты невнимательно читаешь. Я ТС'у ничего не предлагал. Я сказал, что контролировать целостность критически важного кода и данных не так сложно, как ты пытаешься преподнести. Поэтому — нет.
Здравствуйте, rudzuk, Вы писали:
R>Ты невнимательно читаешь. Я ТС'у ничего не предлагал. Я сказал, что контролировать целостность критически важного кода и данных не так сложно, как ты пытаешься преподнести. Поэтому — нет.
Вот же ты сам предлагал:
Ты все усложняешь. Целостность всего образа проверять смысла нет. Достаточно проверить целостность критически важных данных и кода. Это делается проще, чем ты описываешь.
В итоге ты предлагаешь человеку самостоятельно писать PIC, чтобы потом проверять целостность участков кода. Я даже больше чем уверен, что он даже их (эти самые участки) не найдет.
К слову сказать твой открытый ключ можно подменить прямо в памяти в момент "десериализации" его в BigInteger даже не трогая код, который с ним работает, и все твои проверки на целостность будут просто бесполезны.
Здравствуйте, drVanо, Вы писали:
V> R>Ты невнимательно читаешь. Я ТС'у ничего не предлагал. Я сказал, что контролировать целостность критически важного кода и данных не так сложно, как ты пытаешься преподнести. Поэтому — нет.
V> Вот же ты сам предлагал:
V> Ты все усложняешь. Целостность всего образа проверять смысла нет. Достаточно проверить целостность критически важных данных и кода. Это делается проще, чем ты описываешь.
V> В итоге ты предлагаешь человеку самостоятельно писать PIC, чтобы потом проверять целостность участков кода. Я даже больше чем уверен, что он даже их (эти самые участки) не найдет.
Нет, ТС'у я ничего не предлагаю. Я сказал, отвечая совсем не ТС'у, что имеет место быть очевидное усложнение достаточно простой задачи.
V> К слову сказать твой открытый ключ можно подменить прямо в памяти в момент "десериализации" его в BigInteger даже не трогая код, который с ним работает, и все твои проверки на целостность будут просто бесполезны.
Здравствуйте, Sharowarsheg, Вы писали:
S>Вечные лицензии, мне помнится. Деньги получаешь один раз, а поддержка навсегда. Через какое-то время проект приходится закрывать.
Представляю себе этот ужас. Наверное есть сегменты продуктов, где практика вечных лицензий может быть оправдана, но если это что-то техническое и тем более связанное с компиляцией и кодом — шансов выжить с такой моделью нет.
Здравствуйте, Aquilaware, Вы писали:
A>Представляю себе этот ужас. Наверное есть сегменты продуктов, где практика вечных лицензий может быть оправдана, но если это что-то техническое и тем более связанное с компиляцией и кодом — шансов выжить с такой моделью нет.
Вечные лицензии обычно практикуются в самом начале пути, чтобы привлечь первых пользователей. Использовать такое для устоявшегося продукта смысла никакого, конечно же. Нельзя предоставлять неограниченный ресурс за ограниченные деньги.
Здравствуйте, wantus, Вы писали:
W>1. Добавить проверку подписи собственного exe (через WinVerifyTrust).
я бы еще добавил: помимо основного метода проверки ключа (RSA) иметь несколько простых дополнительных (а-ля третий байт ключа всегда делится на 7). После загрузки ключа в память он тиражируется в десяток-другой мест в памяти и точно так же, по таймеру или событию, проверяется. Тиражирование нужно, чтобы было сложнее ставить брейкпоинты на память. Разные проверки нужны, чтобы их нельзя было обезвредить анализом кода или поведения.
Здравствуйте, drVanо, Вы писали:
V>Здравствуйте, wantus, Вы писали:
V>>>А откуда вы знаете что им лень, а что не лень? Вы предлагаете откровенно слабые варианты, которые может обойти даже начинающий реверсер. W>>Я понимаю, что вы стекольщик и вам надо нагнетать,
V>Вы меня с кем-то путаете.
Вы продаете продукт для защиты от хакеров. Чем страшнее хакеры, тем лучше бизнес.
W>>но преувеличивать уж настолько сильно тоже не стоит.
V>Вы реверсингом сколько лет занимаетесь, если не секрет?
С конца 90х, но это видимо вопрос с подвохом?
V>Ну ну, вам с дивана виднее
Здравствуйте, JustPassingBy, Вы писали:
JPB>Вечные лицензии обычно практикуются в самом начале пути, чтобы привлечь первых пользователей. Использовать такое для устоявшегося продукта смысла никакого, конечно же. Нельзя предоставлять неограниченный ресурс за ограниченные деньги.
Здравствуйте, drVanо, Вы писали:
V>К слову сказать твой открытый ключ можно подменить прямо в памяти в момент "десериализации" его в BigInteger даже не трогая код, который с ним работает, и все твои проверки на целостность будут просто бесполезны.
Просто публичный ключ должен вычисляться, а не лежать константой в области данных.
Здравствуйте, K13, Вы писали:
K13>Просто публичный ключ должен вычисляться, а не лежать константой в области данных.
Для того чтобы понимать как защитить открытый ключ от подмены, нужно как минимум представлять как работают стандартные библиотеки, которые манипулируют большими числами. Открытый ключ это просто большое число, которое загоняется в класс BigInteger, и дальше над ним производят математические действия (внутри modpow). Дак вот перехватив любой из методов, которые используются при проверке правильности серийного номера, можно подменить открытый ключ прямо в памяти BigInteger-а (особо "умные" делают это через перехват стандартной функции выделения памяти из CRT).
Здравствуйте, drVanо, Вы писали:
V> K13>Просто публичный ключ должен вычисляться, а не лежать константой в области данных.
V> Для того чтобы понимать как защитить открытый ключ от подмены, нужно как минимум представлять как работают стандартные библиотеки, которые манипулируют большими числами. Открытый ключ это просто большое число, которое загоняется в класс BigInteger, и дальше над ним производят математические действия (внутри modpow). Дак вот перехватив любой из методов, которые используются при проверке правильности серийного номера, можно подменить открытый ключ прямо в памяти BigInteger-а (особо "умные" делают это через перехват стандартной функции выделения памяти из CRT).
Вот я и говорю — фантазии это, с прикольными допущениями, что будет использоваться стандартное API.
Да нет же, я сказал, что мне сантиметрами меряться не интересно, и что готов признать твое превосходство. У тебя удивительная способность не понимать, что тебе говорят
V> Зачем заново начинать этот разговор?
Безотносительно используемого протектора могу порекомендовать несколько способов, которые могут усложнить жизнь крякеру:
1. Строковые константы. Многие программисты, которые не знакомы с основами реверсинга даже не пытаются шифровать критичные строки. Многие например хранят ключи в виде base64, выдают сообщения типа "Неверный регистрационный код", по ссылкам на который можно достаточно быстро найти код функции, которая выдает это сообщение, даже не запуская дебаггер.
Для некритичных строк достаточно будет динамического создания их прямо на стеке. Самый простой способ:
А также варианты для более продвинутых пользователей.
2. Проверка CRC участков кода, используемых для проверки регистрации ключей. В большинстве случаев совершенно бесполезно, т.к. начинающие программисты даже не догадываются как и где их будут ломать. Если вы собираетесь реализовать данный функционал собственными силами, то нужно учитывать, что в отладчике крякеру достаточно будет найдет место, с помощью которого вы считаете CRC по региону кода, после этого код будет пропатчен и будет выдавать всегда "правильный" результат. Как можно этому противостоять? Для начала можно познакомиться с возможностями NtReadVirtualMemory, с помощью которого можно обойти все бряки, устанавливаемые крякером в отладчике. Следующим этапом можно порекомендовать использовать NtReadVirtualMemory напрямую через SYSCALL/SYSENTER, но для этого придется познакомиться с простейшими способами получения номеров сервисов, в том числе как их можно вызывать из WOW64.
3. Детект отладчиков. Если вы прокачали п. 2 до уровня "бог", то можете с легкостью детектить современные юзермодные отладчики, даже при использовании специальных плагинов, которые работают через хук функций из NTDLL и физически не могут перехватывать ваши собственные вызовы SYSCALL/SYSENTER.
Здравствуйте, rudzuk, Вы писали:
R>Да нет же, я сказал, что мне сантиметрами меряться не интересно, и что готов признать твое превосходство. У тебя удивительная способность не понимать, что тебе говорят