APK чим відкрити і як редагувати? Використання apktool Програма для розібрати та зібрати апк файл

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

Вступ

У цій статті ми поговоримо про те, як розібрати пакет APK з додатком, розглянемо його внутрішню структуру, дизасемблуємо та декомпілюємо байт-код, а також спробуємо внести до додатків кілька змін, які можуть принести нам ту чи іншу вигоду.

Щоб зробити все це самостійно, знадобляться хоча б початкові знання мови Java, на якій пишуться програми для Android, і мови XML, яка використовується в Android повсюдно - від опису самої програми та її прав доступу до зберігання рядків, які будуть виведені на екран. Також знадобиться вміння поводитися зі спеціалізованим консольним софтом.

Отже, що ж є пакет APK, в якому поширюється абсолютно весь софт для Android?

Декомпіляція додатків

У статті ми працювали тільки з дизассембльованим кодом програми, проте якщо у великі програми вносити серйозніші зміни, розібратися в коді smali буде набагато складніше. На щастя, ми можемо декомпілювати код dex Java-код, який буде хоч і не оригінальним і не компилируемым назад, але набагато легшим для читання та розуміння логіки роботи програми. Щоб зробити це, нам знадобляться два інструменти:

  • dex2jar - транслятор байт-коду Dalvik в байт-код JVM, на основі якого ми зможемо отримати код мовою Java;
  • jd-gui - сам декомпілятор, що дозволяє отримати з байт-коду JVM код Java, що читається. Як альтернативу можна використовувати Jad (www.varaneckas.com/jad); хоч він і досить старий, але в деяких випадках генерує код, що більш читається, ніж Jd-gui.

Використовувати їх слід так. Спочатку запускаємо dex2jar, вказуючи як аргумент шлях до apk-пакета:

%dex2jar.sh mail.apk

В результаті в поточному каталозі з'явиться Java-пакет mail.jar, який можна відкрити в jd-gui для перегляду Java-коду.

Пристрій APK-пакетів та їх отримання

Пакет програми Android, по суті, є звичайним ZIP-файлом, для перегляду вмісту та розпакування якого ніяких спеціальних інструментів не потрібно. Достатньо мати архіватор – 7zip для Windows або консольний unzip у Linux. Але це щодо обгортки. А що всередині? Усередині ж у нас у загальному випадку така структура:

  • META-INF/- містить цифровий сертифікат програми, що засвідчує його творця, та контрольні суми файлів пакета;
  • res/ - різні ресурси, які додаток використовує у своїй роботі, наприклад, зображення, декларативний опис інтерфейсу, а також інші дані;
  • AndroidManifest.xml- Опис програми. Сюди входить, наприклад, список необхідних дозволів, необхідна версія Android та необхідна роздільна здатність екрана;
  • classes.dex- компільований байт-код програми для віртуальної машини Dalvik;
  • resources.arsc- теж ресурси, але іншого роду - зокрема рядки (так-так, цей файл можна використовувати для русифікації!).

Перелічені файли та каталоги є якщо не у всіх, то, мабуть, в більшості APK. Однак варто згадати ще кілька не настільки поширених файлів/каталогів:

  • assets- Аналог ресурсів. Основна відмінність - для доступу до ресурсу необхідно знати його ідентифікатор, список asset'ів можна отримувати динамічно, використовуючи метод AssetManager.list() в коді програми;
  • lib– нативні Linux-бібліотеки, написані за допомогою NDK (Native Development Kit).

Цей каталог використовують виробники ігор, розміщуючи туди двигун гри, написаний на C/C++, а також творці високопродуктивних програм (наприклад, Google Chrome). З пристроєм розібралися. Але як же отримати сам файл пакета програми, що цікавить? Оскільки без рута з пристрою забрати файли APK неможливо (вони лежать у каталозі /data/app), а рутити не завжди доцільно, є як мінімум три способи отримати файл програми на комп'ютер:

  • розширення APK Downloader для Chrome;
  • додаток Real APK Leecher;
  • різні файлообмінники та варезники.

Який із них використовувати - справа смаку; ми вважаємо за краще використовувати окремі програми, тому опишемо використання Real APK Leecher, тим більше що написаний він на Java і, відповідно, працюватиме хоч у вінді, хоч у ніксах.

Після запуску програми необхідно заповнити три поля: Email, Password та Device ID - та вибрати мову. Перші два - e-mail та пароль твого гуглоаккаунта, який ти використовуєш на пристрої. Третій є ідентифікатором пристрою, і його можна отримати, набравши на номеронабирачі код # #8255## а потім знайшовши рядок Device ID. При заповненні треба ввести лише ID без префікса android-.

Після заповнення та збереження нерідко вискакує повідомлення "Error while connecting to server". Воно не має відношення до Google Play, тому сміливо його ігноруй і шукай пакети, які тебе цікавлять.

Перегляд та модифікація

Припустимо, ти знайшов пакет, що тебе цікавить, скачав, розпакував… і при спробі перегляду якого-небудь XML-файлу з подивом виявив, що файл не текстовий. Чим же його декомпілювати та як взагалі працювати з пакетами? Невже потрібно ставити SDK? Ні, SDK ставити не обов'язково. Насправді для всіх кроків розпакування, модифікації та упаковки пакетів APK потрібні наступні інструменти:

  • архіватор ZIPдля розпакування та запакування;
  • smali- асемблер/дизассемблер байт-коду віртуальної машини Dalvik (code.google.com/p/smali);
  • aapt- інструмент для запакування ресурсів (за замовчуванням ресурси зберігаються у бінарному вигляді для оптимізації продуктивності програми). Входить до складу Android SDK, але може бути отриманий окремо;
  • signer- Інструмент для цифрового підпису модифікованого пакета (bit.ly/Rmrv4M).

Використовувати всі ці інструменти можна і окремо, але це незручно, тому краще скористатися високорівневим софтом, побудованим на їх основі. Якщо ти працюєш у Linux або Mac OS X, то є інструмент під назвою apktool . Він дозволяє розпаковувати ресурси в оригінальний вигляд (у тому числі бінарні XML- та arsc-файли), перезбирати пакет із зміненими ресурсами, але не вміє підписувати пакети, так що запускати утиліту signer доведеться вручну. Незважаючи на те, що утиліта написана на Java, її установка досить нестандартна. Спочатку слід отримати сам jar-файл:

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $ export PATH=~/bin:$PATH

Якщо ж ти працюєш у Windows, то для неї є чудовий інструмент під назвою Virtuous Ten Studio, який також акумулює всі ці інструменти (включаючи сам apktool), але замість CLI-інтерфейсу надає користувачеві інтуїтивно зрозумілий графічний інтерфейс, за допомогою якого можна виконувати операції з розпакування, дизассемблювання та декомпіляції в кілька кліків. Інструмент цей Donation-ware, тобто іноді з'являються віконця з пропозицією отримати ліцензію, але це, зрештою, можна і зазнати. Описувати його не має сенсу, тому що розібратися в інтерфейсі можна за кілька хвилин. А ось apktool, внаслідок його консольної природи, слід обговорити докладніше.


Розглянемо налаштування apktool. Якщо коротко, то є три основні команди: d(decode), b(build) та if(install framework). Якщо з першими двома командами все зрозуміло, що робить третя, умовний оператор? Вона розпаковує вказаний UI-фреймворк, який необхідний у тих випадках, коли ти препаруєш будь-який системний пакет.

Розглянемо найцікавіші опції першої команди:

  • -s- не дизасемблювати файли dex;
  • -r- не розпаковувати ресурси;
  • -b- не вставляти налагоджувальну інформацію в результати дизасемблювання файлу dex;
  • --frame-path- використовувати вказаний UI-фреймворк замість вбудованого в apktool. Тепер розглянемо пару опцій для команди b:
  • -f- форсоване складання без перевірки змін;
  • -a- вказуємо шлях до aapt (засіб для збирання APK-архіву), якщо ти з якоїсь причини хочеш використовувати його з іншого джерела.

Користуватися apktool дуже просто, для цього достатньо вказати одну з команд і шлях до APK, наприклад:

$apktool d mail.apk

Після цього в каталозі mail з'являться всі вилучені та дизассембльовані файли пакета.

Препарування. Відключаємо рекламу

Теорія – це, звичайно, добре, але навіщо вона потрібна, якщо ми не знаємо, що робити з розпакованим пакетом? Спробуємо застосувати теорію з користю собі, саме модифікуємо якусь софтину те щоб вона показувала нам рекламу. Для прикладу нехай це буде Virtual Torch – віртуальний смолоскип. Для нас ця софтина підійде ідеально, тому що вона під зав'язку набита дратівливою рекламою і до того ж досить проста, щоб не загубитися в нетрях коду.


Отже, за допомогою одного з наведених способів завантажуй додаток з маркету . Якщо ти вирішив використовувати Virtuous Ten Studio, просто відкрий APK-файл у додатку та розпакуй його, для чого створи проект (File -> New project), потім у контекстному меню проекту вибери Import File. Якщо ж твій вибір припав на apktool, достатньо виконати одну команду:

$apktool d com.kauf.particle.virtualtorch.apk

Після цього у каталозі com.kauf.particle.virtualtorch з'явиться файлове дерево, схоже на описане у попередньому розділі, але з додатковим каталогом smali замість dex-файлів та файлом apktool.yml. Перший містить дизассембльований код виконуваного dex-файлу програми, другий - службову інформацію, необхідну apktool для складання пакета назад.

Перше місце, куди ми повинні заглянути, це, звичайно ж, AndroidManifest.xml. І тут ми відразу зустрічаємо наступний рядок:

Неважко здогадатися, що вона відповідає за надання додатку повноважень використання інтернет-з'єднання. По суті, якщо ми хочемо просто позбавитися реклами, нам, швидше за все, достатньо буде заборонити додатку інтернет. Спробуємо це зробити. Видаляємо вказаний рядок і пробуємо зібрати софтину за допомогою apktool:

$apktool b com.kauf.particle.virtualtorch

У каталозі com.kauf.particle.virtualtorch/build/ з'явиться результуючий файл APK. Однак встановити його не вийде, оскільки він не має цифрового підпису та контрольних сум файлів (у ньому просто немає каталогу META-INF/). Ми повинні підписати пакет за допомогою утиліти apk-signer. Запустили. Інтерфейс складається з двох вкладок – на першій (Key Generator) створюємо ключі, на другій (APK Signer) підписуємо. Щоб створити наш приватний ключ, заповнюємо такі поля:

  • Target File- Вихідний файл сховища ключів; у ньому зазвичай зберігається одна пара ключів;
  • Passwordі Confirm- пароль для сховища;
  • Alias- ім'я ключа у сховищі;
  • Alias ​​passwordі Confirm- пароль секретного ключа;
  • Validity- Термін дії (у роках). Значення за промовчанням оптимальне.

Інші поля, загалом, необов'язкові - але потрібно заповнити хоча б одне.


WARNING

Щоб підписати програму за допомогою apk-signer, ти маєш встановити Android SDK і вказати повний шлях до нього в налаштуваннях програми.

Вся інформація надана виключно для ознайомлення. Ні редакція, ні автор не несуть відповідальності за будь-яку можливу шкоду, заподіяну матеріалами цієї статті.

Тепер цим ключем можна підписати APK. На вкладці APK Signer вибираємо щойно згенерований файл, вводимо пароль, аліас ключа та пароль до нього, потім знаходимо файл APK і сміливо тиснемо кнопку Sign. Якщо все пройде нормально, пакет буде підписано.

INFO

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

Цифровий підпис необхідний лише сторонньому софту, тому якщо ти займаєшся модифікацією системних додатків, які встановлюються копіюванням у каталог /system/app/, підписувати їх не потрібно.

Після цього скидаємо пакет на смартфон, встановлюємо та запускаємо. Вуаля, реклама зникла! Замість неї, однак, з'явилося повідомлення, що ми не маємо інтернету або відсутні відповідні дозволи. За ідеєю, цього могло б і вистачити, але повідомлення виглядає дратівливо, та й, якщо чесно, нам просто пощастило з тупим додатком. Нормально написана софтина, швидше за все, уточнить свої повноваження або перевірить наявність інтернет-з'єднання і інакше просто відмовиться запускатися. Як бути у цьому випадку? Звісно, ​​правити код.

Зазвичай автори додатків створюють спеціальні класи для виведення реклами та викликають методи цих класів під час запуску програми або однієї з його активностей (спрощено кажучи, екранів програми). Спробуймо знайти ці класи. Ідемо до каталогу smali, далі com (в org лежить тільки відкрита графічна бібліотека cocos2d), далі kauf (саме туди, тому що це ім'я розробника і там лежить весь його код) – і ось він, каталог marketing. Усередині знаходимо купу файлів із розширенням smali. Це класи, і найбільш примітний їх клас Ad.smali, за назвою якого неважко здогадатися, що він виводить рекламу.

Ми могли б змінити логіку його роботи, але набагато простіше буде тупо прибрати виклики будь-яких його методів із самого застосування. Тому виходимо з каталогу marketing і йдемо в сусідній каталог particle, а потім у virtualtorch. На особливу увагу тут заслуговує файл MainActivity.smali. Це стандартний для Android клас, який створюється Android SDK і встановлюється як точка входу в програму (аналог функції main в Сі). Відкриваємо файл для редагування.

Усередині знаходиться код smali (місцевий асемблер). Він досить заплутаний і важкий для читання через свою низькорівневу природу, тому ми не будемо його вивчати, а просто знайдемо всі згадки класу Ad в коді і закоментуємо їх. Вбиваємо рядок «Ad» у пошуку та потрапляємо на рядок 25:

Field private ad:Lcom/kauf/marketing/Ad;

Тут створюється поле ad для зберігання об'єкта класу Ad. Коментуємо за допомогою налаштування знака ### перед рядком. Продовжуємо пошук. Рядок 423:

New-instance v3, Lcom/kauf/marketing/Ad;

Тут відбувається створення об'єкта. Коментуємо. Продовжуємо пошук та знаходимо у рядках 433, 435, 466, 468, 738, 740, 800 та 802 звернення до методів класу Ad. Коментуємо. Наче все. Зберігаємо. Тепер пакет необхідно зібрати назад та перевірити його працездатність та наявність реклами. Для чистоти експерименту повертаємо віддалений з AndroidManifest.xml рядок, збираємо пакет, підписуємо та встановлюємо.

Наш піддослідний кролик. Видна реклама

Оп-па! Реклама зникла лише під час роботи програми, але залишилася у головному меню, яке ми бачимо, коли запускаємо софтину. Так, зачекайте, але ж точка входу - це клас MainActivity, а реклама зникла під час роботи програми, але залишилася в головному меню, отже, точка входу інша? Щоб виявити дійсну точку входу, знову відкриваємо файл AndroidManifest.xml. І так, у ньому є такі рядки:

Вони говорять нам (і, що важливіше, андроїду) про те, що активність з ім'ям Start має бути запущена у відповідь на генерацію інтенту (події) android.intent.action.MAIN із категорії android.intent.category.LAUNCHER. Ця подія генерується при тапі на іконку програми в ланчері, тому вона визначає точку входу, а саме клас Start. Швидше за все, програміст спочатку написав програму без головного меню, точкою входу до якого був стандартний клас MainActivity, а потім додав нове вікно (активність), що містить меню та описане в класі Start, і вручну зробив його точкою входу.

Відкриваємо файл Start.smali і знову шукаємо рядок Ad, знаходимо в рядках 153 і 155 згадування класу FirstAd. Він теж є у вихідниках і, судячи з назви, таки відповідає за показ оголошень на головному екрані. Дивимося далі, йде створення екземпляра класу FirstAd та інтенту, що за контекстом має відношення до цього екземпляра, а далі мітка cond_10, умовний перехід на яку здійснюється якраз перед створенням екземпляра класу:

If-ne p1, v0, :cond_10 .line 74 new-instance v0, Landroid/content/Intent; ... :cond_10

Швидше за все, програма якимось випадковим чином обчислює, чи потрібно показувати рекламу на головному екрані, і якщо ні, перескакує відразу на cond_10. Ок, спростимо їй завдання та замінимо умовний перехід на безумовний:

#if-ne p1, v0, :cond_10 goto:cond_10

Більше згадок FirstAd у коді немає, тому закриваємо файл і знову збираємо наш віртуальний факел за допомогою apktool. Копіюємо на смартфон, встановлюємо, запускаємо. Вуаля, вся реклама зникла, із чим нас усіх і вітаємо.

Підсумки

Ця стаття лише коротке введення в методи розкриття та модифікації Android-додатків. За кадром залишилося багато питань, таких як зняття захисту, розбір обфусцированного коду, переклад та заміна ресурсів програми, а також модифікація програм, написаних з використанням Android NDK. Однак, маючи базові знання, розібратися в цьому - лише питання часу.

З цієї статті ви дізнаєтеся з чого складається додаток для андроїд, як відкрити APK файл і за допомогою яких програм.

Що таке файл APK?

APK - формат операційної системи Android, що використовується для архівних виконуваних файлів-додатків, причому назва самого файлу може бути будь-яким, а ось розширення має виглядати тільки так. Аналогами APK в інших ОС є в Windows .msi, Symbian - .sis, в Linux - .rpm або .deb.

Дивимося, що всередині
По суті.apk це ZIP архів, тому подивитися на внутрішній пристрій можна скориставшись будь-яким файловим менеджером або архіватором, наприклад, WinRAR або мобільним додатком X-plore.




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

Розглянемо структуру
Всередині.apk ми бачимо ряд файлів та папок, давайте дізнаємося для чого вони служать:

  • AndroidManifest.xml - це свого роду "паспорт" програми з якого можна дізнатися про всі основні моменти, вимоги, версію, дозволи та інше.
  • META-INF цей фаїл містить метадані, тобто дані про дані, контрольні суми, шляхи до даних, шляхи та контрольні суми ресурсів, сертифікати. Відкрити цей файл можна будь-яким текстовим редактором, але рекомендується використовувати Notepad++.
  • Папка res містить усі ресурси програми, графічні, такі як іконки, картинки, текстові, елементи графічного інтерфейсу. Отримати доступ до папки так само можна легко.
  • classes.dex - безпосередній програмний код програми, що виконується віртуальною машиною Dalvik VM, побачити що всередині цього файлу можна лише декомпілювавши.apk, про це ми розповімо в інших статтях. resources.arsc -компільований файл XML, цей файл містить дані про всі ресурси задіяних у програмі.
  • lib – папка з нативними бібліотеками, отримати доступ до ресурсів якої можна лише при використанні спеціалізованих програм. Так само в APK можуть зустрічатися такі файли та папки як com, org, udk, але далеко не завжди.

Тепер розглянемо внутрішню структуру докладніше для цього нам знадобиться програма декомпіляції, Java і АПК-файл. Основним інструментом для разборки.apk є Apktool, але ця програма працює тільки з рядка, що не дуже зручно. Для більш швидкого та зручного розбору можна використовувати APKing, це все та сама Apktool, але з можливістю роботи з контекстного меню.


І так встановлюємо APKing як будь-який додаток для Windows і вибравши.apk натискаємо на нього правою клавішею миші і одночасно Shift, після чого побачимо наступне:



І вибираємо необхідну дію, наприклад, декомпілювати повністю, далі програма завершить операцію і створить папку з такою ж назвою.



Відкривши папку, ми отримаємо доступ до всіх ресурсів АПК файлу.



Тепер всі текстові файли можна редагувати, при цьому дотримуючись основних правил, можна використовувати популярну програму Notepad++, наприклад розглянемо AndroidManifest.xml

Я згадував про програму SmartAPKTool. Воно може розпаковувати, запаковувати та підписувати змінені apk-файли. Її перевагою є наявність графічного інтерфейсу. Однак є й серйозна вада. SmartAPKTool давно не оновлювався, і програма некоректно розпаковує та запаковує програми для свіжих версій Android. Тому тут я спробую пояснити, як користуватися для цього додатком apktool.

Зауваження 1.
Програму SmartAPKTool, як і раніше, зручно використовувати для підпису зібраних apk-файлів.
Примітка 2.
Посилання на згадані у статті програми знаходяться ↓

Програма apktoolнемає графічного інтерфейсу. Це є мінусом для тих, хто не звик працювати з командним рядком. Але є і плюс: на відміну від SmartAPKTool, ми бачитимемо всі помилки, а значить знатимемо, що виправити.

Скачаємо два архіви: один загальний для всіх систем, інший для нашої системи (у прикладі - Windows):

Розпакуємо обидва архіви в ту саму порожню папку (у нашому прикладі C:\apktool\ ). Її вміст має вийти таким:

З цього моменту ми можемо використовувати програму apktool.

Примітка 3.
Користувачам 64-бітних версій Linux потрібно встановити пакет ia32-libs:

sudo apt-get install ia32-libs

У цю папку ми кладемо той файл, який нам потрібно розпакувати. Наприклад, нехай він називається orig.apk
Натиснувши клавішу Shift та утримуючи її, клацаємо правою кнопкою миші на будь-якому порожньому просторі папки (клацати не по файлах!). Після цього вибираємо пункт „Відкрити вікно команд“. У консолі, що з'явилася, набираємо:

apktool decode orig.apk

Файл розпакується:

Тепер у нас в директорії C:apktool є папка з розпакованим додатком. Називається вона так само, як і вихідний файл, за вирахуванням розширення: C: apktool orig . Ми можемо змінювати вихідні файли так, як описано в статті Android: як встановити дві однакові програми на один телефон. Після того, як ми зробили зміни, зберемо копію програми, запакувавши вихідні файли в apk:

apktool build orig result.apk

Тут result.apk – ім'я файлу, яке ми вигадали для білда копії. Якщо помилок немає, файл збереться:

Решта виходить за межі теми статті:

  1. Якщо при збиранні будуть помилки, потрібно знайти їх причину та виправити.
  2. Залишилося підписати файл result.apk . Це можна зробити за допомогою SmartAPKTool, як говорилося вище; у ньому все інтуїтивно зрозуміло. Є також інші способи підписати apk-файл.
  3. У разі встановлення копії, під час її запуску або роботи також можуть виникати помилки. Їх потрібно відловлювати за допомогою утиліти adb, що входить до складу Android SDK.

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

У процесі використання різних прошивок для Android-пристроїв іноді виникає необхідність тим чи іншим чином змінити додатки, вбудовані в операційну систему. У цьому матеріалі ми докладно розглянемо це питання.

Природно, що розібрати і зібрати системний APK-файл потрібно так, щоб він працював як слід і стабільно. Давайте розберемося покроково, що потрібно зробити.

По-перше, необхідно зробити процес деодексування системних APK-файлів. Про те, як це зробити, ми розповімо у .

Отже, .apk-файл був деодексований та декомпільований. Розбираємо додаток, що цікавить нас, нехай воно буде носити назву, для наочності прикладу, framework- res. apk. У голові запам'ятовуємо його як оригінальну програму.

Допустимо, всі потрібні зміни до додатку ми внесли. Докладніше про всі аспекти APK-файлів ми поговоримо в . Тепер потрібно запакувати його назад. Готовий упакований додаток запам'ятаємо в умі як модифікований додаток 2.

Тепер ми пояснимо, навіщо потрібно було в розумі запам'ятовувати програми як оригінальне і модифіковане 2. Зібране програмою ApkTool (або за допомогою графічного розширення інтерфейсу на кшталт SmartApkTool) додаток працювати не буде, але це не проблема. Виконуємо такі дії:

Зібрати такі файли назад в APK досить просто. Для цього необхідно запустити apktool з відповідним прапором збірки та передати йому шлях до папки з декомпільованим додатком усередині. Наприклад, якщо у нас є папка app, яка розміщена в тому ж каталозі, що й apktool, то команда виглядатиме так:

Shell

java -jar apktool.jar b app

java - jar apktool .jar b app

Після збирання готовий APK файл буде лежати в каталозі app/build. Далі потрібно підписати APK. Робиться це для того, щоб програма працювала на пристроях, де заборонено налагодження. Тобто запуск непідписаних програм на таких пристроях заборонено. Докладніше, про цифрові сертифікати та процедуру підписування файлів можна прочитати тут.

Підписати файл дуже просто: для цього є спеціальна утиліта під назвою signapk. Її необхідно запустити, передавши як аргументи спочатку сертифікати, потім шлях до додатку, і, нарешті, шлях для підписаного додатка (результат, куди зберігати). Виглядає це приблизно так:

Shell

java -jar signapk.jar testkey.x509.pem testkey.pk8 *.apk apk_signed.apk

java - jar signapk .jar testkey .x509 .pem testkey .pk8 * .apk apk_signed .apk

Де взяти такий сертифікат, запитаєте Ви? Сертифікати можна знайти в Інтернеті. Або згенерувати самому. Детальну інструкцію про налаштування та генерацію всіх необхідних файлів можна знайти, наприклад, .

Висновок

Як бачите, декомпіляція та складання APK файлів досить простий процес, який також можна автоматизувати, полегшуючи роботу досліднику. Сама віртуальна машина Dalvik також проста в освоєнні та відкрита, що, з одного боку, знижує поріг входження для розробників, з іншого – є основною причиною стільки великого відсотка піратства саме на платформі Android. Тому розробники, наприклад, ігор в основному не зацікавлені у випуску цікавих ігор із сюжетом. Набагато вигідніше за нинішнього відношення користувачів клепати разюче схожі один на одного ферми з донатом. Тому купуємо додатки, підтримуємо розробників і в результаті отримуємо цікавий контент. А ось донатіти зовсім не потрібно!

Дякую всім, до нових зустрічей.