Pull to refresh

Comments 29

Ответ-то вы сами правильно в заключении написали. Нормальные игроки могут играть оффлайн, что огромный плюс. Небольшим процентом читеров при этом можно пренебречь. Проделанной работе — респект.
Спасибо. Да, грань между удобством и безопасностью я понимаю. Больше интересует информация про компилятор и обфускацию имен.
Таки без всяких PDB, оно при дебаже будет показывать эти самые «sub_xxxxx».
Если игрушка пошаговая, то здесь даже не нужно выбирать между удобством и безопасностью. Достаточно запоминать сыгранные партии на клиентах до следующего соединения и перепроверять их сервером. Если сервер обнаруживает несоответствие, не засчитывать партию и, возможно, оповещать специально обученных модераторов.
>Однажды, дождливым летним вечером мы с моей девушкой искали чем себя занять. Фильм смотреть не хотелось, но и вылезать из постели желания не было. Выбор пал на мобильную игрушку.

Эх… Вот так вот и вымрут все программисты в мире… ))
Но так и мы же не кролики )
Давно я не получал такого удовольствия от прочтения статьи. Люто плюсую!

jd уже пора отправлять на пенсию, есть Procyon и CFR — вполне себе достойная замена.
Поэтому я запустил поиск «base64» по проекту, и нашел класс, реализующий Base64 decode и encode. Этому я очень удивился, потому что эти методы не были просто оберткой для библиотечных, а, судя по коду, действительно реализовывали кодирование и декодирование Base64.


Ничего удивительного. Как-то пытались подружить кутешное приложение с питоньим. Выяснилось что трактуют RFC они по-разному.
Очень странно. Обе библиотеки были стандартными? В моем случае чуть позже нашлось использование android.utils.Base64 вместо своей реализации.
Да. Решилось все добавлением

data.replace("/", "%2F");
data.replace("+", "%2B");
И всё это в постели с девушкой? ) Неужели не возникло желания заняться чем-либо ещё?
Однажды, дождливым летним вечером мы с моей девушкой искали чем себя занять.

Скажу честно, на этой стадии я потратил около 20-30 часов своего времени.

Это вы неплохо так себя заняли :)
Есть ли внутриигровая торговля? А то можно было бы зарабатывать деньги нечестным путем.
Нет, трейда в игре нет. Да и заработка там мало — проходится только один уровень из трех/пяти/десяти, а сделать таких походов можно около восьми за 5 часов. Единственный более или менее приятный бонус — победа над любым противником на арене (что интересно, вы не можете посмотреть, какими монстрами вас победили. Можно лишь увидеть тех, которые стоят у противника в дефе). Рейтинг считается по системе Эло, поэтому побеждая противника с большим рейтингом, вы получаете много очков (в то же время, если противник идет вам мстить, то отнимается у вас гораздо меньше). Ну а недельные награды за рейтинг там неплохие.
Да, каюсь, пишу половину комментария, постю, потом вторую половину через «редактировать» :)
Функции вида «sub_*» — то, как вы их видите с перспективы IDA, то есть уникальное название, которое им присваивает сама IDA. В C/C++ всё, что компилируется без экспортирования функций, будет абсолютно с идентичными названиями.
Абсолютно защищённого софта не существует. Скажем, любой человек с познаниями равными вашим сможет проделать всё тоже самое, причём, есть ещё как минимум несколько путей с помощью которых вы можете добиться нужного результата.
Единственный беспроигрышный вариант — обработка всего сервером, но требует больше ресурсов и большей внимательности, поскольку уязвимые места могут быть и там.
Спасибо за ответ про имена функций.
Да, к сожалению разработчиков (любых), иногда приходится доверять данным с клиента в угоду удобства конечных пользователей. Ну а то, что любые данные, переданные клиентом, можно подделать — понятно всем.
Не всегда можно подделать клиентские данные. Например в Триплекс habrahabr.ru/post/141085/, чтобы получить код решения уровня, нужно решить его. Каждый уровень зашифрован кодом решения предыдущего. Думаю, что в некоторых играх можно придумать инвариант, который бы достигался только в результате победы и было бы сложно подобрать для него простую формулу.
Недолго играл в эту игру. Когда впервые получил ответ «Resend Battle Results?», понял, что читеров в ней должно быть немерено, и бросил.
Я тоже играю в эту игру *Злой читак потирает руки*

Спасибо за статью, было очень интересно.
Поражаюсь вашей воле к победе.
Ход мыслей хороший и вполне логичный для фана и вечера/ночи. Пробуем «попроще», а в итоге, как обычно, убиваем сутки, если не больше. Мне нравится ваш инструментарий, удивляет вопрос на счет имен функций. Расскажите вкратце о себе, в профиле информации нет, пытаюсь уложить в голове, как web-девелопер (python/php) оказался готов к такому низкому уровню и с опытом использования той же иды (кстати, убрали бы упоминание из текста, все-таки, сомнительно, что официальная или все ок?).
Было бы желание (ну и гугл). До этого случая мне не приходилось сталкиваться ни со smali кодом, ни с инструкциями процессора. Поэтому так много времени и ушло. Плюс, я упомянул в посте топик форума, который сэкономил мне часов десять, а то и двадцать. По поводу Ida — использовалась лицензия коллеги, а не рассказать про этот инструмент было бы неправильно, слишком большой вклад он внес.
А пробовали вводить название пакета в GitHub? =)
Вы спалили игру N скриншотами.
Игру N можно узнать еще по описанию. По этому же описанию те, кто в нее не играл, могут найти ее в гугл плей без особого труда.
Название нигде не раскрывается только ради того, чтобы не появляться в гугле по запросам «gamename взлом/хак/эксплойт».
Все что не умеет GD-GUI умеет DJ Java Decompiler
это если INTERNAL ERROR получили.

а копаться в ассемблерном коде — это уже самое последнее, что можно предпринять.
Ну, как видите, в Java коде все равно ничего не нашлось. А за ссылку спасибо.
Можно посмотреть ещё На сайте 101android.ru там тоже много программ для взлома игр
Sign up to leave a comment.

Articles