Size: a a a

2021 June 18

АК

Алексей Клименко... in use Perl or die;
Обычно исходник ломают не просто так, а чтобы что-то оттуда узнать.

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

Или «взломать лицензию». Что тоже требует относительно точечной работы, потому что *весь* код программы и не нужен.
источник

CK

Charlotte Karlos in use Perl or die;
Да, и снова ты прав
источник

DF

Denis F in use Perl or die;
А ты умеешь создать проблемы людям :)
источник

АК

Алексей Клименко... in use Perl or die;
Переслано от Алексей Клименко...
Ладно, я не знаю, как именно сейчас устроена логика обработки графических и скриптовых ресурсов в вашей игре, но вот что я могу посоветовать.

Разделите игру на как можно более мелкие ресурсы: звуки, спрайты, фоны, тексты, сценарии. Не объединяйте их в группы, пусть их будет много – по уровням, по сценам, по роутам.

Пусть игра, когда ей нужен какой-то очередной ресурс по имени – шлёт POST запрос на один и тот же endpoint (типа /getresource.php), в котором отправляет имя нужного ресурса и, быть может, токен авторизации. (Особо шифровать тут смысла не много, потому что если ломать эту систему – то «шифрование на клиенте» снять будет проще, чем разделаться с самой такой системой, но в принципе оно может усложнить первоначальный инжиниринг).

На этот запрос – сервер отдаёт путь на статический файл этого ресурса. Имя файла обязательно должно содержать секретный рандомный (но статический) кусочек, который никак нельзя узнать, кроме как запросить данным способом.
Пусть эти ресурсы продолжают кешироваться браузером и отдаваться по одним и тем же путям.

Например, игровые ресурсы могут лежать в таком виде:
2Or12GtHd2_init.json
xrQEELWeaj_menu.json
mXu01dwsxu_menu-music.mp3
OptPHCVeP9_menu-back1.webp
wOIbhCOWFb_menu-buttons.webp
MNIyaiO0fu_intro.json
4w3PlAqUuV_intro-music1.mp3
aes04tgHfL_intro-effect.ogg
LECcQxGAKz_intro-char1.webp
TsUNWgyvKm_intro-char2.webp
daOWHJ71p2_level1-act1.json
LviUS74wvA_level1-act1-back1.webp

EgIAUhSxvP_level1-act2.json

(То есть, на запрос «menu-buttons.webp» сервер ответит «wOIbhCOWFb» и клиент сможет собрать и воткнуть правильный путь в <IMG src=""> или куда там).
источник

АК

Алексей Клименко... in use Perl or die;
Переслано от Алексей Клименко...
Тогда, первоначально выкачав и расшифровав игру – нельзя будет вытащить все пути к ресурсам, потому что во-первых, там нет путей, есть только имена, а во-вторых – и имена будут не всех, а только первоначальных.

Для успешного взлома в этом случае нужно будет выкачать первый .json, расшифровать код в нём (лучше не json, а обусфицированный js – и уже в нём пусть будут данные как у вас сейчас, шифрованно), достать оттуда имена других связанных .json, сделать симулированный запрос к серверу по этим именам, чтобы получить пути, затем расшифровать эти джисоны и повторять процедуру до тех пор, пока все ресурсы вроде как не будут перебраны.

Далее нужно либо на своём сервере сделать такое же сопоставление имён, либо уже конкретно ломать код игры, чтобы вместо POST-запросов брался сразу правильный файл.

Более того!
Можно сделать «ловушки» – имена ресурсов, которые встречаются в коде, но находятся в таких ветках условий, которые в нормальной игре никогда не сработают. Не банальный if(false) конечно, а что-то вроде «if(money>10)download('act-5');else if(money<5)download('act-18');else download('act-10');» – если при входе в этот сценарий money никогда не бывает меньше пяти (например, нам только что по сюжету 5 монет дали) – то запрос act-18 в нормальной игре никогда не случиться, и получив вдруг такой запрос – игра может забанить аккаунт игрока на некоторое время (например, на 24 часа, перестав отдавать пути к каким-либо ресурсам вообще) и выдать ему видимое предупреждение за попытку взлома.

Тогда, пытаться банально запросить список всех ресурсов станет очень непрактично, потому что одна ошибка – и минус день (а если у вас более тридцати таких honeypot – то вы выиграли, потому что на взлом игры уйдёт более месяца ^^)
Вместо этого, хакеру придётся проходить всю игру и логировать «реальные» запросы, чтобы позже выкачать все настоящие ресурсы. Но у него всегда будут сомнения – всё ли он прошёл всеми возможными способами (у вас же не линейные сюжеты?..), и действительно ли хоть раз натыкался на реальные ресурсы, а всё что осталось нетронутым – это ловушки.

Минус подхода – игра будет требовать постоянный интернет для прохождения, потому что ресурсы будут подгружаться динамически, а не все сразу при старте.
И главное не запороть логику триггеринга ловушек, чтобы ни одна из них не сработала при честной игре (дополнительно, поставьте kill-switch на сервере, который бы отключал бан за запрос на ловушку для всех игроков – чтобы вы могли моментально отключить все баны, как только легитимные игроки вдруг начнут писать, что игра их забанила почём зря).
источник

DF

Denis F in use Perl or die;
Ты укуреный что ли был? :)
источник

АК

Алексей Клименко... in use Perl or die;
Хм, но здесь я ещё предлагал не сами ресурсы по POST отдавать, а только ключи к ним. Кажется, я это написал ещё до того, как сам взломал.
источник

АК

Алексей Клименко... in use Perl or die;
А что не так!? ))
источник

DF

Denis F in use Perl or die;
Ну если это реализовать, то будет неподдерживаемый пиздец который любой школьник точно так же расковыряет :)
источник

АК

Алексей Клименко... in use Perl or die;
Ну реализовывать они и правда не захотели..
источник

АК

Алексей Клименко... in use Perl or die;
Кстати, школьники ломали ту версию, которую смог взломать я – и не смогли!
источник

АК

Алексей Клименко... in use Perl or die;
Поэтому те, ответили, «не, ну взломал же только ты, так что норм».
источник

DF

Denis F in use Perl or die;
што за школота пошла, даже игру взломать не могут :(
источник

АК

Алексей Клименко... in use Perl or die;
Там меня больше всего поразило то, что разработчики выкладывали обновлённую версию игры каждый месяц (добавляя новые акты и сцены), а старую… делали бесплатной.

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

DF

Denis F in use Perl or die;
Тем кому охота поиграть прямо сейчас и тем кто хочет поддержать разработчиков
источник

АК

Алексей Клименко... in use Perl or die;
Хотя я никогда в кинотеатры не хожу, а через годик с интернета все фльмы скачиваю…
источник

VG

Vadim Goncharov in use Perl or die;
классический же вопрос при построении модели угроз и собственно системы безопасности
источник

VG

Vadim Goncharov in use Perl or die;
чем бы?
источник

АК

Алексей Клименко... in use Perl or die;
Юз дейвил…
источник

VG

Vadim Goncharov in use Perl or die;
так это же называется урлы
источник