Plist файл как найти ресурсы. Меняем параметры игр на примере Fieldrunners

Файлы PLIST разбросаны по всему вашему Mac, но вполне возможно, что вы никогда их не увидите. Это плохо, так как файлы PLIST, по сути, предоставляют один из наиболее прямых путей к хакингу. Изучив рекомендации, приведенные в данном рецепте, вы овладеете всей мощью этих файлов.

PLIST - это сокращение от «property list» (список свойств), и редактирование файлов с этим расширением имени представляет собой основной метод модификации Mac OS X (а также некоторых других операционных систем). С помощью этого метода вы можете организовать данные таким образом, чтобы к ним могли получать доступ программы, и при этом они структурированы так, что при необходимости пользователи могут создавать собственные файлы этого типа. Это краткое описание, разумеется, практически ничего не говорит, но детальное описание файлов PLIST - это сложная и трудоемкая задача. Если вы действительно заинтересованы в функциональных возможностях файлов PLIST, внимательно изучите следующую документацию: http://developer.apple.com/documentation/Darwin/Reference/Manpages/man_/plist._.html или запустите программу Terminal и введите следующую команду: man plist.При настройке компьютера в соответствии с вашими личными потребностями, наиболее часто приходится настраивать файлы PLIST, в которых хранятся значения по умолчанию для настроек различных программ - от стандартных цветов до реакции программ на те или иные действия. Как правило, эти файлы находятся в папке Library/Preferences вашего домашнего каталога. В большинстве случаев модификация этих файлов безвредна, и при этом позволяет разблокировать довольно неожиданные функциональные возможности. Если вы случайно повредите файл при редактировании, вы можете просто переместить его в Корзину, и при следующем запуске приложения взамен удаленного файла будет сгенерирован новый. Разумеется, при этом вы потеряете все индивидуальные настройки, созданные для этой программы, поэтому лучший способ (как и во всех случаях хакинга, при возможности) заключается в том, чтобы создать резервную копию этого файла с целью последующего восстановления в случае неполадок.


Существует множество способов доступа к файлам PLIST. Наиболее быстрый из них - из программы Terminal с помощью команды default. Рассмотрим простой пример. Некоторые программы можно настроить таким образом, чтобы они отображали меню Debug (большинство пользователей, активно работающих с приложением iCal, знают, насколько полезным может быть это меню). Давайте рассмотрим, каким образом можно настроить iCal таким образом, чтобы добавить в строку меню команду Debug:

  1. При необходимости закройте приложение iCal.
  2. Запустите программу Terminal (Applications/Utilities/Terminal).
  3. Когда на экране появится приглашение к вводу (символ $), введите следующую команду: defaults write com.apple.iCal IncludeDebugMenu
  4. Перезапустите приложение iCal.

После появления окна приложения вы увидите, что в нем появилось новое меню Debug (рис. 1.15).


Приложение Terminal предоставляет великолепные возможности, когда вы знаете, что именно следует поменять. Однако если вы этого не знаете и лишь стремитесь узнать, какие настройки следует изменить, оно уже не будет столь полезным. Для этой цели вам понадобится список свойств (property list). Как было упомянуто в начале этого раздела, обычно большинство файлов PLIST находятся в папке Library в вашем домашнем каталоге. Для файла PLIST, содержащего настройки iCal, путь будет выглядеть следующим образом: ~/Library/Preferences/com.apple.ical.plist. Как только вы обнаружите нужный файл, откройте его редактором списков свойств (Property List Editor). Как было рассказано , этот редактор входит в состав Xcode Tools и устанавливается в папке /Developer/Applications. Кроме того, вы можете просто выполнить двойной щелчок мышью на нужном файле, и он будет открыт для редактирования (рис. 1.16).


После того как файл будет открыт, вы сможете отредактировать любую из его строк. Большинство строк не имеют большого практического значения, но некоторые из них имеют явно выраженный смысл и позволяют редактировать функциональные возможности приложения. Например, изменение числового значения в строке delete todos after с 30 на 60 приведет к тому, что задачи, принятые к исполнению, будут храниться в течение 60 дней.

Итак, теперь вы вооружены командной строкой и программой, позволяющей редактировать файлы PLIST, экспериментируя с их настройками. Кроме того, файлы PLIST можно редактировать и обычным текстовым редактором. В версиях Mac OS X, более ранних, чем Tiger, файлы PLIST можно было непосредственно открывать текстовыми редакторами, но теперь эти файлы хранятся в двоичном формате. Чтобы открыть файл PLIST текстовым редактором, вам потребуется предварительно преобразовать его. Какой из методов преобразования файлов PLIST является наиболее простым? На помощь снова придет приложение Terminal.

Файл PLIST приложения iCal уже достаточно хорошо изучен, так что теперь попробуем модифицировать закладки браузера Safari. Полный путь к файлу PLIST с настройками Safari выглядит так: ~/Library/Safari/Bookmarks.plist. Прежде всего, создадим его резервную копию (как и рекомендуется поступать в большинстве случаев). Для этого наведите на файл курсор мыши, щелкните правой кнопкой и из контекстного меню выберите команду Duplicate. Теперь выполните преобразование этого файла с помощью следующей командной строки: $ plutil -convert xml1 ~/Library/Safari/Bookmarks copy.plist

В данном случае команда plutil запускает процедуру преобразования списка свойств. Ключ -convert xml1 сообщает plutil о необходимости преобразовать файл PLIST в формат XML, а остальная часть командной сроки задает путь к преобразуемому файлу. После того как команда отработает, переместитесь в нужную папку в помощью Finder, наведите на нужный файл курсор мыши, щелкните правой кнопкой и выберите из контекстного меню команды Open With → Other, а затем выберите опцию Text Edit. Файл PLIST, преобразованный в формат XML, выглядит вполне удобочитаемым (рис. 1.17).

Разумеется, файлы PLIST заслуживают намного более тщательного изучения, но приведенный здесь необходимый минимум информации уже позволит вам начать их исследование и экспериментировать с настройками.

Самой частой причиной проблем с раскрытием файла PLIST является просто отсутствие соответствующих приложений, установленных на Вашем компьютере. В таком случае достаточно найти, скачать и установить приложение, обслуживающее файлы в формате PLIST - такие программы доступны ниже.

Поисковая система

Введите расширение файла

Помощь

Подсказка

Необходимо учесть, что некоторые закодированные данные из файлов, которые наш компьютер не читает, иногда можно просмотреть в Блокноте. Таким образом мы прочитаем фрагменты текста или числа - Стоит проверить, действует ли этот метод также в случае файлов PLIST.

Что сделать, если приложение со списка уже было установлено?

Часто установленное приложение должно автоматически связаться с файлом PLIST. Если это не произошло, то файл PLIST успешно можно связать вручную с ново установленным приложением. Достаточно нажать правой кнопкой мышки на файл PLIST, а затем среди доступных выбрать опцию "Выбрать программу по умолчанию". Затем необходимо выбрать опцию "Просмотреть" и отыскать избранное приложение. Введенные изменения необходимо утвердить с помощью опции "OK".

Программы, открывающие файл PLIST

Mac OS

Почему я не могу открыть файл PLIST?

Проблемы с файлами PLIST могут иметь также другую почву. Иногда даже установление на компьютере программного обеспечения, обслуживающего файлы PLIST не решит проблему. Причиной невозможности открытия, а также работы с файлом PLIST может быть также:

Несоответственные связи файла PLIST в записях реестра
- повреждение файла PLIST, который мы открываем
- инфицирование файла PLIST (вирусы)
- слишком маленький ресурс компьютера
- неактуальные драйверы
- устранение расширения PLIST из реестра системы Windows
- незавершенная установка программы, обслуживающей расширение PLIST

Устранение этих проблем должно привести к свободному открытию и работе с файлами PLIST. В случае, если компьютер по-прежнему имеет проблемы с файлами, необходимо воспользоваться помощью эксперта, который установит точную причину.

Мой компьютер не показывает расширений файлов, что сделать?

В стандартных установках системы Windows пользователь компьютера не видит расширения файлов PLIST. Это успешно можно изменить в настройках. Достаточно войти в "Панель управления" и выбрать "Вид и персонализация". Затем необходимо войти в "Опции папок", и открыть "Вид". В закладке "Вид" находится опция "Укрыть расширения известных типов файлов" - необходимо выбрать эту опцию и подтвердить операцию нажатием кнопки "OK". В этот момент расширения всех файлов, в том числе PLIST должны появится сортированные по названию файла.

Вы хорошо поработали, и вот ваше приложение в App Store!

  • Храните учётные записи юзеров?
  • Используете встроенные покупки?
  • Не хотите показывать своё ноу-хау?
Повод задуматься о безопасности кода и данных! Мы будем искать уязвимости в тестовом приложении. В этой статье поговорим о безопасности данных, а в следующей - перейдём к коду.

Disclaimer

Цель данного урока - не сделать вас хакером, а показать, как злоумышленники могут обвести вас вокруг пальца. В статье пропущена кое-какая инфа, необходимая для взлома реального приложения на девайсе. Будем мучить симулятор (кстати, это вроде бы даже законно ).

Disclaimer от переводчика: из оригинального текста убрано много «воды» и отсылок к Голливуду (и так длинно). Добавлен ряд ключевых пояснений.

Итак

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

Приступим

Нам понадобится:
1. Утилита class-dump-z ;
2. Прокси для отладки по сети, например, Charles (триал-версия отличается надоедливыми сообщениями и работает максимум 30 минут за 1 сеанс). В комментах к исходнику статьи советуют альтернативу Чарльзу - Burpsuite .

Чтобы вы творчески подошли к процессу, предлагаю вам сценарий. Представьте: вышло новое приложение для айпада - «Собиратель мемов» (Meme Collector). Всем нравится. Но вам шепнули на ухо, что встроенные покупки вытянут из вас значительную сумму денег.

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

Небольшое упрощение

Из-за длины этого урока мы изначально допустили некоторые упрощения в тестовом проекте. Например, «покупка» игровой валюты представляет из себя не настоящий in-app purchase, а фэйковый запрос к StoreKit (всё происходит локально на девайсе).

Что к чему? «Карта» приложения (application mapping)

Взглянем на приложение с высоты птичьего полёта! Что оно делает, с точки зрения пользователя? Какова его основная структура?

Связка ключей «повышает ставки» для хакера. Злоумышленники не смогут ничего стянуть, если устройство заблокировано.

Тем не менее, не стоит полностью полагаться на одну только Связку ключей! И вот почему. Связку ключей поддерживает Apple. (Ну вы уже всё поняли, да?) Информация в ней зашифрована паролем пользователя, который обычно является простым 4-значным цифровым кодом. А это значит, что атака брутфорсом займёт минут двадцать. Узнав пароль, легко сдампить всю связку ключей.

  • Шифруйте данные! Связка ключей вроде как безопасна, но это приоритетная цель для хакеров, поэтому её ломают в первую очередь. (Про джейлбрейкнутые устройства вообще нечего говорить - для них существуют утилиты, показывающие содержимое Связки ключей.) Усложните жизнь взломщикам хотя бы ненамного: шифруйте данные с помощью CommonCrypto API , который входит в состав стандартного Security Framework (пример).
  • Не прописывайте ключ шифрования в приложении. Длинная строка в секции данных представляет потенциальный интерес для хакера. И вообще: если закрытый ключ прописан в приложении, злоумышленник может выложить его в сеть, скомпрометировав данные всех пользователей приложения! Обязательно генерировать уникальный ключ шифрования на каждом устройстве.
  • Контролируйте код! Конкретно - следите за возможностью хакера использовать ваш код в своих целях. Ваш метод шифрования/дешифрования может быть самым прекрасным решением. Но хакеры возьмут отладчик и применят ваш метод дешифрования к вашим же зашифрованным данным. Вы увидите это во второй части данного туториала (следующий пост).
  • Это точно нужно хранить? Раз злоумышленник может искать, модифицировать и выполнять ваши бинарники - просто спросите себя: эту информацию действительно нужно хранить на девайсе?

Сеть: тестирование на проникновение

Ещё хакеры любят наблюдать, как приложение взаимодействует с сетью. Самый тупой способ увидеть, происходит ли какая-то работа с сетью на устройстве, это поискать URL"ы в бинарнике.

Находясь в папке бандла (Meme Collector.app), наберите в терминале:

Strings "Meme Collector"
Стой, куда столько! Команда strings идёт по разделам бинарника и выводит все элементы данных, похожие на строки. Отфильтруем шум:

Strings "Meme Collector" | grep http
А, ну вот, одна строка:

Http://version1.api.memegenerator.net/Generator_Select_ByUrlNameOrGeneratorID
Похоже, в какой-то момент приложение обращается к генератору мемов по этому урлу. Будучи хакером, вы бы хотели исследовать это дело дальше, изучив сетевой трафик приложения. Для этого нам понадобится сетевой монитор, перехватывающий все входящие и исходящие запросы.

Charles, упомянутый в начале статьи - хороший вариант для такого исследования. Скачайте его, если ещё не сделали это. Установите и запустите.

Проверьте, что Charles ловит сетевое взаимодействие с симулятора iOS (путём запуска «Карт», или в Safari набрать урл). Вы увидите, как в Charles побегут сетевые запросы. Если этого не произошло, убедитесь, что в меню Proxy > Mac OS X Proxy галочка установлена.

Кстати, Charles отлично перехватывает SSL-трафик.

Мы не будем это делать, потому что не увидели HTTPS-урлов на выходе команды strings . Но этот шаг потребуется для других приложений, которые могут использовать HTTPS. В меню Proxy > Proxy Settings… > SSL нужно включить SSL-прокси и добавить домены, по которым требуется перехватывать (и расшифровывать) HTTPS-трафик. Пока вы это не сделаете, SSL будет выглядеть примерно так:


При работающем Charles перезапустите Meme Collector. После запуска вы должны увидеть три запроса к version1.api.memegenerator.net , нажав на треугольник слева от урла (см. ниже). Раскроются три запроса, отличающиеся GET-параметрами. Например, у первого один GET-параметр: urlName=Foul-Bachelor-Frog - это видно на вкладке Request.

Выберите вкладку Response и затем внизу JSON. Ответ сервера, расшифрованный из JSON, представлен в виде красивой таблички:

Мы видим здесь множество строк вида «ключ-значение»: заголовок (displayName), описание (description), URL картинки (imageUrl) - в общем, некая информация по данному типу мемов «Four Bachelor Frog» из GET-параметра.

Похоже на то, что мы видели в приложении, правда? Двум другим картинкам в этот раз повезло меньше, они так и не дождались ответа от сервера (Charles сообщает об этом на вкладке Overview) и поэтому не отобразились в приложении.

А я вообще не вижу, чтобы запрашивались картинки!

При повторном запуске картинки могут браться из кэша симулятора, Charles лб этом не знает. Очистите кэш и перезапустите приложение.

Rm -R Library/Caches/

Итак, с определённой долей вероятности делаем вывод: приложение берёт мемы с данного API и представляет их в виде платного контента. А что если попытаться изменить URL с целью приобрести какой-то новый контент, кроме этих трёх мемов? Непохоже, что тут есть проверка, действительно ли приложение получает с сервера то, что ожидал разработчик!

Вам уже надоели эти три мема? Ну-ка попробуем, можно ли отобразить и «купить» что-то новое, скажем, «Success Kid».

Выберите в меню Charles: Tools > Rewrite . Эта функция позволяет перехватывать входящие/исходящие запросы и модифицировать их по тем правилам, которые вы установите. Включите галочку Enable Rewrite . Правила группируются в «наборы» (Sets). Под списком Sets нажмите Add для добавления нового набора правил. По желанию, переименуйте (Name). Мы создали набор правил, но он пока пустой. Давайте добавим правило - в разделе Rules есть кнопка Add , нажмите её.

Открылось окно Rewrite Rule. Измените Type на «Modify Query Param» («Изменить параметр запроса») и заполните два поля:

  • Match > Name: urlName
  • Replace > Value: success-kid

Нажмите OK, OK. Перезапустите приложение… Success! Мы можем покупать контент, который ранее был недоступен.

Интересно: для этого нового мема указана конкретная цена. Откуда? Приложение должно было как-то определить стоимость, исходя из JSON-ответа.

Откройте вкладку Response и посмотрите на JSON, который возвращает сервер. Что может определить стоимость цены?

Попробуйте найти JSON-ключи, которые могут определить стоимость мема в приложении. Может быть, это generatorID, totalVotesScore, instancesCount, templatesCount или ranking. В качестве упражнения для вас: найдите тот ключ, который влияет на стоимость мема.

Чтобы сделать это, перейдите к Proxy > Breakpoints. Нажмите Enable Breakpoints и нажмите Add , чтобы добавить новую точку останова. Появится окно Edit breakpoint, введите в нём следующие данные:

  • Protocol: http
  • Host: version1.api.memegenerator.net
  • опция Response включена

Теперь перезапустите приложение. Как только нам придёт ответ с сервера, сработает точка останова (breakpoint). Когда это произойдёт, щелкните на вкладке Edit Response, внизу выберите JSON:

Здесь вы можете вручную модифицировать JSON-ответ, который пойдёт в приложение. Поиграйтесь с этими параметрами и попробуйте определить, какие ключи влияют на цену, отображаемую в приложении. Изменив JSON-ответ, нажмите Execute (выполнить) для отправки ответа. Приложение делает три запроса к API, поэтому вам понадобится нажать Execute трижды.

Важно: действуйте быстро! AFNetworking имеет таймаут 30 секунд. Если вы перехватили ответ, но не успели внести изменения, AFNetworking вернёт ошибку таймаута запроса и выполнит соответствующий обработчик в коде (который в данном случае не делает ничего). Если у вас вышло время, перезапустите приложение и попробуйте снова.

Что дальше?

Вы открыли в себе хакерские способности и выполнили простейшие тесты на проникновение на примере файловой системы и сетевого взаимодействия конкретного приложения. Вы победили простые plist"ы и даже можете модифицировать ответы сервера.

Возможно, эти знания повысят безопасность вашего iOS-приложения… чуть-чуть. В следующей части мы углубимся гораздо дальше в недры приложения, будем изменять его функционал! А пока вы ждёте, когда я выложу перевод (до следующей пятницы), можно много чего попробовать на тему хранения данных в приложении:

Замечания по поводу перевода или неработающих примеров можно отправлять на почту dev @ x128.ru .

Основа стабильности любой операционной системы — это ограничение доступа к важным файлам , от которых зависит работа компьютера, или попросту «защита от дурака». В Mac OS X, как во всех остальных *nix-системах, эта защита реализована через права доступа, группы и владельцев объектов. Прочитать обо всём этом вы можете в о Терминале Mac OS X, а сегодня речь пойдёт не столько о защите, сколько о способах её преодоления.

Зачем это нужно? Рано или поздно любой пользователь Мака сталкивается с необходимостью что-нибудь отредактировать в настройках системы или отдельных программ. Ну а владельцы хакинтошей сталкиваются с этой необходимостью чуть ли не каждый день. Как же обойти хитрую систему присвоения прав доступа, чтобы что-нибудь поменять в системе исключительно ради благой цели?

Стандартным форматом настроек Mac OS X и программ для неё является PLIST. Это обычный текстовый файл, который по умолчанию откроется в текстовом редакторе TextEdit. Теперь представьте, что вы открыли такой файл, внесли все нужные изменения и теперь хотите сохранить его. Но не тут-то было! Вы увидите вот такую ошибку:

Вариант у вас только один — сохранить файл ещё где-нибудь. Но это очень и очень плохой вариант. Во-первых, вы потом не сможете скопировать этот файл в его исходную папку. Система просто не даст вам перезаписать имеющийся файл (и будет права). Ну а если вы удалите старый файл и только затем скопируете в ту же папку отредактированную копию, то она скопируется, но будут нарушены права доступа. А это грозит вам самыми загадочными и непредсказуемыми глюками.

Именно поэтому мы рассмотрим несколько других вариантов.

1) Редактирование через Терминал

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

В самом Терминале есть несколько встроенных средств редактирования, например, команды nano и vi . Воспользоваться ими проще простого. Сначала нужно приобрести права root-администратора. Введите команду:

Затем вслепую введите пароль и нажмите Enter.

А теперь достаточно ввести:

nano путь к файлу

Например:

nano /Library/Preferences/SystemConfiguration/com.apple.Boot.plist

Или можно ввести nano и пробел, а потом перетащить редактируемый файл в окно Терминала. Останется нажать Enter. Работа с командой vi осуществляется точно так же.

Но редактировать файл в таком режиме — удовольствие не из приятных. Судите сами: никакого управления мышью тут не предвидится, и даже курсор придётся передвигать с клавиатуры.

Полезный совет: чтобы выйти из nano, закройте Терминал или нажмите на клавиатуре Ctrl+X.

2) Запуск текстового редактора с правами администратора

Второй способ более элегантен. Он позволит вам пользоваться обычными программами Mac OS X для правки текста, но запущенными от имени администратора. В этом случае никаких ошибок с правами доступа не возникнет.

Запустите Терминал, введите sudo -s и пароль. Затем нужно будет ввести громоздкую конструкцию типа:

/Applications/TextEdit.app/Contents/MacOS/TextEdit

Заметьте: через Терминал нужно запускать не саму программу (т.е. файл TextEdit.app), а её бинарник, упрятанный внутри программы, в подпапке Contents/MacOS .

После этого TextEdit отлично сможет работать с любыми файлами, но только до первого закрытия программы.

3) Сторонние специализированные программы

Не можем не порекомендовать текстовый редактор . Это продвинутая версия TextMate, которая делалась в расчёте на программистов, но будет полезна на каждом Маке (а на хакинтоше тем более). К вашим услугам — наглядное форматирование текста, работа с самыми разными кодировками и главное — поддержка работы с защищёнными файлами без дополнительных махинаций в Терминале.

При сохранении защищённого файла TextMate предложит вам ввести пароль, и без проблем сохранит все изменения.

Впрочем, цена — явно не достоинство TextMate. После окончания 30-дневного триала с вас попросят 39 евро . Разработчики оправдываются, указывая на огромное количество встроенных модулей по обработке разных скриптов и языков программирования:

Только вот зачем они рядовому пользователю? Если же цена вас не отпугивает, то можете скачать TextMate по ссылке ниже.

Лет 7 назад я баловался программой Art Money для взлома параметров для игр. Можно было, например, увеличить количество денег героя за пару минут.

Да мы получали много денег или увеличивали параметры героя, но играть после этого обычно становилось неинтересно. Потому я перестал пользоваться Art Money. Но менять параметры некоторых игр на iPad оказалось гораздо проще без всяких программ – потому я решил, что попробовать можно.

Давайте посмотрим на примере Fieldrunners .

Что можно изменить в игре, чтобы без проблем проходить сотни уровней? Первое что пришло в голову - это параметры стрельбы. Увеличить мощность пушек оказалось довольно просто.

Воспользовался я программой iFile .

Зашел в неё в папку игры Fieldrunners нажав последовательно кнопки Домой – > Applications – > Fieldrunners. Далее заходим в папку Fieldrunners.app. После беглого просмотра файлов я нашел, что параметры оружия находятся в файлах, начинающихся на tower. Берем самую простую пушку из файла Tower_gatling.tower. Файл открываем редактором текста.

Видим параметры для первого уровня оружия:

MinDamage=43 // минимальный урок
MaxDamage=43 //максимальный урон
AttackRadius=72.0 // радиус атаки

Увеличиваем эти параметры в 100, 100 и 10 раз соответственно. «Изменить», а после изменения «Сохранить»

Теперь заходим в игру Fieldrunners и самое слабое орудие теперь вам позволит пройти сотни уровней без проблем.

Правда возникает вопрос: а нужно ли вам это - станет ли интересней играть? Хотя удивить друга, с которым вы соревнуетесь в какой-то игре – вполне можно.

Мне лично стало безынтересно играть после такого изменения… Поэтому я всё вернул назад)

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то