Вибір читачів
Популярні статті
В інтернеті дуже багато програм, що дозволяють редагувати вихідний код іншої програми, файлу та ін. Однак більшість з подібних програм є лише текстовим редактором на кшталт блокнота. Відрізняються вони від вищезазначеного редактора лише тим, що мають підсвічування синтаксису. Однак у деяких випадках такого функціоналу програми виявляється недостатньо. Програмісту буває необхідно швидко знаходити різні частини документа. І ось, нарешті, з'явилася програма, що дозволяє вирішити цю проблему. Програма називається 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
Версія iOS може бути змінена (на джейлбрейковому пристрої) у два простих кроки за допомогою зміни відповідного значення у файлі SystemVersion.plist:
Малюнок 1: Вміст файлу SystemVersion.plist
Цей трюк дозволяє змінити значення, що відображається у розділі "Settings/General/about". Однак метод спрацює лише для додатків, які перевіряють версію у файлі SystemVersion.plist. Якщо після зміни версії програма все одно відмовляється працювати, використовуйте другий метод.
Зміна версії у plist-файлі, що знаходиться в пакеті програми
Другий метод, що дозволяє змінити версію, складається із трьох простих кроків:
Малюнок 2: Вміст файлу info.plist
Після зміни plist-файлів порушується підпис пакету. Щоб вирішити цю проблему, необхідно зареєструвати IPA за допомогою утиліти з цієї статті.
Деякі програми перевіряють версію iOS під час інсталяції. Коли користувач інсталює програму за допомогою iTunes або xcode, використовуючи IPA, відбувається перевірка версії iOS, запущеної на пристрої, і якщо версія нижче, ніж потрібно, з'являється помилка.
Рисунок 3: Помилка, що виникає під час встановлення програми через xcode
Подібна перевірка також коштує кілька кроків:
Малюнок 4: Встановлення нових прав для директорії
Обхід валідації сертифіката
Деякі програми перевіряють сертифікат для запобігання проксифікації трафіку за допомогою утиліт на кшталт Burp. Зазвичай у бінарному файлі програми намертво зашитий сертифікат клієнта. Сервер перевіряє цей сертифікат, і якщо валідація закінчується невдало, виникає помилка. Докладніше про це можна почитати в іншій моїй статті у співавторстві зі Стівом Керном.
Іноді буває важко отримати сертифікат із програми та встановити його всередину проксі. Альтернатива – використовувати утиліту ios-ssl-kill-switch. ios-ssl-kill-switch чіпляється до Secure Transport API (самий низький рівень) та відключає перевірку сертифіката. Більшість перевірок використовують NSURLConnection на більш високому рівні. Більше подробиць можна дізнатися.
Перевірка сертифіката коштує кілька кроків:
Прив'язка сертифікату (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.
Виберіть файл 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 від перекладача: з оригінального тексту прибрано багато «води» та посилань до Голлівуду (і так довго). Додано низку ключових пояснень.
Щоби ви творчо підійшли до процесу, пропоную вам сценарій. Уявіть: вийшла нова програма для айпада - «Збирач мемов» (Meme Collector). Всім подобається. Але вам шепнули на вухо, що вбудовані покупки витягнуть із вас значну суму грошей.
Загалом ви задумали отримати платний контент (меми) безкоштовно. Є кілька напрямків, куди можна рухатися, ми поговоримо про них – і про відповідні методи захисту.
Невелике спрощення
Через довжину цього уроку ми спочатку допустили деякі спрощення у тестовому проекті. Наприклад, «купівля» ігрової валюти є не справжнім in-app purchase, а фейковим запитом до StoreKit (все відбувається локально на девайсі).
Зв'язування ключів «підвищує ставки» для хакера. Зловмисники не зможуть нічого стягнути, якщо пристрій заблоковано.
Тим не менш, не варто повністю покладатися на одну тільки Зв'язку ключів! І ось чому. Зв'язок ключів підтримує Apple. (Ну, ви вже все зрозуміли, так?) Інформація в ній зашифрована паролем користувача, який зазвичай є простим 4-значним цифровим кодом. А це означає, що атака брутфорсом займе двадцять хвилин. Дізнавшись пароль, легко стиснути всю зв'язку ключів.
Перебуваючи в папці бандла (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 виглядатиме приблизно так:
Виберіть вкладку 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» («Змінити параметр запиту») та заповніть два поля:
Натисніть кнопку OK, OK. Перезапустіть програму… Success! Ми можемо купувати контент, який раніше був недоступний.
Цікаво: для цього нового мема вказано конкретну ціну. Звідки? Програма мала якось визначити вартість, виходячи з JSON-відповіді.
Відкрийте вкладку Response та подивіться на JSON, який повертає сервер. Що може визначити вартість ціни?
Спробуйте знайти JSON ключі, які можуть визначити вартість мема в додатку. Можливо, це generatorID, totalVotesScore, instancesCount, templatesCount або ranking. Як вправа для вас: знайдіть ключ, який впливає на вартість мема.
Щоб це зробити, перейдіть до Proxy > Breakpoints. Натисніть Enable Breakpointsі натисніть Add, щоб додати нову точку зупинки. З'явиться вікно Edit breakpoint, введіть у ньому такі дані:
Тепер перезапустіть програму. Як тільки нам прийде відповідь із сервера, спрацює точка зупинки (breakpoint). Коли це станеться, клацніть на вкладці Edit Response, внизу виберіть JSON:
Тут ви можете вручну модифікувати JSON-відповідь, яка піде в програму. Пограйтеся з цими параметрами і спробуйте визначити, які ключі впливають на ціну, яка відображається в програмі. Змінивши відповідь JSON, натисніть Execute (виконати), щоб надіслати відповідь. Програма робить три запити до API, тому вам потрібно натиснути Execute тричі.
Важливо: дійте швидко! AFNetworking має тайм 30 секунд. Якщо ви перехопили відповідь, але не встигли внести зміни, AFNetworking поверне помилку таймауту запиту та виконає відповідний обробник у коді (який у цьому випадку не робить нічого). Якщо у вас вийшов час, перезапустіть програму і спробуйте знову.
Можливо, ці знання підвищать безпеку вашого iOS-додатку… трохи. У наступній частині ми заглибимося набагато далі в надра програми, змінюватимемо його функціонал! А поки ви чекаєте, коли я викладу переклад (до наступної п'ятниці), можна багато чого спробувати на тему зберігання даних у додатку:
Зауваження щодо перекладу або непрацюючих прикладів можна надсилати на пошту dev @ x128.ru.
Статті на тему: | |
Найсмачніша домашня локшина
Домашня локшина - це не тільки простий рецепт, а й оригінальний. Солодка піца з яблуками та корицею Солодка піца із заморожених ягід
Як і з чим готувати солодку піцу. Як зробити її на сковорідці. Який... Як приготувати домашню локшину на яйцях?
Калорійність: Не вказано Час приготування: Не вказано Серед... |