Вопрос

Я программист.У меня около 5 лет опыта программирования на разных языках.Я беспокоился о скорости моего кода, об оптимизации памяти, в которой используется мой код, о хорошем стиле кодирования и так далее.Но я никогда не задумывался, насколько безопасен мой код.Поэтому я разобрал свой код, чтобы посмотреть, на что способен хакер.Будет ли легко взломать мой код?И я увидел, что это так!Это очень просто, потому что я хранил

  1. серийный номер в виде строки
  2. коды шифрования и дешифрования, а также

Так что, если у кого-то есть минимальные знания ассемблера, он / она может просто использовать дизассемблер, и после 10-20 минут отладки мой код будет взломан!!!Я думаю, даже это можно было бы сделать, открыв exe-файл с помощью notepad!:-)

Итак, я спрашиваю о следующем:

  1. Где я должен хранить такую защищенную информацию?
  2. Каковы общие стратегии предоставления защищенного кода?
Это было полезно?

Решение

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

Убрав это с пути, вы, безусловно, сможете это сделать сильнее ибо это был бы реверсивный способ разрушить вашу защиту. Запутывание это своего рода первый шаг в достижении этой цели.У меня нет опыта использования обфускаторов, но я уверен, что вы можете найти несколько предложений для некоторых из них на SO.Кроме того, если вы используете язык более низкого уровня, такой как C / C ++, простая компиляция кода с полной оптимизацией и удалением всех символов отладки приводит к приличному количеству запутываний.

Я читал эта статья несколько лет назад, но я все еще думаю, что эта техника актуальна и сегодня.Это один из разработчиков видеоигры под названием Spyro, рассказывающий о наборе методов, которые они использовали для предотвращения пиратства.Они утверждают, что взломанная версия стала доступна только через 3 месяца после релиза, что довольно впечатляет.

Другие советы

Если вас беспокоит пиратство, то есть много путей, которыми вы можете воспользоваться.Ужесточение защиты кода (запутывание, лицензионные коды, привязка программного обеспечения к определенному ПК, защита оборудования / ключа и т.д.) - это одно из них, но стоит иметь в виду, что каждый часть программного обеспечения может быть взломана, если потрудиться кому-то достаточно талантливому.

Другой подход заключается в рассмотрении модели ценообразования для вашего программного обеспечения.Если вы берете 1000 долларов за копию, то у кого-то появляется большой стимул попробовать взломать ее.Если вы берете всего 5 долларов, то зачем кому-то утруждать себя его взломом?

Итак, что необходимо, так это баланс.Даже самая элементарная защита не позволит обычным людям делать случайные копии.Помимо этого, простые методы (обфускация и лицензионные коды) и разумная ценовая стратегия удержат большинство потенциальных взломщиков в страхе, поскольку не стоит беспокоиться о взломе.После этого вы начинаете осваивать все более изощренные методы (для запуска программного обеспечения необходимы ключи / компакт-диски, запустить программное обеспечение можно только после входа в систему онлайн-лицензирования), внедрение которых требует больших усилий / затрат и значительно увеличивает риск раздражения настоящих клиентов (помните, как все разозлились, когда купили half life, но она не позволила им поиграть в игру?) - если только у вас нет популярного массового продукта (т. Е.огромный поток доходов для защиты), вероятно, нет особого смысла прилагать столько усилий.

Сделайте это веб-приложением.

Как правило, он не будет хорошо защищен, если только нет внешней службы, выполняющей проверку, которую вы контролируете, - и эта служба все еще может быть подделана теми, кто действительно хочет ее "взломать".Вместо этого доверяйте клиенту и предоставляйте лишь минимальную защиту авторских прав.Я уверен, что где-то была статья или подкаст Джоэла Спольски об этом...вот еще один связанный С ЭТИМ вопрос SO.

Я понятия не имею, поможет ли это, но Windows предоставляет (с 2000 года) механизм для извлечения и хранения зашифрованной информации, и вы также можете использовать это хранилище для каждого приложения, если это необходимо:API для защиты данных (DPAPI)

Это на уровне компьютера или пользователя, но хранить сериалы и, возможно, некоторые ключи, использующие их, может быть лучше, чем скрывать их в приложении?

О какой безопасности вы говорите?Безопасно с точки зрения того, что вы хорошо защищаете данные своих пользователей?Если это так, изучите немного реальной криптографии и используйте Существующий библиотеки для шифрования ваших данных.win32 API довольно хорош для этого.

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

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

Похоже, вы беспокоитесь о реверс-инжиниринге и пользователях, генерирующих лицензионные коды без оплаты, хотя и не говорите об этом.Чтобы усложнить задачу, вы можете запутать свой код и ключевую информацию различными способами.Существуют также методы, позволяющие усложнить использование отладчиков, чтобы не дать реверс-инженеру пройтись по коду и увидеть информацию в ясном виде.Но это только несколько усложняет реверс-инжиниринг, но не делает его невозможным

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

Простой способ сделать это - выполнить xor поверх всего вашего кода и xor обратно, когда вам это нужно...но для этого нужны врожденные знания в области сборки...Я не уверен, но вы могли бы попробовать это:

void (*encryptionFunctn)(void);
void hideEncryptnFunctn(void)
{
    volatile char * i;
    while(*i!=0xC0) // 0xC0 is the opcode for ret
    {
        *i++^=0x45; // or any other code
    }
}

Чтобы предотвратить просмотр вашего кода хакерами, вам следует использовать обфускатор.Обфускатор будет использовать различные методы, которые чрезвычайно затрудняют понимание запутанного кода.Некоторые используемые методы включают шифрование строк, переименование символов, обфускацию потока управления и т.д.Проверьте Крипто-Обфускатор который дополнительно также имеет скрытие вызова внешнего метода, защиту от отражения, Защиту от отладки и т. Д

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top