Защита от читеров в клиент-серверной игре
Универсальный механизм — обфускация кода на клиентской стороне и хоть какое-нибудь шифрование трафика. Это не прикроет возможность читерства, но сделает его сложнее/дороже.

p.s. личное нохау, попробуйте периодически вместе с обфускацией постоянно изменять алгоритмы шифрования, меняйте все что возможно, формат структур критичных ко взлому (игровых) данных. Подкидывайте в код обманки, делайте в коде специальные ошибки (например функцию назвали md5, но в ее коде сделайте несколько изменений). В общем максимально усложняйте жизнь тем кто будет декомпилировать и изучать ваш код.

Универсальная, что-либо гарантирующая альтернатива, — перенести всю или часть обработки логики игры на сервер. Основной недостаток — серьезные повышения требования к сети (чаще невыполнимые для мобильных устройств) и, иногда, повышение нагрузки на сервер.

p.s. p2p связь возможна? перенесите часть обработки (проверки валидности/реальности событий управления персонажами) на соседнего клиента (ближайшего с точки зрения сети) — это поможет частично разгрузить сервера.

В любом случае защититься от автоматизаторов действий все равно будет нереально, ведь можно изучать изображение на скрине и имитировать нажатия на кнопок. От этого можно спастись только вменяемой игровой логикой, не требующей от игроков тупых монотонных действий…
Пожалуйста, уточните условие «Пользователи будут проходить квесты и получать за это какие-то бонусы, которые затем через обычный HTTP GET/POST будут передаваться на сервер». Кто будет передаваться? Бонусы?

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