Објавуваме апликации на Google Play и заработуваме милиони. Како да ја користите функцијата за потпишување апликација на Google Play Како да потпишете apk со оригинален потпис

Значи, работевте многу денови (а можеби дури и ноќи) и сега вашата прва хибридна мобилна апликација е подготвена. Тој е доста стабилен, повеќето критични грешки се затворени. Останаа мали, но сеќавајќи се дека перфекционизмот е зло, донесувате одлука со силна волја да ја објавите апликацијата.

Предуслов за ова е присуството на потпишана датотека АПК. Ќе научите како да потпишете apk-датотека во оваа статија.

Мало повлекување

Кога мојот проект за домашно милениче беше пред објавување, почнав да барам информации за тоа како брзо и безболно да објавам апликација. Многу од пронајдените инструкции изгледаа едноставно. Ги избрав упатствата од авторите на рамката Ionic, на која беше развиена апликацијата. Не успеа сè од прв пат, има неколку особености. Процесот на потпишување е опишан во овој напис, со нагласени важни точки.

Почетни податоци

Претпоставувам дека имате сè подготвено за да развиете хибриди. мобилни апликациикористејќи Apache Cordova. Мора да се инсталира:
  • Апачи Кордова
  • Комплет за развој на Java
  • Алатки за Android SDK
Името на проектот и апликацијата е lcf. Доколку е потребно, заменете го со името на вашиот проект.

Оди

Прво треба да креирате верзија на вашата апликација. Но, пред тоа, да се погрижиме да се отстранат сите непотребни додатоци. На пример, не ни треба приклучок што дава информации за дебагирање на конзолата. Ајде да го избришеме:

$ cordova приклучок rm cordova-приклучок-конзола
За да генерирате верзија на верзија за Android, користете ја командата изградисо знаме -- ослободување:

$ cordova build --објавување на андроид
Оваа команда ќе создаде непотпишанаАПК датотека во директориумот:

Платформи/андроид/изградба/излези/apk
На пример, платформи/андроид/изградба/излези/apk/ android-release-unsigned.apk. Потоа ќе треба да ја потпишеме оваа датотека и да ја извршиме алатката zipalignза оптимизирање и подготовка на датотеката за Google Play.

За да потпишете датотека, потребен ви е сертификат. Ајде да го создадеме користејќи ја алатката клучна алаткашто е вклучено во JDK:

$ keytool -genkey -v -keystore lcf.keystore -алијас lcf -keyalg RSA -големина на копчиња 2048 -валидност 10000
Важно

Вредноста на параметарот -alias мора да се запомни, или уште подобро да се запише. Во примерот погоре, тоа е еднакво на lcf (врз основа на првите букви од името на апликацијата Loyal Client Free). Овде нема да давам детали, ако ве интересира пишете во коментар, ќе ви кажам подетално.

Алијасот се користи секогаш кога ќе потпишете * апликации. За полесно да се запомни, користете го името на датотеката за клучеви како алијас, на пример:


-keystore hello-world.keystore -алијас hello-world -keystore weather-app.keystore -алијас weather-app -keystore todo.keystore -алијас todo
* Треба да ја потпишувате апликацијата секогаш кога се објавуваат ажурирања

Алатка клучна алаткапоставува низа прашања. Ќе има вкупно 8. За однапред да имате идеја за прашањата и приближните одговори, сите се дадени подолу, под спојлерот.

Прашања за клучна алатка и примерок од одговори на нив

1. Внесете лозинка за клучеви:
Овде мора да внесете лозинка за датотеката (најмалку 6 знаци). Внесената лозинка мора да биде запишана на безбедно место, потребна е секогаш кога ќе ја потпишете апликацијата.

2. Повторно внесете нова лозинка:
Повторно внесете ја вашата лозинка.

3. Кое е твоето име и презиме?
: Иван Петров
Вашето име и презиме. Вредност во квадратни заградие стандардната вредност.

4. Како се вика вашата организациска единица?
: ИТ
Името на поделбата на вашата компанија. Можете да го оставите празно, јас го посочувам ТОА.

5. Како се вика вашата организација?
: 2 програмери
Името на вашата организација. Ве молиме наведете дали има.

6. Како се вика вашиот град или локалитет?
: Москва
Име на градот

7. Како се вика вашата држава или провинција?
: М.О.
Име на областа

8. Кој е кодот на државата со две букви за оваа единица?
: RU
Кодекс на земјата. Посочувам RU.

: y

Потврдете дали сè е точно или притиснете Enter за повторно да влезете.


На крајот, ќе се појави порака што укажува на успешно генерирање клучеви. Ќе ви биде побарано да поставите лозинка за приватниот клуч (ако сакате да го оставите исто како и за сертификатот, притиснете Enter):

Генерирање 2 048 битни RSA пар клучеви и самопотпишан сертификат (SHA256withRSA) со важност од 10 000 дена за: CN=Ivan Petrov, OU=IT, O=2developers, L=Moscow, ST=MO, C=RU Enter key лозинка за (ВРАТИ ако е иста како лозинката за клучеви):
Ќе се креира датотека во тековниот директориум lcf.keystore.

Важно

Создадената датотека мора да се зачува на безбедно место. Ако користите приватно складиште, датотеката може да се изврши заедно со изворниот код на апликацијата. Во принцип, подобро е да се складираат сертификати одделно. Ако го изгубите сертификатот, нема да можете да издавате ажурирања на апликациите.

Остануваат уште два чекори и ќе имате APK-датотека подготвена за дистрибуција. Да преминеме на потпишување.

За да ја потпишете вашата apk-датотека, користете ја алатката jarsigner, кој исто така е вклучен во ЈДК.

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore lcf.keystore android-release-unsigned.apk lcf
Името на сертификатот е означено по параметарот - продавница за клучеви, алијас - по името на датотеката.

Конечно, за да ја оптимизираме датотеката apk, ќе ја користиме алатката zipalign:

$ zipalign -v 4 android-release-unsigned.apk LoyalClientFree.apk
Последниот параметар е името на датотеката што ќе ја поставите на Google Play.

Важно.

Алатка zipalignтој е дел од алатките за Android SDK и може да се најде овде:

/path/to/Android/sdk/build-tools/VERSION/zipalign

Заклучок

Сега имате apk-датотека подготвена за дистрибуција што може да се постави на Google Play. Пополнете го описот, одредете го рејтингот на вашата апликација и слободно кликнете на „Објави“.

Со функцијата „Потпишување апликации“ на Google Play, Google може да управува со клучот за потпишување на вашата апликација, како и да го заштити тој клуч и да го користи за потпишување на вашите АПК за дистрибуција. Овој метод за складирање ќе ве заштити во случај клучот да биде изгубен или хакиран.

Важно!За да користите пакети со апликации за Android (препорачаниот формат за објавување апликации), мора да се запишете во Програмата за потпишување апликации на Google Play пред да го поставите пакетот апликации на Play Console.

Регистрацијата е отворена за иматели на сметки и корисници со глобални дозволи за управување со производството кои ги прифатиле Условите за користење. Може да регистрирате само една апликација во исто време со Програмата за потпишување апликации на Google Play.

Принципи на работа

Кога ја користите функцијата за потпишување апликации на Google Play, вашите клучеви се складираат во истата инфраструктура што ги складира клучевите на Google и се заштитени со посветена услуга за управување со клучеви. Детални информацииТехничката инфраструктура на Google може да се најде во документацијата за Google Cloud Security.

Андроид апликациите се потпишани со приватен клуч. Секој таков клуч е поврзан со јавен сертификат, со кој уредите и услугите можат да ја потврдат безбедноста на апликациите и нивните ажурирања. Само оние ажурирања чиј потпис се совпаѓа со потписот се инсталирани на уредите инсталирана апликација. Дозволете Google да управува со вашиот клуч за потпишување апликација ќе го направи процесот побезбеден.

Забелешка.Користењето на функцијата за потпишување апликации на Google Play е опционално. Може да преземате АПК и да управувате со вашите сопствени клучеви без да користите пакети на апликации. Меѓутоа, ако го изгубите пристапот до продавницата за клучеви или таа е компромитирана, нема да можете да ја ажурирате вашата апликација и ќе мора повторно да ја објавите со друго име на пакетот.

Описи на клучеви, предмети и алатки
Услови Опис
Клуч за потпишување на апликацијата

Клучот што го користи Google Play за потпишување на датотеки со АПК доставени до уредот на корисникот. Кога ќе се регистрирате за програмата за потпишување апликации на Google Play, можете да поставите постоечки клуч за потпишување или да дозволите Google да генерира нов.

Клуч за преземање

Постојат два начини да се генерира клуч за преземање:

  • Користете го копчето за потпишување апликација.Ако сте му дозволиле на Google да генерира клуч за потпишување апликација кога сте се регистрирале за програмата, клучот за поставување ќе биде клучот што го користевте за да го потпишете првото издание на апликацијата.
  • Користете посебен клуч за преземање.Ако сте дале свој клуч за потпишување на апликацијата кога се регистриравте за програмата, можете да генерирате нов клуч за преземање за безбедност. Ако не сакате да го направите ова, користете го клучот за потпишување апликација како клуч за преземање за да потпишете нови изданија.
Сертификат (.der или .pem)

Сертификат кој го содржи јавниот клуч и Дополнителни информацииза неговиот сопственик. Сертификатот со јавен клуч му овозможува на секој да знае кој потпишал пакет на апликации или датотека АПК. Овој сертификат може да се сподели бидејќи не вклучува приватен клуч.

За да ги регистрирате вашите клучеви кај давателите на API, можете да го преземете јавниот сертификат за клучот за потпишување на вашата апликација од Потпишување апликацииво Play Console. Сертификатот за јавен клуч може да се сподели со секого бидејќи не вклучува приватен клуч.

Дигитален отпечаток од сертификатот

Краток и единствен идентификатор за сертификатот. Отпечатокот од прст заедно со името на пакетот честопати го бараат давателите на API за да обезбедат пристап до нивните услуги.

Дигитални отпечатоци од MD5, SHA-1 и SHA-256 сертификати за преземање и потпис на апликација може да се најдат на страницата Потпишување апликацииво Play Console. Може да добиете и различен тип на дигитален отпечаток од прст. За да го направите ова, преземете го оригиналниот сертификат во формат DER на истата страница.

Java Key Store (.jks или .keystore) Складирање на безбедносни сертификати и приватни клучеви.
Алатка PEPK

Алатка за извоз на приватни клучеви од складиштето Java и нивно шифрирање за пренос на Google Play.

Откако ќе му го дадете на Google клучот за потпишување на апликацијата, изберете да го извезете и преземете вашиот сопствен клуч (и по избор неговиот јавен сертификат), потоа следете ги упатствата за преземање и користење на алатката. Можете исто така да ја преземете, прегледувате и користите алатката PEPK со отворен код.

Процес на потпишување на апликацијата

Може да преземете APK-датотеки потпишани со оригиналниот клуч за потпишување апликација пред или по потпишувањето на апликацијата на Google Play.

Ако мигрирате во пакети на апликации за Android, можете да ги тестирате во верзии за тестирање и да ги користите постоечките АПК во продукциските верзии. Еве како тоа функционира:

  1. Го потпишувате пакетот со апликации или АПК и ги поставувате на Play Console.
  2. Процесот на потпишување на апликацијата зависи од тоа што го преземате.
    • Пакет со апликации. Google ги оптимизира APK-датотеките од App Bundle и потоа ги потпишува со клуч за потпишување апликација.
    • АПК-датотека потпишана со клучот за преземање. Google го потврдува вашиот потпис, го отстранува и повторно ги потпишува APK-датотеките со клучот за потпишување апликација.
    • АПК-датотека потпишана со клучот за потпишување апликација. Google го потврдува потписот.
  3. Google доставува потпишани APK-датотеки до корисниците.

Како да се регистрирате за програмата за потпишување апликации на Google Play

Нови апликации

Чекор 1: Создадете клуч за преземање

  1. Креирајте клуч за преземање следејќи ги упатствата.
  2. Потпишете ја новата APK-датотека со клучот за преземање.

Чекор 2: Подгответе го ослободувањето

  1. , следејќи ги упатствата.
  2. Откако ќе го изберете типот на верзијата, конфигурирајте ги поставките за потпишување апликација под „Дозволи Google да го заштити и управува клучот за потпишување апликација“.
  3. Ако кликнете Продолжи, генерираниот клуч ќе стане клуч за преземање што ќе се користи за потпишување идни изданија. Можете исто така да го изберете следново Напредни поставувања:
    • Користете едно копче за различни апликации во сметката на развивачот (опција 2).
    • Поставете го клучот за потпишување на постоечка апликација (опција 2, 3 и 4), избирајќи го најсоодветниот метод за извоз и преземање. Откако ќе го преземете клучот за потпишување на апликацијата и нејзиниот јавен сертификат, можете или да го користите како клуч за потпишување на апликацијата.

Забелешка.За да продолжите, мора да ги прифатите Условите за користење и да се запишете во Програмата за потпишување апликации.

Чекор 3: Регистрирајте го клучот за потпишување на апликацијата кај вашите API провајдери

Ако вашата апликација користи API, тогаш за да се автентицира најверојатно ќе треба да регистрирате клучен сертификат што Google го користи за потпишување на вашата апликација. За да најдете сертификат:

  1. Најавете се на Play Console.
  2. Изберете апликација.
  3. Од менито лево, изберете Управување со ослободување > Потписи за апликација.
    • Ако добавувачот на API бара различен тип на отпечаток од прст, можете да го преземете оригиналниот сертификат во формат DER и да го конвертирате по потреба со помош на соодветните алатки.
Објавени апликации

Чекор 1: Регистрирајте се за Програмата за потпишување апликации на Google Play

  1. Најавете се на Play Console.
  2. Изберете апликација.
  3. Од менито лево, изберете Управување со ослободување > Потписи за апликација.
  4. Доколку е потребно, прочитајте ги Условите за користење и кликнете Прифати.

Чекор 2: Испратете го оригиналниот клуч на Google и креирајте клуч за преземање

  1. Најдете го оригиналниот клуч за потпишување на апликацијата.
  2. Најавете се на Play Console.
  3. Изберете апликација.
  4. Од менито лево, изберете Управување со ослободување > Потписи за апликација.
  5. Поставете постоен клуч за потпишување апликација на методот што најмногу одговара на вашиот процес на објавување.
  1. и поставете го сертификатот на Google Play.
    • Можете исто така да го користите клучот за потпишување на апликацијата како клуч за преземање.
  2. Копирајте ги дигиталните отпечатоци од прсти (MD5, SHA-1 и SHA-256) од сертификатот за потпишување на апликацијата.
    • За да спроведете тестирање, можеби ќе треба да регистрирате сертификат за клуч за подигање кај добавувачот на API користејќи го отпечатокот на сертификатот и клучот за потпишување на апликацијата.

Чекор 4: Потпишете го следното ажурирање на апликацијата со клучот за преземање

Објавените ажурирања на апликацијата мора да бидат потпишани со клуч за преземање.

Како да креирате клуч за преземање и да ги ажурирате продавниците за клучеви

Може да креирате клуч за преземање кога ќе се регистрирате за Програмата за потпишување на апликацијата Google Play или може да генерирате еден подоцна во Управување со ослободување > Потписи за апликација.

За да креирате клуч за преземање, следете ги овие чекори:

  1. Следете ги упатствата на страницата на Android Developers. Чувајте го клучот на безбедно место.
  2. Извезете го сертификатот за клучот за подигање во формат PEM. Заменете ги следните аргументи со долна црта:
    • $ keytool -export -rfc -keystore upload-keystore.jks -алијас upload -датотека upload_certificate.pem
  3. Кога ќе биде побарано за време на процесот на издавање, преземете го сертификатот за да го регистрирате кај Google.

Ако користите клуч за преземање:

  • Клучот за преземање е регистриран кај Google само за да се потврди идентитетот на создавачот на апликацијата.
  • Вашиот потпис е отстранет од сите преземања на АПК пред да стигнат до корисниците.
Ограничувања
  • Клучот за преземање мора да користи RSA шифрирање и мора да биде со големина од најмалку 2048 бита.
  • Не се поддржани клучевите DSA и EC, ниту пак RSA клучевите помали од 2048 бита.
Ажурирање складишта за клучеви

Откако ќе го креирате вашиот клуч за преземање, проверете ги и ажурирајте ги следните локации доколку е потребно:

  • локален систем;
  • заштитени локален сервер(со различни списоци за контрола на пристап);
  • облак систем (со различни списоци за контрола на пристап);
  • специјални услуги за управување со клучеви;
  • Git складишта.

Како да го ажурирате клучот за потпишување за нови инсталации на апликации

Во некои случаи, можеби ќе можете да побарате ажурирање на клучот за потпишување апликација. Новиот клуч ќе се користи за потпишување нови инсталации и ажурирања на апликацијата, а застарениот ќе се користи за ажурирање потпишани верзии кои се веќе инсталирани од корисниците.

Клучот за потпишување може да се ажурира само еднаш за секоја апликација. Во неверојатен случај кога користите ист клуч за потпишување за повеќе апликации за да ги стартувате во истиот процес, клучот не може да се ажурира.

Треба да побарате ажурирање на клучот за потпишување на апликацијата во следниве случаи:

  • Потребен ви е побезбеден клуч.
  • Клучот за потпишување на апликацијата е компромитиран.

Забелешка.Барањето за ажурирање на клучот за потпишување апликација на Play Console не е поврзано со замена на клучеви во Android P и подоцнежните верзии. Оваа замена на клучот во моментов не е поддржана од Google Play.

Важни забелешки за ажурирање на клучевите

Пред да побарате ажурирање на клучот, важно е да разберете какви промени ќе повлече тоа.

  • Ако го користите истиот клуч за потпишување за повеќе апликации да користат ист код или податоци, ќе треба да ги ажурирате апликациите за да ги препознаете и новите и старите клучеви.
  • Ако вашата апликација користи API, погрижете се да ги регистрирате сертификатите за новите и старите клучеви за потпишување апликации кај давателот на API пред да ја надградите апликацијата. Сертификатите се достапни на страницата Потпишување апликации Play Console.
  • Ако многу корисници на вашата апликација инсталираат ажурирања преку мрежи за споделување датотеки, тие ќе можат да инсталираат само ажурирања потпишани со истиот клуч како апликацијата инсталирана на нивните уреди. Ако апликациите не можат да се ажурираат затоа што инсталирана верзијапотпишан со друг клуч, корисниците може да го деинсталираат и повторно да го инсталираат за да добиваат ажурирања.
Побарајте ажурирање на клучот за нови инсталации. За да го направите ова, следете ги овие чекори:
  1. Најавете се на Play Console.
  2. Изберете апликација.
  3. Од менито лево, изберете Управување со ослободување > Потписи за апликација.
  4. Во картичката „Ажурирај го клучот за потпишување за нови инсталации на апликации“, изберете Побарајте ажурирање на клучот.
  5. Изберете што да правите со уредот.
    • Во зависност од опцијата што ќе ја изберете, можеби ќе треба да контактирате со поддршката за да го завршите вашето барање.
  6. Дозволете Google Play да генерира нов клуч за потпишување апликација (се препорачува) или преземете еден.
    • Откако ќе го ажурирате клучот за потпишување апликација, ако клучот се совпаѓа со вашиот клуч за преземање, можете да продолжите да го користите стариот клуч за потпишување апликација како клуч за преземање или да креирате нов.
  • Ако сте ја објавиле и вашата апликација надвор од Google Play или планирате да го сторите тоа, можете да генерирате споделен клуч за потпишување апликација и да го поставите на Google кога ќе се регистрирате за Програмата за потпишување апликации на Google Play.
  • За да ја заштитите вашата сметка, овозможи проверка во два чекораза сите сметки што имаат пристап до Play Console.
  • Откако ќе се објави пакетот со апликации во тестот или работна верзијаМоже да го отворите прелистувачот на пакетот апликации и да преземете ZIP архива што ги содржи сите APK-датотеки за одреден уред. Овие APK-датотеки се веќе потпишани со клучот за потпишување апликација. Можете да ги инсталирате на вашиот уред од ZIP архива користејќи ја алатката командна линијасноп алат.
  • За поголема безбедност, генерирајте нов клуч за преземање кој се разликува од клучот за потпишување апликација.
  • Ако сакате да тестирате АПК потпишана со клуч за поставување, регистрирајте го клучот со услуга или API што користи потпис на апликацијата за автентикација (како API Гугл мапиили Фејсбук програмерски пакет).
  • Ако користите Google API, можете да го регистрирате вашиот сертификат за поставување во Google Cloud Console.

Што да направите ако клучот е изгубен или хакиран

Ако сте го изгубиле пристапот до вашиот приватен клуч за преземање или тој е хакиран, и прашајте го сопственикот на вашата сметка. Кога контактирате со поддршката, сопственикот на сметката мора да ја прикачи датотеката upload_certificate.pem.

Кога тимот за поддршка ќе регистрира нов клуч за преземање, ќе добиете е-пошта и потоа ќе можете да ги ажурирате вашите продавници за клучеви и да го регистрирате клучот кај давателите на API.

Важно!Ресетирањето на клучот за преземање не влијае на клучот за потпишување апликација, кој Google Play го користи за потпишување на APK-датотеките пред да ги испрати до корисниците.

Дали оваа информација беше корисна?

Како може да се подобри овој напис?

Понекогаш некои апликации на Андроид не му одговараат на корисникот на некој начин. Пример е наметливото рекламирање. И, исто така, се случува програмата да е добра за сите, но преводот во неа е или искривен или целосно отсутен. Или, на пример, програмата е пробна, но не постои начин да се добие целосната верзија. Како да се промени ситуацијата?

Вовед

Во оваа статија ќе разговараме за тоа како да го расклопите пакетот APK со апликација, да ја разгледаме неговата внатрешна структура, да го расклопите и декомпајлираме бајтекодот, а исто така да се обидеме да направиме неколку промени во апликациите што можат да ни донесат една или друга корист.

За да го направите сето ова сами, ќе ви треба барем основно познавање на јазикот Java, на кој се напишани апликациите за Android, и јазикот XML, кој се користи насекаде во Android - од опишување на самата апликација и нејзините права за пристап до складирање низи кои ќе се прикаже на екранот. Ќе ви треба и способност да користите специјализиран софтвер за конзоли.

Значи, што е APK пакет во кој е дистрибуиран апсолутно целиот софтвер за Android?

Декомпилација на апликација

Во овој напис, работевме само со расклопен код за апликација, но ако се направат посериозни промени во големите апликации, разбирањето на кодот за мали ќе биде многу потешко. За среќа, dex кодот можеме да го декомпајлираме во Java код, кој иако не е оригинален и не е компајлиран, многу полесно се чита и разбира логиката на апликацијата. За да го направите ова, ќе ни требаат две алатки:

  • dex2jar е преведувач на Dalvik bytecode во JVM bytecode, врз основа на кој можеме да добиеме код на јазикот Java;
  • jd-gui е самиот декомпајлер кој ви овозможува да добиете читлив Java-код од JVM bytecode. Како алтернатива, можете да го користите Jad (www.varaneckas.com/jad); Иако е доста стар, во некои случаи генерира почитлив код од Jd-gui.

Вака треба да се користат. Прво, стартуваме dex2jar, наведувајќи ја патеката до пакетот apk како аргумент:

% dex2jar.sh mail.apk

Како резултат на тоа, Java пакетот mail.jar ќе се појави во тековниот директориум, кој веќе може да се отвори во jd-gui за да се види кодот на Java.

Уредување на АПК пакети и нивно примање

Пластична кеса Андроид апликации, всушност, е обична ZIP-датотека, не се потребни посебни алатки за да се прегледа содржината и да се извлече. Доволно е да имате архивар - 7zip за Windows или отпакување на конзола на Linux. Но, тоа е за обвивката. Што има внатре? Општо земено, внатре ја имаме следната структура:

  • МЕТА-ИНФ/- содржи дигитален сертификат на апликацијата, кој го идентификува нејзиниот креатор и контролни суми на датотеките на пакетот;
  • res/ - различни ресурси кои апликацијата ги користи во својата работа, како што се слики, декларативен опис на интерфејсот, како и други податоци;
  • AndroidManifest.xml- опис на апликацијата. Ова вклучува, на пример, листа на потребни дозволи, потребната верзија на Android и потребната резолуција на екранот;
  • часови.dex- компајлиран бајтекод на апликација за Виртуелна машинаДалвик;
  • ресурси.arsc- исто така ресурси, но од различен вид - особено, жици (да, оваа датотека може да се користи за русификација!).

Наведените датотеки и директориуми се, ако не во сите, тогаш, можеби, во огромното мнозинство на АПК. Сепак, има уште неколку не толку вообичаени датотеки/директориуми кои вреди да се споменат:

  • средства- аналог на ресурси. Главната разлика е во тоа што за да пристапите до ресурс треба да го знаете неговиот идентификатор, но листата на средства може да се добие динамички со помош на методот AssetManager.list() во кодот на апликацијата;
  • lib- мајчин Линукс библиотеки напишани со помош на NDK (Native Development Kit).

Овој директориум го користат производителите на игри, ставајќи го моторот за игри напишан во C/C++, како и креаторите на апликации со високи перформанси (на пример, Гугл хром). Го сфативме уредот. Но, како ја добивате датотеката на пакетот на апликацијата за која сте заинтересирани? Бидејќи не е можно да се подигнат APK-датотеки од уредот без root (тие се наоѓаат во директориумот /data/app) и не е секогаш препорачливо искоренувањето, постојат најмалку три начини да ја пренесете датотеката со апликација на вашиот компјутер:

  • Екстензија за преземање на АПК за Chrome;
  • Вистинска APK Leecher апликација;
  • разни хостинг датотеки и Varezniks.

Која да се користи е прашање на вкус; претпочитаме да користиме посебни апликации, па затоа ќе ја опишеме употребата на Real APK Leecher, особено затоа што е напишана на Java и, соодветно, ќе работи или во Windows или во Nix.

Откако ќе ја стартувате програмата, треба да пополните три полиња: е-пошта, лозинка и ID на уред - и изберете јазик. Првите две се е-поштата и лозинката на вашата сметка на Google што ги користите на уредот. Третиот е идентификаторот на уредот, а може да се добие со впишување на кодот на бирачот # #8255## а потоа наоѓање на линијата Device ID. При пополнување, треба само да го внесете ID без префиксот android-.

По пополнувањето и зачувувањето, често се појавува пораката „Грешка при поврзување со серверот“. Нема врска со Google Play, затоа слободно игнорирајте го и барајте пакети што ве интересираат.

Погледнете и изменете

Да речеме дека најдовте пакет што ве интересира, го преземавте, го отпакувавте... и кога се обидовте да прегледате некоја XML датотека, бевте изненадени кога откривте дека датотеката не е текст. Како да се декомпајлира и како воопшто да се работи со пакети? Дали е навистина потребно да се инсталира SDK? Не, воопшто не е неопходно да се инсталира SDK. Всушност, сите чекори за извлекување, менување и пакување на АПК пакетите ги бараат следните алатки:

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

Можете да ги користите сите овие алатки одделно, но ова е незгодно, па затоа е подобро да користите софтвер од повисоко ниво изграден на нивна основа. Ако работите на Linux или Mac OS X, постои алатка наречена apktool. Тоа ви овозможува да ги отпакувате ресурсите во нивната оригинална форма (вклучувајќи бинарни XML и arsc датотеки), повторно да изградите пакет со променети ресурси, но не знае како да потпишува пакети, па затоа ќе мора рачно да ја стартувате алатката за потписници. И покрај фактот дека алатката е напишана во 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 интерфејсот му обезбедува на корисникот интуитивен GUI, со кој можете да извршите операции на распакување, расклопување и декомпајлирање со неколку кликања. Оваа алатка е Donation-ware, односно понекогаш се појавуваат прозорци со барање да добиете лиценца, но на крајот тоа може да се толерира. Нема смисла да се опишува, бидејќи интерфејсот можете да го разберете за неколку минути. Но, apktool, поради неговата конзолна природа, треба да се дискутира подетално.


Ајде да ги погледнеме опциите на apktool. Накратко, постојат три основни команди: d (декодира), b (изградба) и if (инсталирај рамка). Ако сè е јасно со првите две наредби, тогаш што прави третата, условна изјава? Ја отпакува наведената рамка за интерфејс, која е неопходна во случаите кога сецирате кој било системски пакет.

Ајде да ги погледнеме најинтересните опции на првата команда:

  • - не расклопувајте декс-датотеки;
  • - не распакувајте ресурси;
  • - не вметнувајте информации за дебагирање во резултатите од расклопувањето на датотеката dex;
  • -- рамка-пат- користете ја наведената рамка за интерфејс наместо вградената во apktool. Сега да погледнеме неколку опции за командата b:
  • - принудно склопување без проверка на промените;
  • - наведете ја патеката до aapt (алатка за градење архива на APK), ако поради некоја причина сакате да ја користите од друг извор.

Користењето на apktool е многу едноставно; за да го направите ова, само наведете една од командите и патеката до АПК, на пример:

$ apktool d mail.apk

После ова, сите извлечени и расклопени датотеки од пакетот ќе се појават во директориумот за пошта.

Подготовка. Оневозможување на рекламирање

Теоријата е, се разбира, добра, но зошто е потребна ако не знаеме што да правиме со неотпакуваниот пакет? Да се ​​обидеме да ја примениме теоријата во наша корист, имено, да измениме некој софтвер за да не ни прикажува рекламирање. На пример, нека биде Virtual Torch - виртуелен факел. Овој софтвер е идеален за нас, бидејќи е исполнет до крај со досадни реклами и, згора на тоа, е доволно едноставен за да не се изгуби во џунглата на кодот.


Значи, користејќи еден од горенаведените методи, преземете ја апликацијата од пазарот. Ако одлучите да користите Virtuous Ten Studio, едноставно отворете ја APK-датотеката во апликацијата и отпакувајте ја, креирајте проект (Датотека -> Нов проект), а потоа изберете 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

Добиената APK-датотека ќе се појави во директориумот com.kauf.particle.virtualtorch/build/. Сепак, нема да биде возможно да се инсталира, бидејќи нема дигитален потпис и контролни суми на датотеки (едноставно нема директориум META-INF/). Мора да го потпишеме пакетот користејќи ја алатката apk-signer. Лансиран. Интерфејсот се состои од две јазичиња - на првата (Key Generator) создаваме клучеви, на втората (APK Signer) потпишуваме. За да го креирате нашиот приватен клуч, пополнете ги следните полиња:

  • Целна датотека- излезна датотека во продавницата за клучеви; обично складира еден пар клучеви;
  • ЛозинкаИ Потврди- лозинка за складирање;
  • Алијас- име на клучот во складиштето;
  • Лозинка за алијасИ Потврди- лозинка за таен клуч;
  • Валидност- рок на важност (во години). Стандардната вредност е оптимална.

Останатите полиња се генерално опционални - но мора да се пополни барем едно.


ПРЕДУПРЕДУВАЊЕ

За да потпишете апликација користејќи apk-signer, мора да ја инсталирате Android SDK и да ја наведете целосната патека до неа во поставките на апликацијата.

Сите информации се дадени само за информативни цели. Ниту уредниците ниту авторот не се одговорни за каква било можна штета предизвикана од материјалите на овој напис.

Сега можете да ја потпишете АПК со овој клуч. На картичката APK Signer, изберете ја новогенерираната датотека, внесете ја лозинката, клучниот псевдоним и лозинката, потоа пронајдете ја датотеката APK и смело кликнете на копчето „Потпиши“. Ако се оди добро, пакетот ќе биде потпишан.

ИНФОРМАЦИИ

Бидејќи пакетот го потпишавме со сопствен клуч, тој ќе биде во конфликт со оригиналната апликација, што значи дека кога ќе се обидеме да го ажурираме софтверот преку маркетот, ќе добиеме грешка.

Дигитален потпис е потребен само за софтвер од трета страна, па ако менувате системски апликации, кои се инсталирани со копирање во директориумот /system/app/, не треба да ги потпишувате.

После тоа, преземете го пакетот на вашиот паметен телефон, инсталирајте го и стартувајте го. Voila, огласот го нема! Наместо тоа, сепак, се појави порака дека немаме Интернет или немаме соодветни дозволи. Теоретски, ова може да биде доволно, но пораката изгледа досадно и, да бидеме искрени, ние само имавме среќа со глупава апликација. Нормално напишаниот софтвер најверојатно ќе ги разјасни неговите ингеренции или ќе провери дали има интернет врска, а во спротивно едноставно ќе одбие да се стартува. Како да се биде во овој случај? Се разбира, уредете го кодот.

Вообичаено, авторите на апликациите создаваат специјални класи за прикажување реклами и методи за повикување на овие класи кога ќе се стартува апликацијата или една од нејзините „активности“ (на едноставни термини, екраните на апликациите). Ајде да се обидеме да ги најдеме овие класи. Одиме во директориумот smali, потоа com (org ја содржи само отворената графичка библиотека cocos2d), потоа kauf (ова е местото каде што е, бидејќи ова е името на развивачот и целиот негов код е таму) - и еве го, директориумот за маркетинг. Внатре наоѓаме куп датотеки со наставката smali. Тоа се класи, а најзабележителна од нив е класата Ad.smali, од чие име може лесно да се погоди дека е таа што прикажува реклами.

Можеме да ја промениме логиката на неговото функционирање, но би било многу полесно едноставно да ги отстраниме повиците кон кој било од неговите методи од самата апликација. Затоа, го напуштаме директориумот за маркетинг и одиме во соседниот директориум со честички, а потоа до виртуелен торч. Датотеката MainActivity.smali овде заслужува посебно внимание. Ова е стандардна класа на Android што е креирана од Android SDK и инсталирана како влезна точка во апликацијата (аналогно на главната функција во C). Отворете ја датотеката за уредување.

Внатре има smali код (локален асемблер). Прилично е збунувачки и тежок за читање поради неговата природа на ниско ниво, затоа нема да го проучуваме, туку едноставно ќе ги најдеме сите референци за класата Ad во кодот и ќе ги коментираме. Ја внесуваме линијата „Реклама“ во пребарувањето и стигнуваме до линијата 25:

Теренска приватна реклама:Lcom/kauf/маркетинг/Оглас;

Овде се креира рекламно поле за складирање на објект од класата на реклами. Коментираме со ставање знак ### пред линијата. Ја продолжуваме потрагата. Линија 423:

Нов пример v3, Lcom/kauf/маркетинг/Реклама;

Тука се случува создавањето на објектот. Да коментираме. Го продолжуваме пребарувањето и наоѓаме во линиите 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, условната транзиција кон која се врши точно пред да се создаде инстанца. од класата:

Ако-не p1, v0, :cond_10 .линија 74 нов пример v0, Landroid/содржина/Интент; ... :cond_10

Најверојатно, програмата некако случајно пресметува дали рекламирањето треба да се прикажува на главниот екран и, ако не, скока директно на cond_10. Добро, да ја поедноставиме нејзината задача и да ја замениме условната транзиција со безусловна:

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

Нема повеќе спомнувања на FirstAd во кодот, затоа ја затвораме датотеката и повторно го составуваме нашиот виртуелен факел користејќи apktool. Копирајте го на вашиот паметен телефон, инсталирајте го, стартувајте го. Воила, исчезна целата реклама, за што на сите ни честитаме.

Резултати

Оваа статија е само краток вовед во методите на хакирање и менување на апликациите на Android. Многу проблеми останаа зад сцената, како што се отстранување на заштитата, парсирање на заматен код, преведување и замена на ресурсите на апликациите, како и менување на апликации напишани со Android NDK. Сепак, имајќи основно знаење, само прашање на време е да се разбере сето тоа.

Прегледи на објава: 5.618

Android Studioобезбедува многу можности и за развој на апликации и за зголемување на автоматизацијата и удобноста во програмирањето.

Ако користите систем за градење Gradleза да ги креирате вашите апликации, можете исто така да конфигурирате неколку опции за создавање потписи за вашите апликации.

Веројатно не сакате да ги објавувате вашите клучеви за потпишување, лозинки и кориснички имиња во јавно (или дури и приватно) складиште. Затоа можете да ги дефинирате клучот, лозинката и корисничкото име како својства во посебна датотека.

Пред да започнете со потпишување на вашата апликација, треба да креирате нова сопственост во вашата датотека gradle.properties. Ајде да му се јавиме Клучеви.репои, како вредност, наведете ја патеката до папката каде што последователно ќе се наоѓа складиштето на клучеви и датотеката со својства (на пример, C:/Users/UserName/.потпишување).

Keys.repo=C:/Users/UserName/.потпишување

Потоа треба да ја креирате оваа папка или, ако наведовте постоечка, отворете ја. Треба да креирате датотека во неа YourProjectName.својства, во чија внатрешност патеката до продавницата за клучеви, алијасот на клучот и лозинката ќе бидат запишани како својства во следната форма.

RELEASE_STORE_FILE=/YourProjectName/KeyStoreName.jks RELEASE_STORE_PASS=****** RELEASE_ALIAS=KeyAlias`RELEASE_KEY_PASS=******

Како да креирате свод за клучеви?

Ако немате продавница за клучеви, можете лесно да креирате со користејќи AndroidСтудио. За да го направите ова, изберете ја ставката од менито Изградба -> Генерирајте потпишана АПК.

Во прозорецот што се појавува, треба да кликнете Создадете нова...Како резултат на тоа, ќе се отвори прозорец во кој можете да одредите каде ќе се наоѓа складиштето на клучеви (за оваа лекција, подобро е веднаш да ја изберете патеката што ја наведовте во YourProjectName.својстваво сопственост RELEASE_STORE_FILE), како и клучни информации.

Потоа треба да креирате папка Името на вашиот проекти преместете го таму потребна датотекапродавници за клучеви.

Сега можете да продолжите директно до процесот на потпишување. За да го направите ова, треба да ја отворите датотеката во вашиот проект градат.gradle(се наоѓа во папката со апликации). Внатре во неа во блокот андроидтреба да го додадете следниот код.

SigningConfigs ( debug ( /* нема промени овде */ ) издание ( if (project.hasProperty("Keys.repo")) ( def projectPropsFile = file(project.property("Keys.repo") + "/YourProjectName.properties " ) if (projectPropsFile.exists()) ( Properties props = new Properties() props.load(new FileInputStream(projectPropsFile)) storeFile file(file(project.property("Keys.repo") + props["RELEASE_STORE_FILE"] ) ) продавница Реквизити за лозинка["RELEASE_STORE_PASS"] клучАлјас реквизити["RELEASE_ALIAS"] клучен реквизити за лозинка["RELEASE_KEY_PASS"] ) ) друго (println "=================== = ====================================" println " - Please configure release-compilation environment - e.g. in ~/. директориум за потпишување" println "============================================================================== ==============================" ) )

Кои се различните шеми за добивање потпис?

Постојат две шеми за добивање потпис на АПК: v1 JARИ v2 Целосна АПК.

Во првиот случај се потпишува JAR-датотека, што е традиционален начинпотпишување. Потпишувањето v1 не заштитува некои делови од АПК, како што се ZIP метаподатоците. Проверувачот на APK мора да ракува со многу недоверливи (сè уште не потврдени) структури на податоци и потоа да ги отфрли податоците што не се потпишани, оставајќи многу површина за напад. Дополнително, проверувачот на АПК мора да ги декомпресира сите компресирани записи, што троши многу време и меморија. За да се решат овие проблеми, развиена е втората шема v2 Full APK.

Шемата v2 беше претставена во Android 7.0 Nougat (API 25)и работи почнувајќи од верзијата Android Studio 2.2И Приклучок за Android Gradle 2.2. Оваа шема обезбедува побрза инсталација на апликацијата и добра заштита од неовластени промени на АПК. Содржината на АПК е хаширана и потпишана, а потоа добиената Блок на потпис на АПКвметната во АПК.

За време на верификацијата, шемата v2 ја третира АПК како дупка и врши проверка на потпис на целата датотека. Секоја модификација на АПК, вклучително и модификации на метаподатоците ZIP, го поништува потписот. Оваа форма на верификација е многу побрза и може да открие повеќе неовластени модификации.

Новиот формат е компатибилен наназад, така што АПК-ите потпишани со новата шема може да се инсталираат на постари уреди (што едноставно ќе го игнорираат новиот потпис) се додека тие АПК се потпишани и со шемата v1.

Стандардно, потпишувањето ги користи двете шеми за да може да се инсталираат апликации на кој било уред. Меѓутоа, ако има таква потреба, можете да го оневозможите потписот v1 или v2. За да го направите ова, во горниот код во блокот ослободувањеДоволно е да ги додадете следните редови.

V1SigningEnabled неточно

V2SigningEnabled неточно

Исто така, важно е да се забележи дека треба да се потпишете со шемата v1 пред да се потпишете со шемата v2, бидејќи АПК нема да помине потврда во шемата v2 ако е потпишана со дополнителни сертификати по потпишувањето со шемата v2.

Откако ќе се додаде кодот, вклучете го овој код во блок buildTypesвнатре ослободување. На пример:

BuildTypes (издание ( minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" signingConfig signingConfigs.release) )

Сега можете безбедно во ставката од менито Изградбаизберете Изградете АПК, откако претходно го сменивте типот на склопување од дебагирана ослободување. Како што можете да видите, овој метод е удобен затоа што е автоматски, само треба да го конфигурирате еднаш и вашите складишта за клучеви ќе бидат безбедни.


Врв