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

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

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

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


.0043400B: B9EB0FB8EB mov ecx,0EBB80FEB ;«e?0e»

.00434010: 07 pop es

.00434011: B9EB0F90EB mov ecx,0EB900FEB ;«e?0e»

.00434016: 08FD or ch,bh

.00434018: EB0B jmps .000434025 -------- (3)

.0043401A: F2 repne

.0043401B: EBF5 jmps .000434012 -------- (4)

.0043401D: EBF6 jmps .000434015 -------- (5)

.0043401F: F2 repne

.00434020: EB08 jmps .00043402A -------- (6)

.00434022: FD std

.00434023: EBE9 jmps .00043400E -------- (7)

.00434025: F3 repe

.00434026: EBE4 jmps .00043400C -------- (8)

.00434028: FC cld

.00434029: E959585051 jmp 051533887

.0043402E: EB0F jmps .00043403F -------- (9)

Можно сгенерировать хоть миллион команд — это легко. Проанализировать их намного сложнее, если вообще возможно. Назначающие команды и заведомо никогда не исполняющиеся условные переходы типа XOR EAX, EAX/JNZ trg сможет отсеять и компьютер (достаточно написать простенький плагин к дизассемблеру IDA PRO). Освободиться от ненужных вычислений значительно сложнее. Как минимум, необходимо загнать все команды на граф, отображающий зависимости по данным, и убрать замыкающиеся ветви. Некоторые хакерские команды уже решили эту задачу (например, группа Володи с wasm'а), однако готовых инструментов в публичном доступе что-то не наблюдается, значит, юные взломщики, наткнувшись на обфускаторный код, скорее обломаются, чем взломают его. С точки зрения разработчика программы очень хорошо!

Высаживаться на разработку собственного обфускатора совершенно необязательно, есть готовые — как коммерческие, так и бесплатные. Например, .NET Obfuscator — http://blogs.msdn.com/obfuscator/default.aspx. Забавно, но большинство обфускаторов не используют обфускацию для защиты самих себя от взлома! А все потому, что в программах, критичных к производительности (к ним, например, относятся трехмерные игры), обфускация вызывает значительные тормоза и запутывать можно только редко вызываемые модули, например код защитного механизма. Однако здесь возникает угроза: хакер просто «выломает» защитный механизм из программы не анализируя его устройство. Как правило, для этого достаточно проанализировать код материнской процедуры (которая не подвергалась обфускации) и удалить вызов «запутанной» защитной функции, подсунув «правильный» код возврата, который ожидает вызывающая функция. Чтобы помешать подобным действиям хакера, защитная процедура, кроме проверки аутентичности копии программы, должна делать что-то полезное, такое, без чего программа не сможет работать. Но и в этом случае шансы хакера на взлом остаются высокими: шпионаж за API-функциями и реестром дает богатую пищу для размышлений, которая часто избавляет от необходимости анализировать машинный код.

Обфускация — не панацея. Слепое использование готовых обфускаторов лишь увеличивает объем защищаемой программы и ухудшает производительность, но далеко не всегда затрудняет взлом!

Шифровка

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

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