Проверка информации о лицензии без булевой проверки? [закрытый]

Я сделал функцию, которую вы должны сделать именно так, я не уверен, какие именно символы вы хотите, поэтому вам придется изменить SYMBOL_MATCHER_REGEX, чтобы он соответствовал любым символам, которые вы ищете.

$ 0 является ссылкой на совпадение, найденное шаблоном, функция просто заменяет совпадение на себя, но с вкладками до и после добавления.

  /**
   * The regex used to find any symbols you are looking for.
   */
  private String SYMBOL_MATCHER_REGEX = "[0-9]+";

  /**
   * A replacement which adds space before and after the match.
   */
  private String REPLACEMENT_STRING = "   [110]    ";

  /** 
   * Compiled pattern for the SYMBOL_MATCHER_REGEX. 
   */
  private Pattern SYMBOL_PATTERN = Pattern.compile(SYMBOL_MATCHER_REGEX);

  public String formatUyghur(String uyghurText) {
    Matcher matcher = SYMBOL_PATTERN.matcher(uyghurText);

    return matcher.replaceAll(REPLACEMENT_STRING);
  }
5
задан David Brown 10 February 2009 в 02:44
поделиться

4 ответа

Единственный способ победить не состоит в том, чтобы играть.

Люди, которые собираются украсть Ваш материал (независимо от того, какие меры защиты Вы помещаете на месте), не являются людьми, которые собираются заплатить за него, если им слишком трудно повредиться.

8
ответ дан 13 December 2019 в 05:43
поделиться

Подход, который я встретил при попытке взломать немного продукта.NET, должен был использовать неуправляемый.DLL для проверки лицензии. И не только, что.DLL также содержал много кода, который на самом деле использовался в программном обеспечении. Так, для взламывания продукта, я на самом деле должен был взломать неуправляемый.DLL (или сделать идеальную обертку). Само собой разумеется, это остановило взломщика подражателя как я.:)

0
ответ дан 13 December 2019 в 05:43
поделиться

Вместо простой логической переменной Вы могли выполнить сложное вычисление каждый раз, когда необходимо проверить лицензию и основывать логику на результате того вычисления. Вы действительно поражали перфект, все же. И взламывание Вашего блока не было бы этим намного тяжелее так или иначе.

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

Однако необходимо ли спросить себя, Ваш блок действительно содержит такое драгоценное интеллектуальное свойство, для гарантирования времени и усилий реализовать что-нибудь как это? Это могло бы быть более жизнеспособным и более дешевым пойти правовым путем и бороться против потенциального пиратства, если и когда это происходит.

3
ответ дан 13 December 2019 в 05:43
поделиться

Можно сделать это немного более сложным, но в конце это сведется к одному (или несколько) булевские переменные: Или Вы выполняете код, или Вы не делаете. код Non-obfuscated.NET является в значительной степени тем же как открытым исходным кодом, и смехотворно легко взломать.

Даже если бы путаница не является полным решением, я думаю, что имело бы смысл запутывать, только препятствовать тому, чтобы любители края произвели взломанные версии.

Конечно, это не остановит настоящего взломщика, который готов провести время, но только путем помещения панели немного выше, можно избавиться от большого количества подражателей взломщиков.

Путаница может быть довольно проста реализовать бесплатно. Если у Вас есть коммерческая версия Visual Studio, можно использовать DotFuscator (не с выпусками "Экспресса"). Я никогда не пробовал, но я предполагаю, что это должно быть достаточно просто.

Иначе можно использовать Assemblur. (http://www.metapropeller.com/). Бесплатная версия является приложением командной строки (существует GUI для создания файла установки, но необходимо выполнить настройки из командной строки).

В целом, это едва берет пару минут для запутывания простого EXE-файла, и это свободно

Если Вы хотите сделать свою проверку лицензий немного более сложной, можно осуществить различные проверки в различных методах, и можно также удостовериться, что лицензия, проверяющая код, на самом деле не производит строки непосредственно. (например, Вы делаете проверку лицензий в методе A, но Вы производите ошибку при предупреждении из метода B, так, чтобы, когда взломщик ищет сообщение ошибки лицензии, он не приземлялся прямо на бит кода, который будет изменен).

Все, что это делает, поднимают планку для взломщиков подражателя и делают вещи более сложными для настоящего взломщика.

Случай 1: Не запутываемое приложение.NET с 1 методом проверки лицензий, которые производят "не лицензируемое" сообщение об ошибке. Может быть взломан приблизительно через 5 минут любым, кто может выполнить отражатель.

Случай 2: Запутываемое приложение.NET с парой различных проверок лицензий и никакой очевидной строки производится. Мог занять часы для взломщика и оказаться слишком трудным для подражателя.

Можно заставить от случая 1 случаться 2 приблизительно с 1 часом работы, не тратя десять центов. Движение кроме того является, вероятно, пустой тратой времени (все может быть взломано), но по крайней мере, можно избавиться от людей, которые открывают приложение в Отражателе только, чтобы видеть, будет ли это легким. Если парень открывает приложение в отражателе и видит что-то как:

public bool ValidateLicense(string sLicense)
{
    string sInvalidLicense = "Your license is not valid";
    ...
}

Угадайте то, что происходит затем?

//РЕДАКТИРОВАНИЕ: В комментарии, LC, который спрашивают:

То, как у Вас нет его, произвело какое-либо строковое сообщение, но все еще уведомляет пользователя? Даже если Вы сделаете проверку лицензий и вывод в двух различных методах, то у Вас все еще будет выбор из двух альтернатив "если (! ValidateLicense (LicenseCode)) {NotifyUserOfInvalidLicense (); бросьте новый LicenseException ();}" или что-то, нет?

Поместите себя в обувь взломщика: Вы ищете код доступа Лицензии. Вы не собираетесь изучать целый код только для нахождения его. Вместо этого Вы запускаете нелицензированное приложение: сообщение об ошибке обнаруживается.

Вы берете то сообщение об ошибке, Вы открываетесь, блок в Осуществляют рефакторинг, и Вы ищете часть того сообщения об ошибке.

Если та строка расположена в "ValidateLicence ()", Вы сразу находите ValidateLicence () функцией. Оттуда, только необходимо определить местоположение возвращаемого значения и изменения тот 1 байт.Готово.

Если строка найдена вместо этого внутренний "WhatEver ()", все еще необходимо найти то, что методы называют "WhatEver ()". Это даже не могло бы быть в том же блоке (в этом случае Осуществляют рефакторинг, не найдет его для Вас). Это делает задание тяжелее для Вашего взломщика подражателя. Он должен будет посмотреть на тот метод, чтобы видеть, как он проверяет код (который он не делает). Он мог бы даже быть неаккуратным и изменить возвращаемое значение неправильного метода, в этом случае он представляет ошибку (если метод запутывается, выясняя то, что это делает не настолько просто).

Еще лучше не используйте строку вообще: можно сохранить сообщение об ошибке как последовательность шестнадцатеричных кодов и преобразовать его для строкового представления динамично, когда необходимо отобразить сообщение. Никакая строка ошибки не означает, что взломщик должен будет полагаться на что-то еще для определения местоположения кода доступа лицензии. И прочтение запутываемого кода не является забавой.

Вы могли также иметь поддельный метод проверки, содержащий сообщение об ошибке, и подавить предупреждение сделать, это быть похожим на трещину работало.

Так, несколько простых, глупых приемов как они + простую путаницу очень легко реализовать, и они могут возвратить 5 минуты "И" раскалывающаяся сессия в недели работы для взломщика, потому что не только делает он должен найти и взломать Ваш код доступа, но он также должен протестировать, чтобы удостовериться, что все работает и что он только зафиксировал ловушку или неохотно создал противные ошибки. Теперь, он просто не может быть уверен без тестирования.

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

Однако можно сделать это адской партией тяжелее для нахождения, какие байты должны быть изменены, и по крайней мере, можно постараться не иметь строку, которая говорит "байт, который Вы ищете, прямо здесь".

1
ответ дан 13 December 2019 в 05:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: