Хакерські методи роботи з файлами PLIST у Mac OS X. PlistEdit Pro: Зручне редагування конфігураційних файлів Що зробити, якщо програма зі списку вже була встановлена

Основа стабільності будь-якої операційної системи – це обмеження доступу до важливих файлів, від яких залежить робота комп'ютера, або просто «захист від дурня». У 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 за посиланням нижче.

Деякі програми 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

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

Про маленьких твиків iOS, які може зробити самостійно кожен користувачів Jailbreak, тут і піде мова. Все описане нижче перевірено на iOS 5.

Що нам знадобиться:

  • iPhone або iPad з відкритою файловою системою (зроблено Jailbreak)
  • Програма iFile (можна завантажити у Cydia Store)
    Власне, більше нічого, оскільки редактор Plist вже вбудований в iFile.

    Зміни файлів Plist- зломи та покращення, які може зробити кожен користувач Jailbreak.

    1.Включаємо панорамну камеру в iPhone

    Для цього потрібно потрапити до папки

    та відкрити файл com.apple.mobileslideshow.plist.

    200?"200px":""+(this.scrollHeight+5)+"px");"> DiskSpaceWasLow


    Дописуємо після:

    200?"200px":""+(this.scrollHeight+5)+"px");"> EnableFirebreak

    Функція тестова, її доведеться включити у звичайних налаштуваннях камери. Якість одержуваної панорами також не дуже якісна, але якщо вам потрібна панорама на iPhone без встановлення сторонніх програм, тоді цей твік для вас.

    2.Включення захованої панелі автокорекції тексту

    Ідемо в ту ж саму папку
    var/mobile/Library/Preferences/
    та відкриваємо файл com.apple.keyboard.plistі додаємо цей рядок:

    200?"200px":""+(this.scrollHeight+5)+"px");"> KeyboardAutocorrectionListsYES


    Якщо Ви не можете знайти файл вищезазначеним шляхом, спробуйте пошукати в
    Library/Preferences/.

    3. Скрінсейвер на iPad та iPhone

    У деяких магазинах на iДевайсах стоїть фірмовий скрінсейвер. Якщо вам не шкода батареї, тоді є спеціальне налаштування для його встановлення.
    Ідемо до папки:
    /var/stash/Applications/DemoApp/
    та редагуємо файл Info.plist.
    Змінюємо в шматку коду:

    200?"200px":""+(this.scrollHeight+5)+"px");"> SBAppTags
    hidden


    ключ hiddenна ключ visible.

    Тепер поміщаємо файл зі скрінсейвером Demo.mov у папку
    var/mobile/

    Після ReSpring'а все має заробити.

    4. Включаємо підтримку багатозадачності у Cydia

    Всі знають, що варто тільки перейти на іншу програму, Cydia, скромно кажучи, все забуває. Є рішення для цієї проблеми. Для цього заходимо до:
    /var/stash/Applications/Cydia.app/
    редагуємо у файлі Info.plistрядки:

    200?"200px":""+(this.scrollHeight+5)+"px");"> UIApplicationExitsOnSuspend


    змінюючи ключ true на false. Перезавантажуємо пристрій та вуаля, Cydia запам'ятовує ваше останнє положення в меню.

    5. Увімкнення буферизації для 720p роликів у штатному додатку YouTube

    Відкриваємо наступний файл:
    /System/Library/CoreServices/SpringBoard.app/N81AP.plist
    Змінюємо

    200?"200px":""+(this.scrollHeight+5)+"px");"> 720p


    на

    200?"200px":""+(this.scrollHeight+5)+"px");"> 720p


    та перезавантажуємо iPhone, iPad.

    6. Змінюємо текст на екрані блокування

    Незважаючи на те, що є така настройка в Springtomize, іноді не хочеться ставити зайвих твіків, так що заходимо в iFileі відкриваємо:

    System/library/CoreServices/SpringBoard.app/English.lproj/SpringBoard.strings
    та редагуємо наступний ключ:

    "AWAY_LOCK_LABEL" = "slide to unlock"

    7. Вимкнення постійної підтримки Wi-Fi з'єднання

    Іноді зустрічається наступний баг, що акумулятор раптово розрядиться, хоча iPadабо iPhoneбув уві сні. Це відбувається через те, що він не завжди показує статус підключення до мережі. Якщо ви зіткнулися з такою проблемою, потрібно зробити так, щоб iPhone не тримав постійно мережу – є таке налаштування.

    Заходимо до:
    /System/Library/LaunchDaemons/
    і перейменовуємо com.apple.apsd.plistв com.apple.apsd.plist%, перезавантажуємо пристрій.

    Так само, перелічені вище дії може зробити кожен навіть без використання . Для цього треба просто створити резервну копію iPhone, iPad, потім можна змінювати її програмою iBackupBot, після чого необхідно відновити ваш iOS девайс відредагованим бекапом.

    І це ще не все, лист буде оновлюватися, за знаходженням нових твіків. Відписуйтесь і ставте питання нижче, відповімо.

    Якщо ви не знайшли відповіді на своє запитання або у вас щось не вийшло, а в коментарях нижче немає відповідного рішення, запитайте через нашу . Це швидко, просто, зручно та не вимагає реєстрації. Відповіді на свої та інші питання ви знайдете в розділі.

    Приєднуйтесь до нас

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

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

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

    Поділіться з друзями або збережіть для себе:

    Завантаження...