Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #64, МАРТ 2006 г.

защита игр от взлома

КРИС КАСПЕРСКИ АКА МЫЩЪХ

Спецвыпуск: Хакер, номер #064, стр. 064-066-13


полезные советы россыпью

Проверяй серийный номер (пароль) не с первого байта (лучше всего с пятого), этим защита обломает начинающего хакера, который установил точку останова на начало. Также не проверяй последние символы серийного номера. И не проверяй середину! Проверяй не более половины символов вразброс. Смешно, конечно, но очень выручает. Никогда не считывай серийный номер (пароль, имя пользователя) из строки редактирования целиком! Хакер тут же найдет его в памяти и расставит точки останова, в которые угодит защитный механизм. Считывай только по одному вводимому символу за раз (через WM_CHAR или DDE) и тут же шифруй их (если скалывать считанные символы в локальный буфер, то получится тот же самый WM_GETTEXT, только реализованный своими руками).

Боремся с дизассемблером

Оптимальный дизассемблер — IDA PRO. Действительно очень мощный дизассемблер, его не так-то просто взять на испуг. С классическими защитными приемами (типа прыжка в середину команды) он справляется даже не замечая, что тут было что-то защитное. Если на пути хакера встретится стена зашифрованного/упакованного кода, он напишет короткий (длинный) скрипт и расшифрует все, что нужно, даже не выходя из дизассемблера. Для p-кода будет написан отдельный плагин типа «докомпилятор».

Самым мощным антихакерским средством был и остается косвенный вызов функций по указателю, передаваемому в качестве аргумента. Хакер натыкается на что-то типа call eax и матерится в бессильной злобе, пытаясь определить, что содержится в eax на данный момент. Если материнская функция вызывается обычным способом, взломщику достаточно просто перейти по перекрестной ссылке, заботливо сгенерированной IDA, и подсмотреть, что передается функции. Однако если указатель инициализируется далеко от места вызова, хакеру придется раскрутить всю цепочку вызовов. Если же функция, вызывающая косвенную функцию, сама вызывается косвенным путем, то вообще наступают кранты! Остается запускать отладчик, устанавливать точку останова на call eax и смотреть ее значение вживую, однако точкам останова легко противостоять. К тому же в различные моменты времени eax может указывать на разные функции, тогда простое подглядывание eax ничего не даст. Дизассемблер ослепнет и оглохнет!

Назад на стр. 064-066-12  Содержание  Вперед на стр. 064-066-14