Предложу свой вариант системы. Возможно, кому-то покажется экзотическим (я тоже считаю его слегка вычурным, если так можно выразиться в отношении защиты), но всё же: пишем серверную обвязку на чистых сокетах, в лаунчере, соответственно, тоже. Никаких PHP-скриптов или чего-то общепринятого не используем, всё будет реализовываться напрямую между программами. Делаем двунаправленную связь так, чтобы сервер мог общаться с лаунчером, а лаунчер - с сервером. Дальше делаем стандартные проверки (рассчитываем, скажем, контрольные суммы - что угодно), устанавливаем соединение, посылаем данные серверу. Лучше всего посылать единую контрольную сумму, в которую войдут контрольные суммы файлов, лаунчера, соль (например, время её генерации), чтобы можно было проверить её правильность. Сервер, в свою очередь, обрабатывает данные, всё сверяет, после этого подключается напрямую к серверу, заносит игрока в белый список в зависимости от правильности данных, после этого посылает клиенту ответ, типа, можешь заходить. Клиент подключается, сервер это видит и как только игрок присоединился, вышвыривает игрока из белого списка. Пока игрок на сервере, удаление его из белого списка никак на нём не отразится, но стоит ему выйти с сервера - и больше он не зайдёт. Согласен, немного неудобно перезаходить через лаунчер, если вышел с сервера чтобы не убили, пока отлучился до ветру, но это всё мелочи. И на лаунчер навесить защиту. Тут, конечно, прорекламирую свой Периметр, раз уж такая пляска пошла. Авторизация и регистрация делается по тому же принципу (через сокеты), личный кабинет в лаунчере. Впрочем, это уже по выбору. Регистрация и работа с личным кабинетом ни на что не влияет, просто для единообразия - если делать через сокеты, то всё сразу.
Что нам это даёт:
1) Намного более быстрое общение между лаунчером и сервером
2) Нет HTTP, перехватить тем же HTTPAnalyzer'ом данные не получится (но перехватить можно)
3) Клиенту не нужна сессия
4) Возможность слать любые данные по каналу, которые переслать в обычном (бесфайловом) POST-запросе не получится - даёт простор для алгоритмов шифрования
5) Перехват данных не будет иметь смысла, т.к. перехват данных идёт уже "по факту", когда авторизация состоялась, а на подмену файлов не будет времени, да и лаунчер некоторое время после авторизации ещё сможет проверять данные, прежде чем его закроют. А если лаунчер не закроют, то можно проверять контрольные суммы файлов в автономном режиме или по запросу с сервера. А если при закрытии лаунчера закрывать процесс с майном (хэндл процесса джавы у нас есть, никаких проблем - делаем с процессом что угодно: свободно читаем и изменяем любой участок процесса), то можно в процессе игры сканировать память джавы на предмет внедрения какого-либо стороннего кода. Тут уже вопрос к знающим - по каким признакам можно определить внедрённый в процесс чужеродный код или подключенный отладчик? Да и можно ли?
6) Сложность в определении алгоритма генерации контрольной суммы, так как алгоритмы хэширования (сделанные вручную), занимают большое количество кода даже на языках высокого уровня и даже там логика зачастую непонятна, про ассемблерный листинг и говорить нечего. Это даст гарантию, что никто не напишет генератор верных контрольных сумм
7) Уникальность каждого захода на сервер - нельзя подключиться по одному нику (IP'у - неважно) дважды
8) Сложно обойти, а чтобы поиграть с читами, использовать AttachAPI никто всерьёз не будет
Минусы:
1) Сложность реализации клиент-серверного взаимодействия через сокеты, особенно для школьников\си-диезщиков\джавистов, которые сокеты никогда "в руках не держали".
2) Даже если предоставить вышеупомянутым кодерам готовую библиотеку, написать, как её грузить в память из ресурсов основного приложения, не таская отдельно с собой, чуть менее, чем всем будет лень писать собственные базы.
3) Сложность в непосредственной отправке команд управления серверу (внесение и удаление игроков из белого списка).
4) Наверняка вышеупомянутые кодеры сделают кривой велосипед, либо попытаются сделать программу такого вида на своём любимом шарпике\джавочке
5) Так как сокеты - штука, требующая многопоточности (имею в виду синхронный режим), вангую многочисленные утечки памяти\незакрытые соединения.
Ну и в завершение хочу сказать, что систему такого рода я в данный момент разрабатываю, обёртки над сокетами готовы (многопоточность, все дела), лаунчер готов, пишу серверную обвязку.