Как убедиться в безопасности вашего кода? - PullRequest
0 голосов
/ 03 октября 2009

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

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

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

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

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

Ответы [ 9 ]

1 голос
/ 03 октября 2009

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

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

1 голос
/ 03 октября 2009

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

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

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

1 голос
/ 03 октября 2009

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

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

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

1 голос
/ 03 октября 2009

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

1 голос
/ 03 октября 2009

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

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

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

0 голосов
/ 27 мая 2010

Чтобы не дать хакерам просматривать ваш код, вы должны использовать обфускатор. Обфускатор будет использовать различные методы, которые чрезвычайно затрудняют понимание запутанного кода. Некоторые используемые методы: шифрование строк, переименование символов, запутывание потока управления и т. Д. Ознакомьтесь с Crypto Obfuscator , который также имеет скрытие внешних вызовов методов, Anti-Reflector, Anti-Debugging и т.д.

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

0 голосов
/ 03 октября 2009

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

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

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

0 голосов
/ 03 октября 2009

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

void (*encryptionFunctn)(void);
void hideEncryptnFunctn(void)
{
    volatile char * i;
    while(*i!=0xC0) // 0xC0 is the opcode for ret
    {
        *i++^=0x45; // or any other code
    }
}
0 голосов
/ 03 октября 2009
...