как развиваются серийные генераторы / трещины? - PullRequest
29 голосов
/ 25 сентября 2008

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

Просто для любопытства.

Ответы [ 8 ]

28 голосов
/ 25 сентября 2008

Помимо того, что это незаконно, это очень сложная задача.

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

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

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

Чтобы создать кейген, вы должны понять алгоритм и написать программу для повторного выполнения тех же самых вычислений (я помню старую версию MS Office, в сериале которой было очень простое правило, сумма цифры должна была быть кратное 7, так что написание кейгена было довольно тривиальным).

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

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

По сути, это то, что требует очень глубоких знаний, изобретательности и много времени! О, я упоминал, что это незаконно в большинстве стран?

Если вы хотите узнать больше, Google для Учебников по взлому + ORC, они очень старые и, вероятно, бесполезные в наши дни, но дадут вам хорошее представление о том, что это значит.

В любом случае, очень хорошая причина знать все это, если вы хотите написать свою собственную схему защиты.

15 голосов
/ 25 сентября 2008

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

После этого вы переводите код проверки ключа на C или другой язык (этот шаг не является обязательным). Обратный процесс проверки ключей дает вам генератор ключей.

Если вы знаете ассемблер, потребуется около выходных, чтобы научиться это делать. Я сделал это всего несколько лет назад (хотя никогда ничего не выпускал. Это было просто исследование для моей работы по разработке игры. Чтобы написать ключ, который трудно взломать, нужно понять, как люди подходят к взлому).

9 голосов
/ 25 сентября 2008

Сообщение Нильса касается генераторов ключей. Для трещин обычно вы находите точку ветвления и инвертируете (или удаляете условие) логику. Например, вы будете проверять, зарегистрировано ли программное обеспечение, и тест может вернуть ноль, если это так, а затем перейти соответствующим образом. Вы можете изменить «переход, если равен нулю (j)) на« переход, если не равен нулю (jne) », изменив один байт. Или вы можете писать без операций над различными частями кода, которые делают то, что вы не хотите делать.

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

4 голосов
/ 25 сентября 2008

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

Есть несколько методов, используемых для этого. Вы можете пройтись по коду в отладчике, который обычно требует приличного знания сборки. Используя это, вы можете получить представление о том, где в программе вызываются методы защиты от копирования / keygen. При этом вы можете использовать дизассемблер, такой как IDA Pro , чтобы более тщательно анализировать код и пытаться понять, что происходит, и как вы можете его обойти. Я взломал ограниченные по времени бета-версии, вставив инструкции NOOP поверх проверки даты.

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

3 голосов
/ 25 сентября 2008

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

Другой альтернативой является поиск функций, которые возвращают "true", если серийный номер является действительным, и "false", если это не так, затем разработайте двоичный патч, чтобы функция всегда возвращала "true".

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

2 голосов
/ 25 сентября 2008

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

Что касается взлома, я имел обыкновение проходить программы на высоком уровне и искать точку, где она перестала работать. Затем вы вернетесь к последнему успешному «Звонку» и войдете в него, а затем повторите. В то время защита от копирования обычно записывала на диск и проверяла, успешно ли выполнено последующее чтение (если это так, защита от копирования не удалась, потому что они использовали для записи части дискеты лазером, чтобы ее нельзя было записать). 1003 *

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

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

1 голос
/ 02 марта 2009

Интересно, почему они не просто распространяют персонализированные двоичные файлы, где имя владельца хранится где-то (в зашифрованном и зашифрованном виде) в двоичном файле или лучше распределяется по всему двоичному файлу ... AFAIK Apple делает это с файлами музыки из магазина iTunes, однако там слишком просто удалить имя из файлов.

0 голосов
/ 25 сентября 2008

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

Последовательный генератор делает следующий шаг, анализируя алгоритм, который проверяет серийный номер на достоверность и проверяет его.

...