Хтось редагував файл гри plist. Чим відкрити файл.PLIST? Сторонні спеціалізовані програми

- Розширення (формат) – це символи наприкінці файлу після останньої точки.
- Комп'ютер визначає тип файлу саме з розширення.
- За промовчанням Windows не показує розширення імен файлів.
- У імені файлу та розширення не можна використовувати деякі символи.
- Не всі формати стосуються однієї і тієї ж програми.
- Нижче знаходяться всі програми, за допомогою яких можна відкрити файл PLIST.

В інтернеті дуже багато програм, що дозволяють редагувати вихідний код іншої програми, файлу та ін. Однак більшість з подібних програм є лише текстовим редактором на кшталт блокнота. Відрізняються вони від вищезазначеного редактора лише тим, що мають підсвічування синтаксису. Однак у деяких випадках такого функціоналу програми виявляється недостатньо. Програмісту буває необхідно швидко знаходити різні частини документа. І ось, нарешті, з'явилася програма, що дозволяє вирішити цю проблему. Програма називається SynWrite. Її відмінна особливість – наявність навігаційної панелі з деревом, що використовується для...

Консольна команда defaults, мабуть, одна з найзвичніших для простих мак-користувачів. Однак без належної вправності це не найзручніший інструмент роботи з plist-файлами. Куди простіше займатися цим за допомогою звичної віконної програми PlistEdit Pro.

По суті, ця утиліта віддалено нагадує редактор реєстру Windows. Правда, тут деревоподібна структура відображається в таблиці параметрів, а значення редагуються за місцем, а не у вікні. В іншому ж дуже схоже з «Регедитом» – світори оцінять. 🙂

Втім, найголовніша перевага PlistEditor Pro полягає в тому, що вона легко читає конфігураційні файли Mac OS X, вміст яких зберігається не тільки у вигляді XML-коду (ці можна редагувати і в простому Text Edit), а й у бінарному форматі. І в тому, і в іншому випадку ви побачите у вікні PlistEdit Pro зрозумілу таблицю конкретних величин та їх значень.

Примітно, що конфігураційні файли, які ви хочете переглянути або редагувати, не потрібно шукати за місцем розташування. Замість цього достатньо відкрити вікно Preference File Browser (тобто "браузер конфігураційних файлів") - і через кілька секунд ви побачите таблицю файлів, багато з яких будуть прив'язані до конкретних додатків (власне, параметри цих додатків і зберігаються у відповідних файлах). Якщо самостійний перегляд цієї таблиці не допоміг визначитися з тим, який plist-файл вам потрібен - скористайтеся пошуком, який враховує або ім'я файлу або програми, або входження пошукового запиту у вміст шуканого файлу. У другому випадку можна налаштувати поле зору пошуковика: щоб він враховував тільки ключі, ключі і значення, тільки значення, логічне правило входження пошукового рядка і т. д. Тобто пошук файлів, м'яко кажучи, налаштовується гнучко.

Якщо необхідні конфігураційні дані зберігаються в нестандартній папці, і ви знаєте шлях до неї просто перетягніть цю папку у вікно «браузера». І щоб більше не повторювати цю процедуру, можна зберегти поточний список файлів, клацнувши на кнопці Save Browser. Збережені таким чином "браузери" можна перейменовувати або видаляти через непотрібність.


Медіатека iTunes зберігається у тому ж XML-форматі. Постає питання, чому її не можна завантажити в PlistEdit Pro? Звісно, ​​якщо знаєш, навіщо це робити. 🙂

Створення нових ключів та вузлів, завдання значень, визначення формату конфігураційного файлу виконується або безпосередньо в самій таблиці вмісту відкритого файлу, або у вигляді головного меню програми. І незважаючи на свою непоказність, PlistEdit Pro – дуже зручний редактор. Освоїти його - пара дрібниць: видно, що розробник ясно собі уявляв процес редагування plist-файлів, і яка при цьому має на меті.

Головне ж, щоб ви розуміли, що й навіщо змінюєте, додаєте чи видаляєте. Це особливо важливо, якщо врахувати, що утиліта поки не підтримує новомодного системного механізму Versions, і швиденько відновити незапороту копію вбитого файлу буде проблематично. Тож будьте гранично уважні.

Деякі iOS-програми перевіряють версію операційної системина пристрої. Нещодавно, під час тестування однієї програми, я таки зіткнувся з подібною перевіркою. Якщо версія iOS була нижчою за 7.1, програма не встановлювалася, і вивалювалася помилка.

У цій статті будуть розглянуті такі теми:

  • Зміна версії iOS у файлі SystemVersion.plist.
  • Зміна версії у plist-файлі, що знаходиться в пакеті програми.
  • Використання утиліти iOS-ssl-Kill switch для обходу валідації сертифіката.

Зміна версії iOS у файлі SystemVersion.plist

Версія iOS може бути змінена (на джейлбрейковому пристрої) у два простих кроки за допомогою зміни відповідного значення у файлі SystemVersion.plist:

  1. Підключаємося до джейлбрейкового пристрою за протоколом SSH (або використовуємо ifile, доступний у cydia) для перегляду вмісту системної директорії.
  2. Змінюємо значення "ProductVersion" у файлі "/System/Library/CoreServices/SystemVersion.plist".

Малюнок 1: Вміст файлу SystemVersion.plist

Цей трюк дозволяє змінити значення, що відображається у розділі "Settings/General/about". Однак метод спрацює лише для додатків, які перевіряють версію у файлі SystemVersion.plist. Якщо після зміни версії програма все одно відмовляється працювати, використовуйте другий метод.

Зміна версії у plist-файлі, що знаходиться в пакеті програми

Другий метод, що дозволяє змінити версію, складається із трьох простих кроків:

  1. Перейменовуємо файл ipa в.zip і розпаковуємо архів.
  2. Змінюємо значення "minimum ios version" у файлі info.plist, який зазвичай знаходиться в папці \Payload\appname.app.
  3. Пакуємо архів і перейменовуємо його назад в IPA. [ Примітка: деякі програми перевіряють значення "minimum ios version" в інших plist-файлах, що знаходяться в пакеті].

Малюнок 2: Вміст файлу info.plist

Після зміни plist-файлів порушується підпис пакету. Щоб вирішити цю проблему, необхідно зареєструвати IPA за допомогою утиліти з цієї статті.

Деякі програми перевіряють версію iOS під час інсталяції. Коли користувач інсталює програму за допомогою iTunes або xcode, використовуючи IPA, відбувається перевірка версії iOS, запущеної на пристрої, і якщо версія нижче, ніж потрібно, з'являється помилка.

Рисунок 3: Помилка, що виникає під час встановлення програми через xcode

Подібна перевірка також коштує кілька кроків:

  1. Перейменовуємо файл.ipa в.zip та виймаємо папку.app.
  2. Копіюємо папку.app туди, де встановлені iOS програми(/root/application) за допомогою будь-якого SFTP-клієнта (наприклад, WinSCP).
  3. Підключаємося до пристрою через SSH, заходимо до папки, де встановлено IPA, а потім ставимо права на запуск у папки.app (chmod -R 755 або chmod -R 777). Альтернативний спосіб - клацнути правою кнопкою миші на папці.app у WinSCP і змінити властивості директорії, встановивши відповідні права.
  4. Після перезапуску iOS пристроюпрограма буде успішно встановлена.

Малюнок 4: Встановлення нових прав для директорії

Обхід валідації сертифіката

Деякі програми перевіряють сертифікат для запобігання проксифікації трафіку за допомогою утиліт на кшталт Burp. Зазвичай у бінарному файлі програми намертво зашитий сертифікат клієнта. Сервер перевіряє цей сертифікат, і якщо валідація закінчується невдало, виникає помилка. Докладніше про це можна почитати в іншій моїй статті у співавторстві зі Стівом Керном.

Іноді буває важко отримати сертифікат із програми та встановити його всередину проксі. Альтернатива – використовувати утиліту ios-ssl-kill-switch. ios-ssl-kill-switch чіпляється до Secure Transport API (самий низький рівень) та відключає перевірку сертифіката. Більшість перевірок використовують NSURLConnection на більш високому рівні. Більше подробиць можна дізнатися.

Перевірка сертифіката коштує кілька кроків:

  1. Встановлюємо утиліту kill-ssl-switch.
  2. Усі залежні пакети мають бути встановлені заздалегідь.
  3. Перезапускаємо пристрій або перезапустіть SpringBoard за допомогою наступної команди "killall-HUP SpringBoard".
  4. Встановлюємо опцію Disable Certificate Validation у розділі "Settings/SSL Kill Switch".
  5. Перезапускаємо програму, після чого трафік повинен перехоплюватися успішно.

Прив'язка сертифікату (Certificate pinning) обходиться шляхом підчеплення до API, що виконує валідацію сертифіката, та постійного повернення «істини» під час перевірки. Для вирішення цього завдання цілком підійде фреймворк MobilesSubstrate. Існує кілька інших корисних утиліт для відключення прив'язки, наприклад Trustme і Snoop-it.

Рисунок 5: Вимкнення перевірки сертифіката в SSL Kill Switch

Я хочу редагувати Info.plist для TextEdit. (Ось чому). Я використовую OS 10.7, і в мене встановлений Xcode. Але щоразу, коли я намагаюся редагувати файл, він блокується, і я не можу зберегти свої зміни.

Якщо я намагаюся зберегти його за допомогою XCode, XCode запитує, чи я хочу його розблокувати. Я говорю «Розблокувати», але потім з'являється повідомлення про помилку The file "Info.plist" could not be unlocked." Він каже, що це тому, що я do not own it володію.

Якщо я відкриваю Info.plist за допомогою vi у Терміналі (vi Info.plist), я не можу зберегти зміни, навіть використовуючи: w! , Помилка E212: Can't open file for writing .

Як я можу внести зміни до Info.plist файлу TextEdit?

Відповіді

Ян З.

Перед цим переконайтеся, що у вашій системі немає запущених екземплярів TextEdit.

Використання Finder

Виберіть файл plist у Finder і виконайте File > Get Info. У нижній частині вікна інформації про файл ви побачите розділ « Загальний доступ та дозволи». Ви хочете переконатися, що ви перебуваєте в цьому списку і маєте доступ до файлу на рівні Read & Write .

Перш ніж ви зможете додати себе до прав доступу до файлу, вам потрібно буде розблокувати його. Натисніть на значок замка (1) у нижньому правому куті та введіть свій пароль. Якщо ви не є адміністратором цього комп'ютера, ви не зможете пройти цей крок.

Розблокувавши файл, ви можете змінити права доступу на "Read & Write". Якщо ви не відображаєтеся у списку людей, які можуть отримати доступ до файлу, натисніть кнопку + під списком і знайдіть спливаюче список « Users & Groups .

Зміни застосовуються до файлу, коли ви зробите їх у вікні «Інформація про файл».

Тепер ви зможете відкривати, редагувати та зберігати ці зміни до файлу.

Використання командного рядка

Відкрийте вікно терміналу.

Перейдіть до місця, де знаходиться файл plist:

cd ~/Library/Preferences/

Змініть власника та права доступу до файлу, щоб ви могли читати та записувати його:

sudo chown $USER aomDSP.plist sudo chmod u+w aomDSP.plist

Вам, ймовірно, не потрібно sudo під час другого дзвінка, але це не зашкодить. Для цього вам знадобиться доступ адміністратора до машини.

KatieK

Інструкція "Finder" спрацювала для мене - дякую!

user495470

TextEdit та інші програми, що використовують автозбереження, також необхідні дозволи на запис у каталог, в якому знаходиться файл.

jzadra

Інструкції з пошуку не спрацювали для мене - коли я пішов додати користувача або відредагувати дозволи для всіх, він сказав: «Операція не може бути завершена, тому що у вас немає необхідних дозволів». Мій обліковий запис адміністратора. У командному рядку також зазначено, що операцію не дозволено.

Ян С. ♦

@jzadra, якщо він виділений сірим кольором, передбачає, що обліковий запис, з яким ви намагаєтеся це зробити, немає права адміністратора.

До

Якщо ви бажаєте відредагувати файл (як ви описано вище), вам не обов'язково розблокувати його. Якщо ви добре працюєте з командним рядком, ви можете відредагувати файл за допомогою інструментів командного рядка, наданих Apple. Додайте команди із sudo щоб отримати необхідні права для зміни файлу (вам потрібно буде ввести пароль адміністратора).

А саме, це програми з defaults та PlistBuddy (запускаються як sudo /usr/libexec/PlistBuddy). Хоча по defaults це більш прямий спосіб зміни файлу, PlistBuddy має інтерактивний режим, який дозволяє попередньо переглянути зміни перед збереженням.

Ви добре попрацювали, і ось ваша програма в 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.

gastroguru 2017