как разрабатываются серийные генераторы / трещины?

StackOverflow https://stackoverflow.com/questions/130058

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Просто из любопытства.

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пост Нильса посвящен генераторам ключей.Для поиска трещин обычно вы находите точку разветвления и инвертируете (или удаляете условие) логику.Например, вы проверите, зарегистрировано ли программное обеспечение, и тест может вернуть ноль, если это так, а затем выполнить соответствующий переход.Вы можете изменить "переход, если равно нулю (je)" на "переход, если нет -равно нулю (jne)", изменив один байт.Или вы можете написать no-operations над различными частями кода, которые делают то, что вы не хотите делать.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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