Мой вопрос довольно прост: вы исполняемый файл, который выводит «Доступ разрешен» или «Доступ запрещен», а злые люди пытаются понять ваш алгоритм или исправить ваши внутренности, чтобы вы все время говорили «Доступ предоставлен» ,
После этого вступления вам может быть очень интересно, что я делаю. Он собирается взломать Diablo3, когда он выйдет? Я могу успокоить ваши заботы, я не один из тех взломщиков. Моя цель - cramesmes.
Crackmes можно найти, например, на www.crackmes.de. Crackme - это небольшой исполняемый файл, который (в большинстве случаев) содержит небольшой алгоритм проверки серийного номера и выводит «Доступ разрешен» или «Доступ запрещен» в зависимости от серийного номера. Цель состоит в том, чтобы сделать этот исполняемый вывод "Доступ предоставлен" все время. Методы, которые вам разрешено использовать, могут быть ограничены автором - не устанавливать патчи, не разбирать - или включать в себя все, что вы можете сделать с помощью двоичного файла, objdump и шестнадцатеричного редактора. Взломать crames - это одна из забавных вещей, но, как программисту, мне интересно, как вы можете создавать сложные crames.
По сути, я думаю, что взломщик состоит из двух основных частей: определенной последовательной проверки и окружающего кода.
Очень сложно усложнить проверку серийной проверки, используя только сборку, например, у меня есть идея взять серийную версию в качестве входа для симулированного микропроцессора, который должен находиться в определенном состоянии, чтобы последовательный прием был принят , С другой стороны, можно подешеветь и узнать больше о криптографически надежных способах обеспечения безопасности этой части. Таким образом, сделать это достаточно сложно, чтобы заставить злоумышленника попытаться исправить исполняемый файл не должно быть
тяжело.
Однако, более сложная часть - защита двоичного файла. Давайте предположим, что абсолютно безопасная проверка серийного номера не может быть каким-либо образом отменена (конечно, я знаю, что это можно отменить, если вы сомневаетесь, вы вырываете части из двоичного файла, который пытаетесь взломать, и выбрасываете случайные серийные номера, пока он не примет). Как мы можем помешать атакующему просто переопределить переходы в двоичном файле, чтобы заставить наш двоичный файл принять что-либо?
Я немного искал по этой теме, но большинство результатов по бинарной безопасности, самопроверкаемым двоичным файлам и тому подобному заканчиваются в статьях, которые пытаются предотвратить атаки на операционную систему с использованием скомпрометированных двоичных файлов. подписав определенные двоичные файлы и проверив эти подписи ядром.
Мои мысли в настоящее время состоят из:
- проверка явных местоположений в двоичном файле для прыжков.
- контрольные суммы частей двоичного файла и сравнение контрольных сумм, вычисленных во время выполнения, с этими.
- имеет положительные и отрицательные проверки времени выполнения для ваших функций в коде. С побочными эффектами при серийной проверке. :)
Можете ли вы придумать, как еще больше раздражать возможного злоумышленника? (конечно, вы не можете держать его подальше навсегда, когда-нибудь, все проверки будут нарушены, если вам не удалось сломать генератор контрольной суммы, если вы смогли встроить правильную контрольную сумму для программы в саму программу, хе-хе)