Проверка на APK подписи: Как да се уверите, че вашето приложение е безопасно
Страничното зареждане на приложения на Android предлага свобода и гъвкавост, но идва с голям риск: подправени приложения. Злонамерените участници често модифицират популярни приложения, за да включват шпионски или рекламен софтуер, преди да ги разпространяват повторно на неофициални сайтове. Как можете да сте сигурни, че APK, който току-що сте изтеглили, е същият, който разработчикът е качил в Google Play?
Отговорът се свежда до APK цифрови подписи. По-долу ще разгледаме как всъщност работи подписването на приложения и ще преминем през нашия Онлайн APK верификатор, за да проверим хеша и сертификата на APK, преди да решите да му се доверите.
60-секундна версия:
Android подписва всеки APK с ключ на издател. Телефонът отказва "актуализация", чийто подпис не съответства на съществуващата инсталация; това е основната защита на ОС срещу имитация. За да проверите странично зареден APK, изчислете неговия SHA-256 хеш и пръстовия отпечатък на сертификата за подписване, след което сравнете и двете със стойностите, на които имате доверие (съществуващата инсталация в Play Store, публикуваният пръстов отпечатък на разработчика или известно добро по-ранно копие). Съвпадение означава, че файлът е идентичен в байтове и е подписан от същия издател; несъответствие означава не инсталирайте.
Какво е APK подпис?
Цифровият подпис е криптографско доказателство за самоличност. Когато програмист завърши приложение, той го „подписва“ с помощта на частен ключ (keystore). След това Android използва съответния публичен ключ, вграден в APK, за да гарантира:
- Почтеност: Файлът не е променян, откакто е подписан.
- Автентичност: Разработчикът е този, за когото се представя.
- Актуализации: Само APK файлове, подписани със същия ключ, могат да актуализират съществуващо приложение на вашия телефон.
Развитие на подписването: V1, V2, V3 и V4
Google непрекъснато подобрява сигурността на APK през годините:
- V1 (подписване на буркан): Подписва индивидуални записи в ZIP. Бавен и уязвим на определени атаки.
- V2 (схема за подпис на APK): Подписва целия файлов блок. Много по-бързо за проверка и по-сигурно. (Android 7.0+)
- V3 (завъртане на клавиши): Позволява на разработчиците да променят своя ключ за подписване, като същевременно поддържат актуализации на приложенията. (Android 9.0+)
- V4 (поточно предаване): Оптимизиран за инкрементални инсталации през ADB. (Android 11+)
Как да проверите APK подписите онлайн
Нашият Инструмент за проверка на APK не просто изчислява хешове; той извършва пълен криптографски одит на веригата от сертификати. Ето как да го използвате:
Стъпки за проверка:
- Отидете до страницата APK верификатор.
- Изберете своя APK или XAPK файл.
- Нашият инструмент анализира директорията META-INF/ и извлича данните от сертификата (.RSA, .DSA или .EC).
- Изчакайте анализът да приключи (отнема само секунди).
- Прегледайте Информация за сертификата: Име на разработчика, организация и страна на произход.
- Проверете Хешове: Сравнете SHA-256, показан на нашия сайт, със стойността, публикувана от издателя на техния собствен официален сайт, страница за публикуване на проекта или манифест за подписване.
Предупреждение за сигурност
Ако верификаторът показва „Сертификат за отстраняване на грешки“ или неизвестен „самоподписан“ обект за основно приложение като Facebook или WhatsApp, НЕ ГО ИНСТАЛИРАЙТЕ. Почти сигурно е компрометирано.
Разбиране на контролните суми (MD5, SHA-1, SHA-256)
Контролните суми са низове с фиксирана дължина, представляващи целия файл. Ако промените един пиксел в иконата на приложение, хешът SHA-256 ще се промени напълно.
| Тип хеш | Ниво на сигурност | Бележки |
|---|---|---|
| MD5 | Наследство | Уязвими към сблъсъци. Не за сигурност. |
| SHA-1 | Умерен | Все още се използва широко за бързо търсене. |
| SHA-256 | Отлично | Модерният стандарт за проверка на приложения. |
Какво всъщност ви казва сертификатът за подпис
Когато верификаторът върне сертификат, частите, които имат значение за безопасността на страничното зареждане, не са цветните битове на метаданните X.509, а малка шепа полета. На практика:
- SHA-256 пръстов отпечатък на сертификата. Това е единствената най-важна стойност: хеш от 64 шестнадесетични знака, който уникално идентифицира ключа за подписване. Два APK файла с един и същ пръстов отпечатък SHA-256 бяха подписани с един и същ частен ключ. Това означава "непрекъснатост на подписа" в логиката за актуализиране на операционната система.
- Отличително име на субект. Често нещо като CN=Some App, O=Example Inc., C=US. Полезен като намек, а не като доказателство за самоличност, тъй като атакуващият може да постави произволен низ, който пожелае, в DN на собствения си самоподписан сертификат. Винаги проверявайте пръстовия отпечатък, а не името.
- Срок на валидност. Повечето легитимни ключове за публикуване се генерират с ~25-годишна валидност (историческата препоръка е 10 000 дни). Сертификат, който изтича следващия месец, или такъв, чиято валидност вече се припокрива с миналото, е червен флаг.
- Алгоритъм за подписване. Съвременните приложения използват SHA256withRSA или SHA256withECDSA. MD5 е счупен; SHA1withRSA е отхвърлен. APK, подписан само с v1 / SHA-1, е подозрителен през 2026 г.
Хеш срещу подпис: Разликата Повечето уроци пропускат
Хората често смесват "хеш" и "подпис". Те служат за много различни цели и безопасната проверка се нуждае и от двете:
- хеш (SHA-256 на целия APK) ви казва дали байтовете на файла са идентични с референтното копие. Ако вашият хеш съответства на публикувания хеш на издателя, файлът не е бил променен, откакто са изчислили този хеш. Самата хеш проверка не казва нищо за това кой е създал байтовете.
- подпис доказва кой е създал байтовете, по-специално, че притежателят на частния ключ, съчетан със сертификата за подпис, е създал този файл. Проверката на подписа сама по себе си не казва нищо за това дали файлът е бил подправен след подписването (ОС ще открие това и ще го отхвърли, но самият сертификат не "знае" за съдържанието на файла).
За странично зареден APK най-силната гаранция съчетава двете: отпечатъкът на сертификата съвпада с известния отпечатък на издателя и, SHA-256 на файла съвпада със стойността, публикувана от издателя за тази точна компилация.
Къде да получите надежден референтен пръстов отпечатък
Най-трудната част от проверката е да знаете правилната стойност, с която да сравните. Няколко надеждни подхода, в груб ред на увереност:
- Собствен уебсайт или страница за издание на издателя. Много проекти с отворен код и доставчици, загрижени за сигурността, публикуват пръстовия отпечатък SHA-256 на техния сертификат за подписване заедно със своите изтегляния. Това е златният стандарт.
- Съществуваща инсталация на Play Store. Ако приложението вече е инсталирано на устройство, управлявано от Play, пръстовият му отпечатък на сертификата е пръстовият отпечатък на издателя по дефиниция. Сравнете пръстовия отпечатък на странично заредения APK с този. Инструменти като Apk Analyzer (в Android Studio) или apksigner verify --print-certs го четат директно от инсталиран APK.
- Първият APK, който сте инсталирали на това приложение. Ако сте използвали приложението от известно време и никога не сте получавали подкана за „несъответствие на подписа“, можете да използвате всяко от по-старите си копия като референция. Последващите актуализации от същия издател трябва да използват същия ключ (или да се редуват чрез v3, в който случай веригата все още се проверява).
- Архивирана публична моментна снимка. Интернет архивът и подобни услуги понякога запазват стари страници за издаване на APK заедно с техните декларирани хешове. Полезно за много стари компилации, където оригиналната страница на издателя е изчезнала.
Често срещани грешки при проверката
- Сравняване на грешното поле. „MD5 на APK файла“ не е същото като „MD5 на сертификата“. Използвайте едно и също поле за файла кандидат и референцията.
- Доверяване на собствените метаданни на файла. APK може да включва произволен низ на версия, всеки етикет на пакет, всеки маркер на автор в своя манифест. Нито едно от тях не е криптографско. Блокът за подпис е единственото нещо, което операционната система действително проверява.
- Проверката се пропуска, защото файлът е изпратен от приятел. Приятел, който казва "това е официалният APK", не го е потвърдил повече от вас. Настоявайте за източник, който публикува пръстов отпечатък, който можете да проверите.
- Третиране на едно съвпадащо поле като достатъчно. Съвпадение както на пръстовия отпечатък SHA-256 на файла, така и на SHA-256 на сертификата; съвпадението на едното, но не и на другото, е знак, че байтовете са променени или източникът се представя за издателя.
- Деактивиране на Play Protect за „удобство“. Play Protect е скенер за второ мнение, който не е заместител на проверката на подписа, но улавя действителен злонамерен софтуер, който проверката на подписа не може, защото Protect знае за известните лоши пакети по съдържание, а не по ключ за подписване. Оставете го включено.
Вашето приложение безопасно ли е?
Не гадайте. Проверете заредените отстрани APK файлове спрямо официални сертификати на разработчици за секунди.
Стартирайте проверката на APKЧесто задавани въпроси (FAQ)
Защо Android ме блокира да инсталирам модифициран APK?
Тъй като подписът на новия APK не съвпада с вече инсталирания. Това не позволява на хакерите да „пренапишат“ истинското ви банково приложение с фалшиво.
Мога ли да подпиша отново APK, след като го модифицирам?
Да, но ще използвате различен ключ. Приложението пак ще се инсталира на „чист“ телефон, но вече няма да получава актуализации от оригиналния разработчик.
Какво е фиксиране на сертификат?
Това е усъвършенствана функция за сигурност, при която дадено приложение изрично проверява за конкретен сертификат, преди да комуникира със своите сървъри, което прави подправените приложения безполезни, дори ако се инсталират правилно.
Направете проверката на подписа част от всяко странично зареждане
Подписите вършат голяма част от тежката работа в съвременната сигурност на Android. Прекарването на допълнителните няколко секунди за стартиране на файл през APK верификатор е евтин начин да предпазите подправено приложение от устройството си, преди да бъде инсталирано.