{"id":483379,"date":"2026-06-11T23:29:53","date_gmt":"2026-06-11T23:29:53","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=483379"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=483379","title":{"rendered":"RuStore \u043a\u0430\u0447\u0430\u0435\u0442 MAX \u0431\u0435\u0437 \u0441\u043f\u0440\u043e\u0441\u0430 \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442 GPS \u043a\u0430\u0436\u0434\u044b\u0435 5 \u043c\u0438\u043d\u0443\u0442 \u0438 \u0435\u043c\u0443 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u0442\u044b\u0434\u043d\u043e"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440.<\/p>\n<p>\u0421 1 \u0430\u043f\u0440\u0435\u043b\u044f 2024 RuStore \u043f\u0440\u0435\u0434 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b, \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u0420\u0424.<br \/>\u041d\u0443 \u0432\u043e\u0442 \u044f <a href=\"https:\/\/habr.com\/ru\/articles\/1036222\/\" rel=\"noopener noreferrer nofollow\">\u041c\u0430\u043a\u0441<\/a> \u0440\u0435\u0432\u0435\u0440\u0441\u0438\u043b, \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u043e\u0434\u043d\u043e \u0438 RuStor \u043f\u043e\u0440\u0435\u0432\u0435\u0441\u0438\u0442\u044c.<\/p>\n<h3>\u041a\u0440\u0430\u0442\u043a\u043e \u0447\u0442\u043e \u044f \u043d\u0430\u0448\u0435\u043b<\/h3>\n<h4>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 RuStore (VK):<\/h4>\n<ul>\n<li>\n<p><strong>\u0428\u043e\u0443\u043a\u0435\u0439\u0441:<\/strong> \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 \u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438 \u0432 \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>POST api.rustore.ru\/v1\/showcase\/startup-destination<\/code> \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u0444\u043e\u043d\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f:<\/strong> \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 <code>ANDROID_ID<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043e \u0444\u043b\u0430\u0433\u0443:<\/strong> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 MAX Messenger \u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0433\u043e \u041f\u041e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u043c\u0443 \u0444\u043b\u0430\u0433\u0443 <code>SAK_MAX_MESSENGER_INSTALL<\/code> \u0447\u0435\u0440\u0435\u0437 \u00ab\u0442\u0438\u0445\u0438\u0439\u00bb \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a.<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u0438\u0445\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430:<\/strong> Push-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043a\u0440\u044b\u0442\u0443\u044e \u0444\u043e\u043d\u043e\u0432\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 (\u043b\u043e\u0433\u0438\u043a\u0430 <code>preorder\/autoinstall<\/code>, <code>PreorderAutoInstallPushDto<\/code>).<\/p>\n<\/li>\n<li>\n<p><strong>SSO-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440:<\/strong> RuStore \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a VK-\u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 AIDL, \u0431\u0435\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Radar:<\/strong> \u041b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f SQLite-\u0431\u0430\u0437\u0430 <code>snapshot_records<\/code> \u0445\u0440\u0430\u043d\u0438\u0442 userId, \u0442\u0440\u0438 \u0433\u0435\u043e\u0444\u0438\u043a\u0441\u0430 (GPS, \u0441\u0435\u0442\u044c, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439), BSSID Wi-Fi-\u0440\u043e\u0443\u0442\u0435\u0440\u0430, \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0442\u043e\u0432\u044b\u0445 \u0432\u044b\u0448\u0435\u043a, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 SIM \u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 VPN\/\u0440\u043e\u0443\u043c\u0438\u043d\u0433\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0410\u0432\u0442\u043e-\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435:<\/strong> \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u0441\u043e\u0444\u0442 \u0432 \u0444\u043e\u043d\u0435, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430:<\/strong> \u0421\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\u0441\u044c (<code>PACKAGE_USAGE_STATS<\/code>); \u0441\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0432\u043e\u0440\u043a\u0435\u0440 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043e\u0442\u0447\u0435\u0442\u044b \u043d\u0430 <code>api.rustore.ru\/user-event-handler<\/code> (AltCraft) \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a userId + vkId + deviceId.<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u043e\u0433\u0433\u043b\u044b:<\/strong> \u0420\u0435\u0435\u0441\u0442\u0440 \u0438\u0437 73 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 VK ID SDK, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0444\u043b\u0430\u0433\u0438 \u0434\u043b\u044f MAX \u0438 <code>sak_messenger_skip_sms_android<\/code>. <\/p>\n<\/li>\n<\/ul>\n<h4>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0435 SDK:<\/h4>\n<ul>\n<li>\n<p><strong>Kaspersky kavsdk:<\/strong> \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0441 KSN-\u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0435\u0439 (19 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f P2P-\u0443\u0437\u043b\u044b), \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 <code>inotify<\/code> \u043f\u043e \u043c\u0435\u0434\u0438\u0430\u043f\u0430\u043f\u043a\u0430\u043c.<\/p>\n<\/li>\n<li>\n<p><a href=\"http:\/\/Mail.ru\" rel=\"noopener noreferrer nofollow\"><strong>Mail.ru<\/strong><\/a><strong> libverify:<\/strong> \u0412\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e SMS\/\u0437\u0432\u043e\u043d\u043a\u0443, \u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0438 \u043d\u043e\u043c\u0435\u0440 flash-call.<\/p>\n<\/li>\n<li>\n<p><strong>VK SuperApp JS Bridge:<\/strong> 150+ \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043f\u0440\u043e\u0431\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 VK-\u0431\u0440\u0430\u0443\u0437\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p><strong>OK Tracer:<\/strong> \u0422\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 <a href=\"http:\/\/sdk-api.apptracer.ru\" rel=\"noopener noreferrer nofollow\"><code>sdk-api.apptracer.ru<\/code><\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"http:\/\/libsecrets.so\" rel=\"noopener noreferrer nofollow\"><strong>libsecrets.so<\/strong><\/a><strong>:<\/strong> \u041e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u044b VK Push SDK.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0421\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 MAX<\/h3>\n<p><code>g20\/<\/code><a href=\"http:\/\/f.java\" rel=\"noopener noreferrer nofollow\"><code>f.java<\/code><\/a> \u044d\u0442\u043e <code>MaxMessengerSeamlessInstallFlow<\/code>. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 <a href=\"http:\/\/ru.oneme.app\" rel=\"noopener noreferrer nofollow\"><code>ru.oneme.app<\/code><\/a> (MAX) \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 VK ID-\u0444\u043b\u043e\u0443 \u0433\u0435\u0439\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0444\u043b\u0430\u0433\u043e\u043c <code>SAK_MAX_MESSENGER_INSTALL<\/code> (\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0445 \u0442\u043e\u0433\u0433\u043b\u043e\u0432 VK, <code>yn0\/<\/code><a href=\"http:\/\/b.java\" rel=\"noopener noreferrer nofollow\"><code>b.java<\/code><\/a>, \u043a\u043b\u044e\u0447 <code>sak_max_messenger_install<\/code>). \u0424\u043b\u0430\u0433 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u0430\u043c\u043e.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0431\u0449\u0438\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a \u0441\u0442\u043e\u0440\u0430 <code>wi2\/<\/code><a href=\"http:\/\/e.java\" rel=\"noopener noreferrer nofollow\"><code>e.java<\/code><\/a>:<\/p>\n<pre><code class=\"java\">public final int g(String packageName) {    PackageInstaller.SessionParams sessionParams = new PackageInstaller.SessionParams(1);    sessionParams.setInstallReason(4);              \/\/ INSTALL_REASON_USER    if (Build.VERSION.SDK_INT &gt;= 31)        sessionParams.setRequireUserAction(2);      \/\/ USER_ACTION_NOT_REQUIRED    if (Build.VERSION.SDK_INT &gt;= 34)        sessionParams.setRequestUpdateOwnership(true);    sessionParams.setAppPackageName(packageName);    return this.f116925e.createSession(sessionParams);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>setRequireUserAction(USER_ACTION_NOT_REQUIRED)<\/code> \u044d\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0431\u0435\u0437 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. Android \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0431\u0435\u0437 \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a\u0430 \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044f (<code>UPDATE_PACKAGES_WITHOUT_USER_ACTION<\/code> \u0438\/\u0438\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 update-owner, \u043e\u0442\u0441\u044e\u0434\u0430 <code>setRequestUpdateOwnership(true)<\/code>). \u0414\u043b\u044f \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0442\u0438\u0445\u043e. \u042d\u0442\u043e \u0448\u0442\u0430\u0442\u043d\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a RuStore, \u0438 MAX \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0444\u043b\u0430\u0433. \u041c\u0435\u0442\u043e\u0434 <code>g<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0435 \u0438\u043c\u044f \u043f\u0430\u043a\u0435\u0442\u0430, MAX <\/p>\n<p><strong>\u0421\u043f\u0440\u0430\u0432\u043a\u0430:<\/strong> \u0431\u0435\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0432\u0435\u0434\u043e\u043c\u0430 \u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f \u0432 \u0444\u043e\u043d\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f MAX &#8212; \u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 E2E-\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u041f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e \u043d\u0438 \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c Android \u0434\u043b\u044f \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432, \u043d\u0438 \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c \u043b\u044e\u0431\u043e\u0433\u043e \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<h3>Push \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0442\u0438\u0445\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043f\u0430\u043a\u0435\u0442\u0430<\/h3>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 MAX \u044d\u0442\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u0443\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443. \u0412 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0438\u0447\u0435 <a href=\"http:\/\/ru.vk.store\" rel=\"noopener noreferrer nofollow\"><code>ru.vk.store<\/code><\/a><code>.feature.preorder.autoinstall<\/code> \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c push-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>\u041f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 push-\u0430 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 <code>PreorderAutoInstallPushDto<\/code> (<code>...\/impl\/data\/<\/code><a href=\"http:\/\/PreorderAutoInstallPushDto.java\" rel=\"noopener noreferrer nofollow\"><code>PreorderAutoInstallPushDto.java<\/code><\/a>):<\/p>\n<pre><code class=\"java\">@Serializableclass PreorderAutoInstallPushDto {    String packageName;   \/\/ \u0447\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c    String name;    String icon;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u0430\u043f\u043f\u0435\u0440 <code>qq1\/<\/code><a href=\"http:\/\/a.java\" rel=\"noopener noreferrer nofollow\"><code>a.java<\/code><\/a> (PreorderAutoInstallPushMapper) \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0442\u0435\u043b\u043e push-\u0430 \u0432 \u044d\u0442\u043e\u0442 DTO:<\/p>\n<pre><code class=\"java\">PreorderAutoInstallPushDto dto =    json.decode(PreorderAutoInstallPushDto.serializer(), str);return new PreorderAutoInstallPush(dto.getPackageName(), dto.getName(), Url(dto.getIcon()));<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 <code>PreorderAutoInstallPushObserver<\/code> (<code>tq1\/<\/code><a href=\"http:\/\/h.java\" rel=\"noopener noreferrer nofollow\"><code>h.java<\/code><\/a>) \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u044d\u0442\u043e \u0432 <code>GetPreorderAutoInstallActionInteractor<\/code> (<code>sq1\/<\/code><a href=\"http:\/\/a.java\" rel=\"noopener noreferrer nofollow\"><code>a.java<\/code><\/a>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f <code>PreorderAutoInstallAction<\/code>:<\/p>\n<pre><code class=\"java\">INSTALL, NOTIFICATION, SCREEN<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u0432\u0435\u0442\u043a\u0435 <code>INSTALL<\/code> \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 <code>PreorderAutoInstallController<\/code> (<code>tq1\/<\/code><a href=\"http:\/\/c.java\" rel=\"noopener noreferrer nofollow\"><code>c.java<\/code><\/a>) \u0437\u043e\u0432\u0451\u0442 <code>InstallAppUseCaseImpl<\/code> (<code>storeapp\/install\/impl\/domain\/<\/code><a href=\"http:\/\/j.java\" rel=\"noopener noreferrer nofollow\"><code>j.java<\/code><\/a>), \u0438 \u0442\u043e\u0442 \u0441\u0442\u0430\u0432\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c:<\/p>\n<pre><code class=\"java\">\/\/ InstallAppUseCaseImpl.a(...)installRequestRepository.a(new InstallRequest.Enqueue(    packageName, appId, name, iconUrl, versionCode, signatures, ...));<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0447\u0435\u0440\u0435\u0434\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 install-\u0432\u043e\u0440\u043a\u0435\u0440, \u0430 \u0441\u0430\u043c \u043f\u0430\u043a\u0435\u0442 \u0441\u0442\u0430\u0432\u0438\u0442 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a <code>wi2\/<\/code><a href=\"http:\/\/e.java\" rel=\"noopener noreferrer nofollow\"><code>e.java<\/code><\/a> \u0441 <code>setRequireUserAction(USER_ACTION_NOT_REQUIRED)<\/code>. \u041d\u0430 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0432 \u0444\u043e\u043d\u0435 \u0431\u0435\u0437 \u0442\u0430\u043f\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 <code>PUSH<\/code> \u043f\u0440\u044f\u043c\u043e \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u0432 <a href=\"http:\/\/MainActivity.java\" rel=\"noopener noreferrer nofollow\"><code>MainActivity.java<\/code><\/a> (<code>PreorderAutoInstallReadyAnalyticsSource.PUSH<\/code>).<\/p>\n<p>\u0412\u044b\u0431\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 <code>INSTALL<\/code> \u0438 <code>NOTIFICATION<\/code>\/<code>SCREEN<\/code> \u0433\u0435\u0439\u0442\u0438\u0442\u0441\u044f <code>GetSilentInstallAvailabilityUseCase<\/code> (<code>ld1\/<\/code><a href=\"http:\/\/a.java\" rel=\"noopener noreferrer nofollow\"><code>a.java<\/code><\/a>) \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0442\u043e\u0433\u0433\u043b\u043e\u043c (<code>FlipperRepository<\/code>). \u041a\u043e\u0433\u0434\u0430 \u0442\u0438\u0445\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0438 \u0442\u043e\u0433\u0433\u043b \u0432\u043a\u043b\u044e\u0447\u0451\u043d, \u0431\u0435\u0440\u0451\u0442\u0441\u044f <code>INSTALL<\/code>, \u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u044d\u043a\u0440\u0430\u043d.<\/p>\n<p>\u0428\u0442\u0430\u0442\u043d\u044b\u0439, \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0437\u0430\u043a\u043e\u043d\u043d\u043e: \u0432\u044b \u0436\u043c\u0451\u0442\u0435 \u00ab\u041f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437\u0430\u0442\u044c\u00bb (<code>POST v1\/preorder<\/code>, <code>vq1\/<\/code><a href=\"http:\/\/a.java\" rel=\"noopener noreferrer nofollow\"><code>a.java<\/code><\/a>), \u0432 \u0434\u0438\u0430\u043b\u043e\u0433\u0435 \u043f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e-\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 (<code>AUTO_INSTALL<\/code>, <code>setAutoInstall<\/code>), \u0438 \u043d\u0430 \u0440\u0435\u043b\u0438\u0437\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0441\u0430\u043c\u043e. \u042d\u0442\u043e \u0432\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0441\u0430\u043c\u0438.<\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0432\u044f\u0437\u043a\u0430 <code>GetPreorderAutoInstallActionInteractor<\/code> (<code>sq1\/<\/code><a href=\"http:\/\/b.java\" rel=\"noopener noreferrer nofollow\"><code>b.java<\/code><\/a>) \u0438 <code>PreorderAutoInstallController<\/code> (<code>tq1\/<\/code><a href=\"http:\/\/c.java\" rel=\"noopener noreferrer nofollow\"><code>c.java<\/code><\/a>). \u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u043e\u0440 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (<code>INSTALL<\/code> \/ <code>NOTIFICATION<\/code> \/ <code>SCREEN<\/code>) \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0442\u043e\u0433\u0433\u043b\u0430 (<code>FlipperRepository<\/code>) \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0442\u0438\u0445\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u0435\u0440\u0451\u0442 \u0438\u043c\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u0442\u0435\u043b\u0430 \u043f\u0443\u0448\u0430 (<code>PreorderAutoInstallPushDto.packageName<\/code>), \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0438\u043c \u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 RuStore (<code>storeAppRepository.e(...)<\/code>) \u0438 \u043e\u0442\u0434\u0430\u0451\u0442 \u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 (<code>InstallAppUseCaseImpl<\/code> -&gt; \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 <code>wi2\/<\/code><a href=\"http:\/\/e.java\" rel=\"noopener noreferrer nofollow\"><code>e.java<\/code><\/a>).<\/p>\n<p>\u041f\u0440\u0438\u043a\u043e\u043b \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0447\u0442\u043e \u0432\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u043b\u0438 \u043f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442 \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u043d\u0435\u0442\u0443. \u0421\u0440\u0435\u0434\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u043e\u0440\u0430 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437\u0430\u0445 (\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 <code>PreorderApi<\/code> \/ <code>PreorderNewRepository<\/code> \u0438\u0437 <code>vq1<\/code> \u0441\u044e\u0434\u0430 \u043d\u0435 \u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442\u0441\u044f), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u0441\u043b\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0441 \u0432\u0430\u0448\u0438\u043c\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437\u0430\u043c\u0438 \u044d\u0442\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442. \u0427\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430\u0437\u0432\u0430\u043b, \u0442\u043e \u0438 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f.<\/p>\n<p>\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043b \u0431\u044b \u0432\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a: \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u044d\u0442\u043e \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043d\u0430 \u0441\u043b\u043e\u0432\u043e. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 ( 67 \u043b\u044f\u043c\u043e\u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a ) \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0446\u0435\u043b\u044c\u044e \u0430\u0442\u0430\u043a, \u0438 \u043f\u0440\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0443\u0448\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0432\u044b\u0440\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u00ab\u043d\u0430\u0437\u043e\u0432\u0438 \u043b\u044e\u0431\u043e\u0439 \u043f\u0430\u043a\u0435\u0442 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 -&gt; \u043e\u043d \u0432\u0441\u0442\u0430\u043d\u0435\u0442 \u0432 \u0444\u043e\u043d\u0435\u00bb \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0442\u0438\u0445\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439, \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437\u0430 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0436\u0435\u0440\u0442\u0432\u044b. <\/p>\n<p>\u0418 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043c\u0435\u0442\u0430\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442: \u0432 \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u044d\u0442\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e. \u041f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044f \u0442\u0438\u0445\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0442\u043e\u0433\u0433\u043b\u044b \u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0443\u0434\u043e\u0431\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u043d\u0435\u0434\u043e\u0441\u043c\u043e\u0442\u0440.<\/p>\n<p><strong>\u0421\u043f\u0440\u0430\u0432\u043a\u0430:<\/strong> \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0437\u0430\u0448\u0438\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u044d\u043a\u0434\u043e\u0440. \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u0433\u043e, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 \u0432\u044b \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0446\u0438\u0438. \u0421\u0435\u0440\u0432\u0435\u0440\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c Push-\u0441\u0438\u0433\u043d\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u044b\u0442\u043d\u043e \u0440\u0430\u0441\u043a\u0430\u0442\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0441\u043e\u0444\u0442 \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u041f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u043e \u0442\u0438\u043f\u0443 Fdroid \u0438\u043b\u0438 Auroraoss &#8212; \u0442\u0438\u0445\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 <em>\u043d\u043e\u0432\u043e\u0433\u043e<\/em> \u041f\u041e \u0431\u0435\u0437 \u044f\u0432\u043d\u043e\u0433\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f &#8212; \u044d\u0442\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b.<\/p>\n<h3>\u041f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Radar: \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0439, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e<\/h3>\n<p>RuStore \u043d\u0435\u0441\u0451\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0438 <code>Radar<\/code> (\u043f\u0430\u043a\u0435\u0442 <a href=\"http:\/\/ru.vk.store.lib.analytics\" rel=\"noopener noreferrer nofollow\"><code>ru.vk.store.lib.analytics<\/code><\/a><code>.system.radar<\/code>). \u042d\u0442\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 (\u043d\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 SDK). Radar \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u00ab\u0441\u043d\u0430\u043f\u0448\u043e\u0442\u00bb \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0430\u0437\u0443 SQLite \u0438 \u0440\u0430\u0437 \u0432 12 \u0447\u0430\u0441\u043e\u0432 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u0441\u0445\u0435\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. Room-\u0431\u0430\u0437\u0430 <code>RadarDatabase<\/code> \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 <code>snapshot_records<\/code> (<code>dh2\/<\/code><a href=\"http:\/\/c.java\" rel=\"noopener noreferrer nofollow\"><code>c.java<\/code><\/a>, \u043a\u043b\u0430\u0441\u0441 <code>RadarDatabase_Impl<\/code>). \u041d\u0438\u0436\u0435 \u0435\u0451 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 <code>CREATE TABLE<\/code>, \u0438\u043c\u0435\u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u044b\u0435, \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043c\u043e\u0438:<\/p>\n<pre><code class=\"sql\">CREATE TABLE `snapshot_records` (  `id` INTEGER PRIMARY KEY AUTOINCREMENT,  `sequenceNumber` INTEGER NOT NULL,  `userId` TEXT,                       -- \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f  `createdTime` INTEGER NOT NULL,  `reason` TEXT NOT NULL,              -- \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0441\u043d\u0438\u043c\u043a\u0430  -- \u0442\u0440\u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0433\u0435\u043e\u0444\u0438\u043a\u0441\u0430, \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442:  `lastLocationlatitude` REAL, `lastLocationlongitude` REAL, `lastLocationaltitude` REAL,  `lastLocationaccuracy` REAL, `lastLocationspeed` REAL,  `gpsLocationlatitude` REAL, `gpsLocationlongitude` REAL, `gpsLocationaltitude` REAL,  `networkLocationlatitude` REAL, `networkLocationlongitude` REAL,  -- \u0441\u043e\u0442\u043e\u0432\u0430\u044f \u0441\u0435\u0442\u044c:  `networkStatecellularExtendedInfosimOperator` TEXT,     -- \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 SIM  `networkStatecellularExtendedInfonetworkOperator` TEXT,  `networkStatecellularExtendedInfoisRoaming` INTEGER,    -- \u0440\u043e\u0443\u043c\u0438\u043d\u0433  `networkStatecellularExtendedInfocellInfoList` BLOB,    -- \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u044b\u0448\u0435\u043a  `networkStatecellularExtendedInfosimInfoList` BLOB,  -- \u0441\u0435\u0442\u044c \u0438 \u0442\u0440\u0430\u0444\u0438\u043a:  `networkStatenetworkInfovpnEnabled` INTEGER,            -- \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u043b\u0438 VPN  `networkStatenetworkInfosignalStrength` INTEGER,  `networkStatesystemTrafficStatstotalBytes` INTEGER NOT NULL,  `networkStateprocessTrafficStatstotalBytes` INTEGER NOT NULL,  -- Wi-Fi, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u0442\u0435\u043b\u0435\u0444\u043e\u043d:  `connectedWifiInfobssid` TEXT,                          -- MAC \u0440\u043e\u0443\u0442\u0435\u0440\u0430  `connectedWifiInfofreq` INTEGER,  -- \u0431\u0430\u0442\u0430\u0440\u0435\u044f:  `batteryInfochargePercent` REAL, `batteryInfopowerSaveMode` INTEGER)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0451\u0432 \u0434\u0430\u043d\u043d\u044b\u0445: \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (<code>userId<\/code>), \u0442\u0440\u0438 \u0433\u0435\u043e\u0444\u0438\u043a\u0441\u0430 (GPS, \u043f\u043e \u0441\u0435\u0442\u0438, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439), MAC \u0440\u043e\u0443\u0442\u0435\u0440\u0430, \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0442\u043e\u0432\u044b\u0445 \u0432\u044b\u0448\u0435\u043a, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 SIM, \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0440\u043e\u0443\u043c\u0438\u043d\u0433\u0430, \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f VPN, \u0437\u0430\u0440\u044f\u0434 \u0431\u0430\u0442\u0430\u0440\u0435\u0438, \u043e\u0431\u044a\u0451\u043c \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0441\u043d\u0438\u043c\u043a\u0430. \u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a <code>userId<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435 \u043e\u0431\u0435\u0437\u043b\u0438\u0447\u0435\u043d\u044b \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0441\u0445\u0435\u043c\u044b.<\/p>\n<p>DTO \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 (<code>SnapshotDto<\/code>) \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0441\u0451\u0442 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (<code>DeviceStateDto<\/code>: manufacturer, model, osVersion, \u043f\u043e\u043b\u0435 <code>tac<\/code> \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u0446\u0438\u0444\u0440\u044b IMEI) \u0438 <code>clientState<\/code> (<code>ClientStateDto<\/code>) \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 <code>identifier<\/code> \u0438 <code>userIdentifier<\/code>.<\/p>\n<p>\u041f\u043e\u0434-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0438 \u0441\u0435\u0442\u0435\u0439:<\/p>\n<pre><code class=\"java\">\/\/ LocationDto.javalon, lat, accuracy, speed, altitude, hasAltitude, source, elapsedTime\/\/ WifiNetworkInfoDto.javaisConnected, signalLevel, level, bbsid, freq    \/\/ bbsid = MAC \u0442\u043e\u0447\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430\/\/ CellInfoDto.javatype, mcc, mnc, area, cellId, rfcn, pscPci, bandwidth, signalList, isRegistered<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043b\u0435\u0436\u0430\u0442 \u0441\u0440\u0430\u0437\u0443 \u0447\u0435\u0442\u044b\u0440\u0435 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435: GPS-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u043e \u0441\u0435\u0442\u0438, Cell ID \u0441\u043e\u0442\u044b \u0438 MAC-\u0430\u0434\u0440\u0435\u0441 \u0440\u043e\u0443\u0442\u0435\u0440\u0430. \u042d\u0442\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0433\u0435\u043e\u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c GPS.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0441\u043d\u0430\u043f\u0448\u043e\u0442 (\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 <code>SnapshotReason<\/code>, \u0442\u0440\u0435\u043a\u0435\u0440 <code>RadarSnapshotTracker<\/code> \u044d\u0442\u043e <code>kh2\/<\/code><a href=\"http:\/\/n.java\" rel=\"noopener noreferrer nofollow\"><code>n.java<\/code><\/a>, \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 \u0444\u0438\u0447-\u0444\u043b\u0430\u0433 <a href=\"http:\/\/ru.vk.store\" rel=\"noopener noreferrer nofollow\"><code>ru.vk.store<\/code><\/a><code>.lib.featuretoggle.a.D0<\/code>):<\/p>\n<pre><code class=\"java\">APP_WAKEUP, HEARTBEAT_APP, APP_BACKGROUND, NETWORK_CHANGED<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u043f\u0440\u0438 \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u043c\u0443 \u0442\u0430\u0439\u043c\u0435\u0440\u0443-heartbeat, \u043f\u0440\u0438 \u0443\u0445\u043e\u0434\u0435 \u0432 \u0444\u043e\u043d \u0438 \u043f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0441\u0435\u0442\u0438. \u041f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 <code>RadarInitializer<\/code> (<code>presentation\/<\/code><a href=\"http:\/\/a.java\" rel=\"noopener noreferrer nofollow\"><code>a.java<\/code><\/a>), \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u0442\u0440\u043e\u0438\u0442 <code>RadarAnalytics.snapshot<\/code> (<code>kh2\/<\/code><a href=\"http:\/\/e.java\" rel=\"noopener noreferrer nofollow\"><code>e.java<\/code><\/a>) \u0438 \u043a\u043b\u0430\u0434\u0451\u0442 \u0432 \u0411\u0414 \u0447\u0435\u0440\u0435\u0437 <code>dh2.r<\/code>.<\/p>\n<p>\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u0438 \u0441\u0440\u043e\u043a\u0438 \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0432\u0438\u0434\u043d\u044b \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 \u0442\u043e\u0433\u0433\u043b\u043e\u0432 (<code>ru\/vk\/store\/lib\/featuretoggle\/<\/code><a href=\"http:\/\/a.java\" rel=\"noopener noreferrer nofollow\"><code>a.java<\/code><\/a>), \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e:<\/p>\n<pre><code>techRadarHeartbeatIntervalSeconds = 120   \/\/ \u0441\u043d\u0438\u043c\u043e\u043a \u0440\u0430\u0437 \u0432 2 \u043c\u0438\u043d\u0443\u0442\u044b (\u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0444\u043b\u0430\u0433 D0)techRadarRecordDaysLimit          = 15    \/\/ \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u043e\u043f\u044f\u0442\u0441\u044f \u0432 \u0411\u0414 \u0434\u043e 15 \u0434\u043d\u0435\u0439techRadarFlushSnapshotsHourVariants = 2, 3, 4, 14, 15, 16   \/\/ \u0447\u0430\u0441\u044b \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438techRadarBatchSize                = 15techRadarAnalyticsEnabled         = false \/\/ \u043c\u0430\u0441\u0442\u0435\u0440-\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u044d\u0442\u043e \u0441\u043d\u0438\u043c\u043e\u043a \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0437 \u0432 2 \u043c\u0438\u043d\u0443\u0442\u044b \u043f\u043e heartbeat, \u043f\u043b\u044e\u0441 \u0441\u043d\u0438\u043c\u043a\u0438 \u043f\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c, \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0430\u0437\u0435 \u0434\u043e 15 \u0434\u043d\u0435\u0439 \u0438 \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0439 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0430\u0441\u044b.<\/p>\n<p>\u041a\u0443\u0434\u0430 \u0443\u0445\u043e\u0434\u0438\u0442. \u041d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0440\u0430\u0437 \u0432 12 \u0447\u0430\u0441\u043e\u0432 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442 <code>RadarFlushSnapshotWorker<\/code> -&gt; <code>jh2.e SendSnapshotsUseCase<\/code> -&gt; <code>gh2.g SnapshotRemoteRepository<\/code> -&gt; <code>gh2.e ReportDataSource<\/code> -&gt; <code>gh2.d<\/code>, \u0433\u0434\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f HTTP-\u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 OkHttp:<\/p>\n<pre><code class=\"java\">\/\/ gh2\/d.java (ReportDataSource$post)a0.a aVar2 = new a0.a();aVar2.h(\"https:\/\/reef.vk-cdn.net\/ru-vk-store\/stat\/v1\/ev\");   \/\/ POSTaVar2.f(b13);                                                \/\/ \u0442\u0435\u043b\u043e = \u0431\u0430\u0442\u0447 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u0432return eVar.f43452b.a(new a0(aVar2)).e();<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>Endpoint: <code>POST <\/code><a href=\"https:\/\/reef.vk-cdn.net\/ru-vk-store\/stat\/v1\/ev\" rel=\"noopener noreferrer nofollow\"><code>https:\/\/reef.vk-cdn.net\/ru-vk-store\/stat\/v1\/ev<\/code><\/a>, Content-Type <code>application\/x-www-form-urlencoded<\/code> (<code>gh2\/<\/code><a href=\"http:\/\/e.java\" rel=\"noopener noreferrer nofollow\"><code>e.java<\/code><\/a>). \u041e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 <code>deviceId<\/code>, \u0447\u0442\u043e \u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439: \u0432 <code>gh2\/<\/code><a href=\"http:\/\/b.java\" rel=\"noopener noreferrer nofollow\"><code>b.java<\/code><\/a> (DeviceStateMapper) <code>this.f43440a = gVar.a()<\/code>, \u0442\u0430 \u0436\u0435 <code>di2.g<\/code> \u0441 <code>ANDROID_ID<\/code> \u043f\u043b\u044e\u0441 \u0445\u044d\u0448 \u0436\u0435\u043b\u0435\u0437\u0430.<\/p>\n<p>\u0421\u0431\u043e\u0440 \u0433\u0435\u0439\u0442\u0438\u0442\u0441\u044f \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0442\u043e\u0433\u0433\u043b\u0430\u043c\u0438 (\u0444\u0438\u0447-\u0444\u043b\u0430\u0433\u0438 \u00abFlipper\u00bb, <code>FlipperRepository<\/code>; \u0432 <code>dh2\/<\/code><a href=\"http:\/\/r.java\" rel=\"noopener noreferrer nofollow\"><code>r.java<\/code><\/a> \u0438 <code>presentation\/<\/code><a href=\"http:\/\/a.java\" rel=\"noopener noreferrer nofollow\"><code>a.java<\/code><\/a> \u044d\u0442\u043e <code>Feature.Remote<\/code>), \u0430 \u0433\u0435\u043e\u0444\u0438\u043a\u0441\u044b \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043d\u0430 \u043b\u043e\u043a\u0430\u0446\u0438\u044e (<code>ACCESS_FINE_LOCATION<\/code> \/ <code>ACCESS_COARSE_LOCATION<\/code> \u0432 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442). \u041a\u043e\u043b\u043e\u043d\u043a\u0430 <code>userId<\/code> \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430 nullable, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0442\u0440\u0438 \u0433\u0435\u043e\u0444\u0438\u043a\u0441\u0430, MAC \u0440\u043e\u0443\u0442\u0435\u0440\u0430, \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0442\u043e\u0432\u044b\u0445 \u0432\u044b\u0448\u0435\u043a, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 SIM, \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0440\u043e\u0443\u043c\u0438\u043d\u0433\u0430 \u0438 \u0444\u043b\u0430\u0433 VPN \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f. \u041f\u043e \u0441\u0445\u0435\u043c\u0435 <code>snapshot_records<\/code> \u044d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0431\u0443\u0444\u0435\u0440\u043e\u043c \u0432 SQLite, \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u0441\u043d\u044f\u0442\u0438\u044f.<\/p>\n<p>\u042f \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u043a\u0430\u043a \u0438\u0445 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u0442\u044c.<\/p>\n<p><strong>\u0421\u043f\u0440\u0430\u0432\u043a\u0430:<\/strong> \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0437\u0434\u0440\u0430\u0432\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0438 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u0438, \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0432\u0430\u0448\u0438 \u0442\u043e\u0447\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, MAC-\u0430\u0434\u0440\u0435\u0441\u0430 \u0440\u043e\u0443\u0442\u0435\u0440\u043e\u0432 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0442\u043e\u0432\u044b\u0445 \u0432\u044b\u0448\u0435\u043a \u043a\u0430\u0436\u0434\u044b\u0435 2 \u043c\u0438\u043d\u0443\u0442\u044b. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442. \u041f\u043e \u0444\u0430\u043a\u0442\u0443, \u043f\u043e\u0434 \u0432\u0438\u0434\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u0432 \u0432\u0430\u0448 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0448\u0438\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 GPS-\u043c\u0430\u044f\u0447\u043e\u043a. \u041e\u043d \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043f\u0438\u0448\u0435\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0432\u0430\u0448\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u0438 \u043d\u0430\u043c\u0435\u0440\u0442\u0432\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0451 \u043a \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u043c\u0443 ID \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. <\/p>\n<h3>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 VK \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435<\/h3>\n<p>\u041f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u0444\u043e\u043d\u0435 RuStore \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<p>\u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432:<\/p>\n<pre><code>PackageManager.getInstalledPackages(flags)    | sd1\/j.java - InstalledAppDataSource    | sd1\/p.java - InstalledAppRepositoryImpl    | aj1\/a.java - GetStartDestinationUseCaseImpl    | yi1\/d.java - StartDestinationRepository    vPOST https:\/\/api.rustore.ru\/v1\/showcase\/startup-destination<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>DTO \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (<code>ru\/vk\/store\/feature\/navigation\/startDestination\/impl\/data\/<\/code><a href=\"http:\/\/UserAppsDto.java\" rel=\"noopener noreferrer nofollow\"><code>UserAppsDto.java<\/code><\/a>):<\/p>\n<pre><code class=\"java\">@kotlinx.serialization.Serializablepublic final class UserAppsDto {    private final List&lt;String&gt; packageNames;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>deviceId<\/code> \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435, <code>packageNames<\/code> \u0432 \u0442\u0435\u043b\u0435.<\/p>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u0442\u0441\u044f: \u0432 <code>sd1\/h.java<\/code>\/<code>sd1\/j.java<\/code> \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u0438\u043a\u043e\u043d\u043a\u0430 \u0432 \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0435 (<code>android.intent.category.LAUNCHER<\/code> \/ <code>LEANBACK_LAUNCHER<\/code>) \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0441 \u043a\u043e\u0434\u043e\u043c (\u043d\u0435 PERSISTENT, \u043d\u0435 DATA_ONLY). \u0424\u043b\u0430\u0433 <code>getInstalledPackages<\/code> \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>0<\/code>, \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u043c \u0442\u043e\u0433\u0433\u043b\u0435 <code>512<\/code>. \u041d\u043e \u0438 \u044d\u0442\u043e\u0433\u043e \u0445\u0432\u0430\u0442\u0430\u0435\u0442: \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u0438\u0434\u0438\u0442 \u0432\u0430\u0448\u0438 \u0431\u0430\u043d\u043a\u0438, \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u044b, \u0412\u041f\u041d\u042b, \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u044b \u0438 \u0442\u043e, \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u043d\u0430\u0431\u043e\u0440 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c.<\/p>\n<p>Header <code>deviceId<\/code> \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 <code>di2\/<\/code><a href=\"http:\/\/g.java\" rel=\"noopener noreferrer nofollow\"><code>g.java<\/code><\/a>:<\/p>\n<pre><code class=\"java\">@kotlinx.serialization.Serializablepublic final class UserAppsDto {    private final List&lt;String&gt; packageNames;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>f32037c<\/code> \u044d\u0442\u043e \u0445\u044d\u0448 \u0438\u0437 <code>Build.MANUFACTURER\/MODEL\/HARDWARE\/DEVICE<\/code>. <code>ANDROID_ID<\/code> \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 factory reset, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u043d\u0430 \u0433\u043e\u0434\u044b.<\/p>\n<p>\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043a\u0430\u043a <code>PeriodicWorkRequest<\/code> \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>PeriodicUpdateStartDestination<\/code> (<code>bj1\/<\/code><a href=\"http:\/\/e.java\" rel=\"noopener noreferrer nofollow\"><code>e.java<\/code><\/a>, <code>enqueueUniquePeriodicWork<\/code>). \u0421\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e.<\/p>\n<p>\u041d\u0443\u0436\u043d\u043e \u044d\u0442\u043e \u0447\u0442\u043e\u0431 \u0441\u0432\u0435\u0440\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 (<code>versionCode<\/code>) \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 \u0442\u0435\u043c\u0438, \u0447\u0442\u043e \u043b\u0435\u0436\u0430\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435&#8230; \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u044f \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441 UserAppsDto \u043d\u0435\u0441\u0451\u0442 \u0442\u043e\u043b\u044c\u043a\u043e packageNames, \u0431\u0435\u0437 \u0432\u0435\u0440\u0441\u0438\u0439. \u0410  \u044d\u0442\u043e\u0442 update-\u0444\u043b\u043e\u0443 \u043d\u0435 \u00ab\u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u00bb \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435. \u0412 \u0442\u043e\u043c \u0436\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435. \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0443\u0445\u043e\u0434\u0438\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u043b\u0430\u0443\u043d\u0447\u0430\u0431\u043b-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. <\/p>\n<p><strong>\u0421\u043f\u0440\u0430\u0432\u043a\u0430:<\/strong> \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u043b\u044e\u0431\u043e\u043c\u0443 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0443 \u043d\u0443\u0436\u0435\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439. \u041d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0443\u0434\u043e\u0441\u0443\u0436\u0438\u043b\u0438\u0441\u044c \u043f\u0440\u0438\u043a\u0440\u044b\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u043e\u0442\u0433\u043e\u0432\u043e\u0440\u043a\u043e\u0439. \u0412 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043b\u0435\u0442\u0430\u044e\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432 &#8212; \u0431\u0435\u0437 \u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439. \u0410 \u043d\u0435 \u0437\u043d\u0430\u044f \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u042d\u0442\u043e \u043f\u0440\u044f\u043c\u043e \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0440\u0443\u0442\u0438\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0432\u0435\u043d\u0442\u0430\u0440\u0438\u0437\u0430\u0446\u0438\u0438. RuStore \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0441\u043b\u0438\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u044b VK \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043b\u0435\u043f\u043e\u043a \u0432\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430: \u043a\u0430\u043a\u0438\u0435 VPN \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435, \u043a\u0430\u043a\u0438\u0435 \u0431\u0430\u043d\u043a\u0438, \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u044b \u0438\u043b\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u044b \u0443 \u0432\u0430\u0441 \u0441\u0442\u043e\u044f\u0442. \u0412\u0435\u0441\u044c \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u043c\u0435\u0440\u0442\u0432\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u043c\u0443 ID \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430 (ANDROID_ID). <\/p>\n<h3>\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0443\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 RuStore<\/h3>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, RuStore \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 \u0441\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440. \u0421\u0431\u043e\u0440 \u0434\u0435\u043b\u0430\u0435\u0442 <a href=\"http:\/\/ru.vk.store\" rel=\"noopener noreferrer nofollow\"><code>ru.vk.store<\/code><\/a><code>.lib.usagestats.UsageStatsProviderImpl<\/code> (<code>yl2\/*<\/code>).<\/p>\n<p>\u0410\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u0430\u043a\u0435\u0442\u0443 (<code>yl2\/<\/code><a href=\"http:\/\/d.java\" rel=\"noopener noreferrer nofollow\"><code>d.java<\/code><\/a>):<\/p>\n<pre><code class=\"java\">((UsageStatsManager) getSystemService(\"usagestats\")).queryUsageStats(0, from, to);\/\/ \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 UsageStats -&gt; map[packageName] = { \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u043c \u043f\u043b\u0430\u043d\u0435, \u0447\u0430\u0441\u0442\u043e\u0442\u0430, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043b\u044e\u0441 \u0441\u043e\u0431\u044b\u0442\u0438\u0439\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 (<code>yl2\/<\/code><a href=\"http:\/\/b.java\" rel=\"noopener noreferrer nofollow\"><code>b.java<\/code><\/a>, <code>queryEventStats<\/code>), \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 (<code>yl2\/<\/code><a href=\"http:\/\/a.java\" rel=\"noopener noreferrer nofollow\"><code>a.java<\/code><\/a>, <code>queryConfigurations<\/code>) \u0438 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e \u0442\u0438\u043f\u0430\u043c \u0441\u0435\u0442\u0438 (<code>yl2\/<\/code><a href=\"http:\/\/c.java\" rel=\"noopener noreferrer nofollow\"><code>c.java<\/code><\/a>):<\/p>\n<pre><code class=\"java\">\/\/ yl2\/c.javanetworkStatsManager.querySummaryForDevice(networkType, null, from, to);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f. <code>ff2\/<\/code><a href=\"http:\/\/m.java\" rel=\"noopener noreferrer nofollow\"><code>m.java<\/code><\/a> (UsageStatsCollectorDelegate) \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0437\u043e\u0432\u0451\u0442 \u0441\u0435\u043d\u0434\u0435\u0440 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438:<\/p>\n<pre><code class=\"java\">\/\/ ff2\/m.javaanalyticsSender.a(\"globalActivity.eventStats\", map);\/\/ \u043f\u043e\u043b\u044f map \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u043e:\/\/ eventType, first_time_stamp, last_time_stamp, count, total_time, last_event_time<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0435\u043d\u0434\u0435\u0440 <code>ng2.b<\/code> (\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 <code>og2\/<\/code><a href=\"http:\/\/f.java\" rel=\"noopener noreferrer nofollow\"><code>f.java<\/code><\/a>) \u0440\u0430\u0437\u0434\u0430\u0451\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438, \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0438\u0445 AltCraft (<code>tg2\/<\/code><a href=\"http:\/\/b.java\" rel=\"noopener noreferrer nofollow\"><code>b.java<\/code><\/a>). \u041a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 (<code>pg2\/<\/code><a href=\"http:\/\/e.java\" rel=\"noopener noreferrer nofollow\"><code>e.java<\/code><\/a>):<\/p>\n<pre><code class=\"java\">\/\/ pg2\/e.java\"https:\/\/api.rustore.ru\/user-event-handler\/\"\/\/ API rg2\/a.java: @o(\"v1\/uploadEvents\"), @o(\"v2\/uploadEvents\")<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u044b\u0433\u0440\u0443\u0437\u043a\u0443 \u0434\u0435\u043b\u0430\u0435\u0442 <code>AltCraftFlushEventsWorker<\/code> \u0431\u0430\u0442\u0447\u0435\u043c \u0440\u0430\u0437 \u0432 12 \u0447\u0430\u0441\u043e\u0432, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 (\u0442\u043e\u0433\u0433\u043b <code>altcraftAnalytics = true<\/code>, <code>ru\/vk\/store\/lib\/featuretoggle\/<\/code><a href=\"http:\/\/a.java\" rel=\"noopener noreferrer nofollow\"><code>a.java<\/code><\/a>). \u041a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0448\u0442\u0430\u043c\u043f\u0443\u0435\u0442\u0441\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 <code>ng2\/<\/code><a href=\"http:\/\/c.java\" rel=\"noopener noreferrer nofollow\"><code>c.java<\/code><\/a> (<code>AltCraftEventDto<\/code>): <code>sessionId, userId, vkId, deviceId (fingerprint)<\/code>. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 <code>v2\/uploadEvents<\/code> \u044d\u0442\u043e <code>UploadEventsDtoSigned<\/code>, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0438\u0437 <a href=\"http:\/\/libbridge.so\" rel=\"noopener noreferrer nofollow\"><code>libbridge.so<\/code><\/a> (\u043c\u043e\u0434\u0443\u043b\u044c <code>user-events-secret-storage<\/code>), \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d \u0438 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432 \u043a \u043f\u043e\u0434\u0434\u0435\u043b\u043a\u0435.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0431\u043e\u0440 \u0441\u0443\u0442\u043e\u0447\u043d\u044b\u0439 <code>UsageStatsCollectorWorker<\/code> (<a href=\"http:\/\/ru.vk.store\" rel=\"noopener noreferrer nofollow\"><code>ru.vk.store<\/code><\/a><code>.feature.usagestats.impl.presentation<\/code>, CoroutineWorker). \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0433\u0435\u0439\u0442\u0438\u0442\u0441\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c\u0438 \u0442\u043e\u0433\u0433\u043b\u0430\u043c\u0438 (<code>FlipperRepository<\/code>, <code>ef2\/<\/code><a href=\"http:\/\/b.java\" rel=\"noopener noreferrer nofollow\"><code>b.java<\/code><\/a>) \u0438 \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438. \u0415\u0441\u0442\u044c \u0438 \u044d\u043a\u0440\u0430\u043d \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 <code>UsageStatsDialogDestination<\/code>; \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0435\u0439 \u044d\u0442\u043e Game Center (<code>...gamecenter.stats.impl<\/code>).<\/p>\n<p><code>PACKAGE_USAGE_STATS<\/code> \u044d\u0442\u043e special-access, <code>queryUsageStats<\/code> \u0432\u0435\u0440\u043d\u0451\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u00ab\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438\u00bb;<\/p>\n<p>\u0412\u0445\u043e\u0434 \u0432 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0434\u043b\u044f \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d. \u0412 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u0435 AltCraft (<code>tg2\/<\/code><a href=\"http:\/\/b.java\" rel=\"noopener noreferrer nofollow\"><code>b.java<\/code><\/a>) \u043c\u0435\u0442\u043e\u0434 <code>a(String userId)<\/code> \u043f\u0443\u0441\u0442\u043e\u0439, \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0433\u0435\u0439\u0442\u0438\u0442\u0441\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0442\u043e\u0433\u0433\u043b\u043e\u043c \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438, \u0441\u0435\u0441\u0441\u0438\u044f \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u0421\u043e\u0431\u044b\u0442\u0438\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435\u0441\u0451\u0442 <code>deviceId<\/code>; <code>userId\/vkId<\/code> \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c\u0438, \u043f\u043e\u043a\u0430 \u0432\u044b \u043d\u0435 \u0432\u043e\u0448\u043b\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u043c \u0442\u043e\u0433\u0433\u043b\u0435 \u0438 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u044b \u0443\u0445\u043e\u0434\u044f\u0442 \u043d\u0430 <a href=\"http:\/\/api.rustore.ru\" rel=\"noopener noreferrer nofollow\"><code>api.rustore.ru<\/code><\/a> \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u043c\u0443 <code>deviceId<\/code> \u0434\u0430\u0436\u0435 \u0443 \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p><strong>\u0421\u043f\u0440\u0430\u0432\u043a\u0430:<\/strong> \u0414\u0430\u043d\u043d\u044b\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0438 \u043a\u0430\u043a \u0434\u043e\u043b\u0433\u043e \u0432\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\u0441\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 (Usage Stats) &#8212; \u044d\u0442\u043e \u0441\u0432\u0435\u0440\u0445\u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f. \u0422\u0430\u0439\u043c\u0438\u043d\u0433\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0430\u0448\u0438\u0445 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u043e\u0432, VPN \u0438 \u0431\u0430\u043d\u043a\u043e\u0432 \u0441\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0438 \u043d\u0430\u043c\u0435\u0440\u0442\u0432\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a \u043d\u0435\u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u043c\u0443 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u043c\u0443 ID \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0441\u043a\u0430\u0437\u0430\u0442\u044c: \u00ab\u041d\u0443 \u044d\u0442\u043e \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043b\u044f \u0431\u0435\u0437\u043e\u0431\u0438\u0434\u043d\u043e\u0439 \u0444\u0438\u0447\u0438 \u043c\u0435\u043d\u044e &#8216;\u0412\u0440\u0435\u043c\u044f \u0432 \u0438\u0433\u0440\u0430\u0445&#8217;!\u00bb. \u0422\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0442 RuStore \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442 \u044d\u043a\u0440\u0430\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435\u0445 \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0433\u0440, \u0438 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0430 \u0441\u0432\u043e\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435. \u0422\u043e\u0433\u0434\u0430 \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0432\u043e\u0437\u0440\u0430\u0437\u0438\u0442\u044c: \u00ab\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0438\u043c\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438?\u00bb. \u0418 \u0441\u043d\u043e\u0432\u0430 \u043c\u0438\u043c\u043e: \u044d\u0442\u043e\u0442 \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u0439 \u0441\u0431\u043e\u0440 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u043f\u043e\u043b\u043d\u0443\u044e \u043a\u0430\u0442\u0443\u0448\u043a\u0443, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0432\u043e\u0448\u043b\u0438 \u0432 \u0430\u043a\u043a\u0430\u0443\u043d\u0442. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0442\u0443\u0442 \u0438 \u043d\u0435 \u043f\u0430\u0445\u043d\u0435\u0442. \u041c\u044b \u0438\u043c\u0435\u0435\u043c \u043d\u0430\u0433\u043b\u0443\u044e, \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u0443\u044e \u0441\u043b\u0435\u0436\u043a\u0443 \u0437\u0430 \u0432\u0430\u0448\u0435\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<h3>RuStore \u0440\u0430\u0437\u0434\u0430\u0451\u0442 VK-\u0442\u043e\u043a\u0435\u043d\u044b \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0447\u0435\u0440\u0435\u0437 AIDL<\/h3>\n<p><code>ud0\/<\/code><a href=\"http:\/\/b.java\" rel=\"noopener noreferrer nofollow\"><code>b.java<\/code><\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 AIDL-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>com.vk.silentauth.ISilentAuthInfoProvider<\/code>:<\/p>\n<pre><code class=\"java\">List&lt;PackageInfo&gt; installed = pm.getInstalledPackages(64);   \/\/ GET_SIGNATURES\/\/ \u0430\u043d\u0442\u0438-\u0441\u043f\u0443\u0444\u0438\u043d\u0433: UID \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043b\u0430\u0434\u0435\u0442\u044c \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u043c,\/\/ \u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0445\u044d\u0448 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0441\u043e\u0432\u043f\u0430\u0441\u0442\u044c \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e \u043f\u0430\u043a\u0435\u0442\u0430:\/\/   \"Invalid apk hash. Don't try to trick me ;)\"\/\/   \"We can't recognize you\"e(\"auth.getCredentialsForServiceMulti\", ...);long id = Binder.clearCallingIdentity();try { return F(...); } finally { Binder.restoreCallingIdentity(id); }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0435\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u043e\u0434\u043f\u0438\u0441\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 VK Silent Auth \u0442\u043e\u043a\u0435\u043d \u0431\u0435\u0437 \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e (<code>Binder.clearCallingIdentity<\/code>). \u041d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043d\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u044b\u0445 VK-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043b\u0438\u0448\u044c \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u0447\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0435\u0431\u044f \u0432\u044b\u0434\u0430\u0451\u0442. \u041a\u043e\u043c\u0443 \u0432\u044b\u0434\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d, \u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 VK (<code>getCredentialsForServiceMulti<\/code>). \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 RuStore \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/p>\n<p><strong>\u0421\u043f\u0440\u0430\u0432\u043a\u0430:<\/strong> \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c Silent Auth \u0432 RuStore \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0442\u0430\u043a, \u0447\u0442\u043e \u0432\u0430\u0448\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0435 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0431\u0440\u043e\u0448\u0435\u043d\u043e \u0437\u0430 \u043d\u0435\u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e. \u0414\u0438\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e \u00ab\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443\u00bb ? \u041d\u0435\u0430, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u0432 RuStore, \u0438 \u043b\u044e\u0431\u043e\u0435 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u0430\u0448\u0435\u043c \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0432\u0430\u0448 VK ID. \u041a\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442, \u043a\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0434\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435? \u041d\u0435 \u0432\u044b. \u042d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 VK, \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043d\u043e\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0439 \u0441\u043e\u0444\u0442 \u0432 \u0441\u0432\u043e\u0439 \u00ab\u0431\u0435\u043b\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a\u00bb. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442 \u0432\u0430\u0448\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0432\u0430\u0448\u0438\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u043c. \u041f\u043e \u0441\u0443\u0442\u0438, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043c\u0430\u0433\u0430\u0437\u0438\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0432\u0442\u0438\u0445\u0430\u0440\u044f \u0440\u0430\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438 \u043e\u0442 \u0432\u0430\u0448\u0435\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u043d\u0443\u0436\u043d\u044b\u043c \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0430\u043c. \u0410\u0431\u0441\u0443\u0440\u0434\u043d\u043e, \u0447\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u043a\u0440\u044b\u0442\u0430\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u044f \u0447\u0443\u0436\u0438\u043c\u0438 \u0441\u0435\u0441\u0441\u0438\u044f\u043c\u0438 \u0431\u0435\u0437 \u0432\u0435\u0434\u043e\u043c\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f &#8212; \u044d\u0442\u043e \u0434\u0438\u043a\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u043b\u043d\u043e\u0435 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h3>\u0423\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435 \u0442\u043e\u0433\u0433\u043b\u044b: 73 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f<\/h3>\n<p>MAX-\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 VKC_BACKUP_SENDING \u0432\u0445\u043e\u0434\u044f\u0442 \u0432 \u043e\u0431\u0449\u0438\u0439 \u0440\u0435\u0435\u0441\u0442\u0440 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u0444\u043b\u0430\u0433\u043e\u0432 VK ID SDK. \u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432 <code>yn0\/<\/code><a href=\"http:\/\/b.java\" rel=\"noopener noreferrer nofollow\"><code>b.java<\/code><\/a> (enum <code>EnumC2199b<\/code>, 73 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f). \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u043e\u0433\u0433\u043b\u0430 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u043a\u043b\u044e\u0447 \u0438 \u043c\u0435\u0442\u043e\u0434 <code>getKey()<\/code>, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u043e\u0442\u0434\u0430\u0451\u0442 <code>getSupportedFeatures()<\/code>, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u044f\u043d\u0443\u0442\u0441\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>\u0421\u0430\u043c\u044b\u0435 \u043f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438:<\/p>\n<pre><code class=\"java\">sak_max_messenger_install \/\/ \u0441\u043a\u0440\u044b\u0442\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 MAXvkc_backup_sending \/\/ \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u0441\u0435\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430sak_messenger_skip_sms_android \/\/ \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u0445\u043e\u0434 SMS-\u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438sak_pass_autocompete_android \/\/ \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u043b\u043e\u0433\u0438\u043d\u043e\u0432 \u0438 \u043f\u0430\u0440\u043e\u043b\u0435\u0439 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443vkc_hitman_captcha_android \/\/ \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0430\u043f\u0447\u0438 \u043d\u0430 \u0430\u043b\u044c\u0442. \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440sak_vk_ru_v2_android \/\/ \u0441\u043a\u0440\u044b\u0442\u043e\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0434\u043e\u043c\u0435\u043d\u0430 API \u0431\u044d\u043a\u0435\u043d\u0434\u0430<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u043e\u043a\u0440\u0443\u0433 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e MAX \u0442\u0440\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u0444\u043b\u0430\u0433\u0430, \u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0444\u043b\u0430\u0433\u043e\u0432 \u0435\u0441\u0442\u044c <a href=\"https:\/\/gist.githubusercontent.com\/neuronori\/1b788422845a030fe56296240043eb43\/raw\/e2977387335e8445ca7f4b8ca50b5db98154b46e\/vk-sdk-flags.md\" rel=\"noopener noreferrer nofollow\">\u0432 \u044d\u0442\u043e\u043c \u0433\u0438\u0441\u0442<\/a><\/p>\n<p><strong>\u0421\u043f\u0440\u0430\u0432\u043a\u0430:<\/strong> \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438, \u0434\u0430\u0436\u0435 \u043f\u043e \u0441\u0443\u0440\u043e\u0432\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c Google Play \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0444\u043b\u0430\u0433\u043e\u0432 &#8212; \u044d\u0442\u043e \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435. \u041d\u0430 \u044d\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438, \u0442\u043e\u0442 \u0436\u0435 Firebase. \u042d\u0442\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043f\u043b\u0430\u0432\u043d\u044b\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u0438 A\/B \u0442\u0435\u0441\u0442\u043e\u0432. \u041d\u043e \u0434\u044c\u044f\u0432\u043e\u043b, \u043a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u0432 \u043d\u0430\u0433\u043b\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041e\u0434\u043d\u043e \u0434\u0435\u043b\u043e &#8212; \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0435 &#8212; \u0437\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0440\u0443\u0431\u0438\u043b\u044c\u043d\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u043a\u0430\u0447\u0430\u0442\u044c \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0447\u0443\u0436\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (<code>vkc_backup_sending<\/code>), \u043c\u043e\u043b\u0447\u0430 \u043e\u0431\u043e\u0439\u0442\u0438 SMS-\u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e (<code>sak_messenger_skip_sms_android<\/code>) \u0438\u043b\u0438 \u043f\u0440\u043e\u043a\u0438\u043d\u0443\u0442\u044c \u043b\u043e\u0433\u0438\u043d\u044b \u0441 \u043f\u0430\u0440\u043e\u043b\u044f\u043c\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 (<code>sak_pass_autocompete_android<\/code>).<\/p>\n<h2>Kaspersky kavsdk<\/h2>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 RuStore \u0436\u0438\u0432\u0451\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 Kaspersky SDK: \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a, KSN-\u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044f, P2P-\u0441\u0435\u0442\u044c \u0440\u0435\u043f\u0443\u0442\u0430\u0446\u0438\u0438, \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0421\u0430\u043c kavsdk \u043a\u0430\u043a \u0438 \u0441\u0430\u043c Kaspersky \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h3>19 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0438 KSN, \u0432\u043a\u043b\u044e\u0447\u0430\u044f P2P<\/h3>\n<p><code>com\/kavsdk\/internal\/cloudrequests\/<\/code><a href=\"http:\/\/CloudStatisticType.java\" rel=\"noopener noreferrer nofollow\"><code>CloudStatisticType.java<\/code><\/a> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0440\u043e\u0432\u043d\u043e 19 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439:<\/p>\n<pre><code class=\"java\">APCLOUD, FIRMWARE, OAS, P2P, RAW, WAV, WIFI, WLIP, WLIPS, OVERLAP,WHOCALLS, KSNQ_2, FEATURE_USAGE, LIN, CALL_REPORT, CALL_FILTER,ODS, ERROR_STATISTICS, HTTP_TRANSPORT_QUALITY<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>P2P<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u043f\u0443\u0442\u0430\u0446\u0438\u0438 \u0438\u0437 KSN, \u043d\u043e \u0438 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u0441\u0435\u0442\u044c. \u041b\u043e\u0433\u0438\u043a\u0430 \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u043c <code>sendAll()<\/code>:<\/p>\n<p>\u042d\u0442\u043e \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0442\u0440\u0430\u0444\u0438\u043a\u0430: \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u0434\u0442\u0438 \u043c\u0438\u043c\u043e \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>\u0412 <code>KsnStatisticType<\/code> \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u0435\u0442\u0441\u043a\u043e\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"java\">CHILD_ACTIVITY_SEARCH_REQUEST,CHILD_ACTIVITY_WEB_BROWSER_REQUEST,CHILD_ACTIVITY_APPLICATION_USAGE<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>MD5 + SHA256 \u043a\u0430\u0436\u0434\u043e\u0433\u043e APK \u0441 installerPackageName<\/h3>\n<p><a href=\"http:\/\/Wlip.java\" rel=\"noopener noreferrer nofollow\"><code>Wlip.java<\/code><\/a> \u044d\u0442\u043e \u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e APK:<\/p>\n<pre><code class=\"java\">private static native boolean send(    String apkFileName, String parentPath, String packageName,    String installerPackageName,        \/\/ \u043e\u0442\u043a\u0443\u0434\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e    String packageStringForStatistics, int versionCode,    byte[] hash1, byte[] hash2, long nativePtr,    int wlipVerdict, int wlipTrustScenario,    boolean isSafetyNetEnabled, int googleSafetyNetCategory,    byte[] apkSha256);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>installerPackageName<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e KSN \u0437\u043d\u0430\u0435\u0442, \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u043e\u0439 \u043c\u0430\u0433\u0430\u0437\u0438\u043d \u0438\u043b\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p><a href=\"http:\/\/Wlips.java\" rel=\"noopener noreferrer nofollow\"><code>Wlips.java<\/code><\/a> (\u043f\u0430\u043a\u0435\u0442\u043d\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0432\u0441\u0435\u0445 APK) \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0443 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 GC:<\/p>\n<pre><code class=\"java\">public final void finalize() {    if (this.f47 != 0) {        release(this.f47);        throw new IllegalStateException(\"Statistics has not been sent\");    }    super.finalize();}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 APK <code>WlipsAppInfo<\/code> \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442:<\/p>\n<pre><code class=\"java\">public class WlipsAppInfo implements Externalizable {    private final byte[] mApkMd5;    private final byte[] mDexMd5;    private long mApkPermissions;                  \/\/ permissions \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043c\u0430\u0441\u043a\u043e\u0439    private boolean mAppDefaultSmsManager;    private boolean mAppDeviceAdmin;    private boolean mAppUsesAccessibilityServices;    private String mBundleName;    private int mFlags;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>Build.FINGERPRINT + \u0444\u0430\u043a\u0442 \u0440\u0443\u0442\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p><code>kavsdk\/o\/<\/code><a href=\"http:\/\/io.java\" rel=\"noopener noreferrer nofollow\"><code>io.java<\/code><\/a> \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 <code>FirmwareStatistic<\/code>: <code>mIsRooted<\/code> \u0438 <code>mFingerprint = Build.FINGERPRINT<\/code>, \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e\u0434 \u0444\u043b\u0430\u0433\u043e\u043c <code>CloudStatisticType.FIRMWARE<\/code>.<\/p>\n<h3>inotify \u043f\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u043c<\/h3>\n<p><code>MultiObserverThread<\/code> (\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 inotify: <code>init\/observe\/startWatching<\/code>) \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u0442 \u0437\u0430 <code>DIRECTORY_PICTURES\/MOVIES\/DOWNLOADS\/DCIM<\/code>. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0433\u0435\u0439\u0442\u0438\u0442\u0441\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c\u0438 \u0444\u043b\u0430\u0433\u0430\u043c\u0438.<\/p>\n<h3>\u041d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043e\u0431\u0445\u043e\u0434 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438 Android 9+<\/h3>\n<p><code>SdkUtils<\/code>:<\/p>\n<pre><code class=\"java\">public static native Method getDeclaredMethod(Class cls, String str, Class&lt;?&gt;... clsArr);public static native boolean setenv(String name, String value);public static native int killParasiteProcesses();<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421 Android 9 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u043a\u0440\u044b\u0442\u044b\u043c <code>@hide<\/code>-API \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d (greylist\/blacklist). \u041d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>getDeclaredMethod<\/code> \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u044d\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0447\u0435\u0440\u0435\u0437 JNI, \u043c\u0438\u043d\u0443\u044f Java-\u0441\u043b\u043e\u0439. <code>setenv<\/code> \u043f\u0440\u0430\u0432\u0438\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0430 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435, <code>killParasiteProcesses<\/code> \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b. \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f Google Play Developer Program Policy \u043e\u0431\u0445\u043e\u0434 hidden-API \u0437\u0430\u043f\u0440\u0435\u0449\u0451\u043d.<\/p>\n<h3>\u041a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u043e 31 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438<\/h3>\n<pre><code class=\"java\">public enum KlAppCategory {    BusinessSoftware, EducationalSoftware,    Entertainment_SocialNetworks, Entertainment_OnlineShopping,    Information_Medical, Information_MappingApplications,    RemoteAccessTool, SecuritySoftware, Browsers, \/* ... 31 \u0432\u0441\u0435\u0433\u043e *\/}public class KlApplicationInfo {    public final String mAgeCategory;    public final KlAppCategory mKLCategory;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u043d\u043e\u043c\u0443 \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0443, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 KSN. <code>Information_Medical<\/code> \u0438\u043b\u0438 <code>RemoteAccessTool<\/code> \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0435 \u0434\u0430\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b.<\/p>\n<p><strong>\u0421\u043f\u0440\u0430\u0432\u043a\u0430:<\/strong> \u0411\u0443\u0434\u0435\u043c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b, \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u0431\u0430\u0439\u043d\u0430, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0435 Android-, \u0430 Windows-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u0435\u0442\u0435\u043d\u0437\u0438\u044f \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u041a\u0430\u0441\u043f\u0435\u0440\u0441\u043a\u043e\u043c\u0443, \u0430 \u043a \u0443\u0440\u043e\u0432\u043d\u044e \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0438\u0438 RuStore. \u0418\u043c\u0435\u044f \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u0435 \u0431\u044e\u0434\u0436\u0435\u0442\u044b \u043d\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430, \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0438 \u043d\u0435 \u0441\u0442\u0430\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043b\u0438 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0439 \u0441\u043a\u0430\u043d\u0435\u0440 (\u043d\u0430 \u043c\u0430\u043d\u0435\u0440 Google Play Protect), \u0430 \u0442\u0443\u043f\u043e \u0432\u0448\u0438\u043b\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043d\u044b\u0439 SDK \u00ab\u043a\u0430\u043a \u0435\u0441\u0442\u044c\u00bb, \u0441\u043e \u0432\u0441\u0435\u043c \u0435\u0433\u043e \u043b\u0435\u0433\u0430\u0441\u0438-\u0431\u0430\u0433\u0430\u0436\u043e\u043c. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u0424\u0440\u0430\u043d\u043a\u0435\u043d\u0448\u0442\u0435\u0439\u043d, \u043d\u0430\u0440\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u0432\u0441\u0435 \u043c\u044b\u0441\u043b\u0438\u043c\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430:<\/p>\n<ul>\n<li>\n<p><strong>\u041e\u0431\u0445\u043e\u0434 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 (Malicious Behavior):<\/strong> \u0412\u043c\u0435\u0441\u0442\u043e \u0446\u0438\u0432\u0438\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0438 \u043f\u043e\u0434 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0438 Android, \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u043b\u043e\u043c\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043b\u0435\u043d\u043e. \u041d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>getDeclaredMethod<\/code> \u0447\u0435\u0440\u0435\u0437 JNI \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043d\u044b\u043c \u0441\u043a\u0440\u044b\u0442\u044b\u043c API (greylist) \u0438 \u0436\u0435\u0441\u0442\u043a\u043e\u0435 \u0443\u0431\u0438\u0439\u0441\u0442\u0432\u043e \u0447\u0443\u0436\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 (<code>killParasiteProcesses<\/code>) &#8212; \u044d\u0442\u043e \u0430\u0440\u0445\u0430\u0438\u0447\u043d\u044b\u0435 \u0438 \u0433\u0440\u044f\u0437\u043d\u044b\u0435 \u0445\u0430\u043a\u0438. <\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u043b\u0435\u0436\u043a\u0430 \u0437\u0430 \u0433\u0430\u043b\u0435\u0440\u0435\u0435\u0439 (Scoped Storage Policy):<\/strong> \u0421\u0430\u043c\u044b\u0439 \u0430\u0431\u0441\u0443\u0440\u0434\u043d\u044b\u0439 \u043f\u0443\u043d\u043a\u0442. \u0418\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e SDK \u0432\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043d\u0435 \u0433\u043b\u044f\u0434\u044f, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 <code>inotify<\/code> \u0432\u0435\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0439 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0441 \u0432\u0430\u0448\u0438\u043c\u0438 \u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f\u043c\u0438 (<code>DCIM<\/code>, <code>Pictures<\/code>). \u0417\u0430\u0447\u0435\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u043e\u0432\u044b\u0445 \u0444\u043e\u0442\u043e \u0432 \u0433\u0430\u043b\u0435\u0440\u0435\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f? <\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (User Data \/ Sensitive Information):<\/strong> \u0421\u0431\u043e\u0440 \u0445\u044d\u0448\u0435\u0439 (MD5\/SHA256) \u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 (<code>installerPackageName<\/code>) \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u0442\u044c \u043d\u0443\u0436\u0434\u0430\u043c\u0438 \u0441\u0435\u0442\u0438 \u0440\u0435\u043f\u0443\u0442\u0430\u0446\u0438\u0438 KSN. \u041d\u043e \u043d\u0435\u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0442\u044f\u043d\u0435\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0442\u043e\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043b\u0435\u0436\u043a\u0438, \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0432\u0441\u0435 \u0432\u0430\u0448\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e 31 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 <code>Information_Medical<\/code> \u0438\u043b\u0438 <code>RemoteAccessTool<\/code>). \u0421\u0435\u043a\u044c\u044e\u0440\u0438\u0442\u0438-\u0442\u0443\u043b\u0437\u0430 \u043f\u043e \u0438\u043d\u0435\u0440\u0446\u0438\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. <\/p>\n<\/li>\n<li>\n<p><strong>P2P-\u0441\u0435\u0442\u044c \u0438 \u0442\u0435\u043d\u0435\u0432\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a:<\/strong> \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 P2P-\u043c\u043e\u0434\u0443\u043b\u0435\u0439 &#8212; \u0434\u0440\u0435\u0432\u043d\u044f\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043e\u0432 \u0434\u043b\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445 \u0438\u043b\u0438 \u043e\u0431\u0445\u043e\u0434\u0430 \u0430\u043d\u0442\u0438-\u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043e\u0432. \u0422\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0442 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u043d\u0437\u0438\u0442\u043d\u044b\u0439 P2P-\u0443\u0437\u0435\u043b \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043c\u0430\u0433\u0430\u0437\u0438\u043d \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 2026 \u0433\u043e\u0434\u0443 &#8212; \u044d\u0442\u043e \u0432\u0435\u0440\u0445 \u043d\u0435\u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u0438\u0437\u043c\u0430. <\/p>\n<\/li>\n<\/ul>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0432\u043e\u043f\u0440\u043e\u0441: \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441 \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0441\u0430\u043c \u0441\u0435\u0431\u044f? \u0425\u043e\u0442\u044f \u044d\u0442\u043e \u0436\u0435 \u043a\u0430\u043bspersky, \u0447\u0442\u043e \u0441 \u043d\u0438\u0445 \u0432\u0437\u044f\u0442\u044c, \u0443 \u043d\u0438\u0445 \u0436\u0435 \u043b\u0430\u043f\u043a\u0438.<\/p>\n<h2>\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/h2>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e ANDROID_ID, \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 RuStore \u0435\u0441\u0442\u044c \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u0435\u0442 \u043d\u0435\u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b.<\/p>\n<p>Kaspersky dualsim (<code>com\/kaspersky\/components\/dualsim\/<\/code><a href=\"http:\/\/SimAccessorImpl.java\" rel=\"noopener noreferrer nofollow\"><code>SimAccessorImpl.java<\/code><\/a>), \u043a\u043b\u0430\u0441\u0441 \u043f\u043e\u043c\u0435\u0447\u0435\u043d <code>@SuppressLint({\"HardwareIds\"})<\/code>:<\/p>\n<pre><code class=\"java\">m302.getSubscriberId();                  \/\/ IMSIm29.getIccId();                          \/\/ \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 SIMSimUtils.getImei(i14) \/ getDeviceId();   \/\/ IMEI<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><a href=\"http:\/\/SimUtils.java\" rel=\"noopener noreferrer nofollow\"><code>SimUtils.java<\/code><\/a> \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043b\u0435\u0437\u0435\u0442 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0435\u0439 \u0432 \u0441\u043a\u0440\u044b\u0442\u044b\u0435 dual-SIM \u043c\u0435\u0442\u043e\u0434\u044b (<code>getDeviceIdGemini<\/code>, <code>getSubscriberIdGemini<\/code> \u0438 \u0442.\u0434.) \u0438 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 <a href=\"http:\/\/com.android\" rel=\"noopener noreferrer nofollow\"><code>com.android<\/code><\/a><code>.internal.telephony.RILConstants$SimCardID<\/code>.<\/p>\n<p><a href=\"http:\/\/Mail.ru\" rel=\"noopener noreferrer nofollow\">Mail.ru<\/a> libverify (<code>ru\/mail\/libverify\/a0\/<\/code><a href=\"http:\/\/c.java\" rel=\"noopener noreferrer nofollow\"><code>c.java<\/code><\/a>):<\/p>\n<pre><code class=\"java\">a(tm, \"getSimSerialNumber\", b());   \/\/ \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 SIMa(tm, \"getDeviceId\",        b());   \/\/ IMEIa(tm, \"getSubscriberId\",    b());   \/\/ IMSI<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u043d \u0436\u0435 \u0447\u0438\u0442\u0430\u0435\u0442 GSF-\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 Google (<code>ru\/mail\/libverify\/platform\/firebase\/b\/<\/code><a href=\"http:\/\/a.java\" rel=\"noopener noreferrer nofollow\"><code>a.java<\/code><\/a>):<\/p>\n<pre><code class=\"java\">getContentResolver().query(    Uri.parse(\"content:\/\/com.google.android.gsf.gservices\"),    null, null, new String[]{\"android_id\"}, null);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p> \u0412\u044b\u0437\u043e\u0432\u044b \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044b \u0432 <code>catch (SecurityException)<\/code>, \u0438 \u043d\u0430 Android 10+ \u0434\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043d\u0443\u0442 null. \u041d\u043e \u043a\u043e\u0434 \u0442\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<p><strong>\u0421\u043f\u0440\u0430\u0432\u043a\u0430:<\/strong> \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Android 10, \u0441\u0430\u043c\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0436\u0435\u0441\u0442\u043a\u043e \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u043c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c (IMEI, IMSI, ICCID). \u041b\u043e\u0433\u0438\u043a\u0430 \u0437\u0430\u0449\u0438\u0442\u044b \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u0430: \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0432\u0430\u043c\u0438 \u043f\u043e \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u0430\u043c \u00ab\u0436\u0435\u043b\u0435\u0437\u0430\u00bb, \u0434\u0430\u0436\u0435 Google \u044d\u0442\u0438\u0447\u043d\u0435\u0435 VK. \u041d\u043e RuStore \u043f\u043b\u0435\u0432\u0430\u0442\u044c \u0445\u043e\u0442\u0435\u043b \u043d\u0430 \u044d\u0442\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u041e\u0421. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0432\u043e\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 \u0438 \u0433\u0440\u044f\u0437\u043d\u0443\u044e \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044e \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043e\u043d\u0438 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u0445\u043e\u0434\u044f\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 Android \u0438 \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u044e\u0442 \u044d\u0442\u0438 \u043d\u043e\u043c\u0435\u0440\u0430 \u0438\u0437 \u043c\u043e\u0434\u0435\u043c\u0430. \u0410 \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u043b\u043e \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0441\u0442\u043e\u0440 \u0437\u0430\u043e\u0434\u043d\u043e \u0442\u0430\u0449\u0438\u0442 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u0430\u0448 Google GSF ID. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 \u0441\u043b\u0435\u043f\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0437 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432, \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0438\u043c\u043a\u0438 \u0438 \u0434\u0430\u0436\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u0431\u0440\u043e\u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (Factory Reset) &#8212; \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442. \u0412\u0430\u0448\u0430 \u0436\u0435\u043b\u0435\u0437\u043a\u0430 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430, \u0438 \u043e\u0442\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0432\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435.<\/p>\n<h3>libsecrets.so: \u0421\u0435\u043a\u0440\u0435\u0442\u044b \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0441\u0442\u043e\u043b\u0435 \u0414\u0435\u043d\u0438\u0441\u0430<\/h3>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 RuStore (\u0430 \u0442\u043e\u0447\u043d\u0435\u0435, \u043c\u043e\u0434\u0443\u043b\u044f VK Push SDK, \u0430 \u0435\u0449\u0435 \u0442\u043e\u0447\u043d\u0435\u0435 \u0414\u0435\u043d\u0438\u0441.<\/p>\n<pre><code class=\"bash\">\/Users\/d.pismennyy\/Desktop\/rustore-push-sdk-secrets\/app\/src\/main\/cpp\/prod\/secretsprod.cpp # \u043f\u0440\u0438\u0435\u0442 \u043d\u0435\u043a\u0438\u0439 \u0414\u0435\u043d\u0438\u0441<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0440\u0435\u0448\u0438\u043b\u0438 \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0443\u0448-\u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439, \u0441\u043f\u0440\u044f\u0442\u0430\u0432 \u0438\u0445 \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e C++ \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"http:\/\/libsecrets.so\" rel=\"noopener noreferrer nofollow\"><code>libsecrets.so<\/code><\/a>. JNI-\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043c\u043d\u043e\u0433\u043e\u043e\u0431\u0435\u0449\u0430\u044e\u0449\u0435:<\/p>\n<pre><code>Java_com_vk_push_authsdk_Secrets_getvkv2Java_com_vk_push_authsdk_Secrets_getrustorev2Java_com_vk_push_authsdk_Secrets_getdefaulv2Java_com_vk_push_authsdk_Secrets_getokv2Java_com_vk_push_authsdk_Secrets_getzenv2Java_com_vk_push_authsdk_Secrets_getmailv2<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0435\u043a\u0440\u0435\u0442\u044b \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u0437\u0430\u0448\u0438\u0442\u044b \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a. \u041e\u0434\u043d\u0430\u043a\u043e \u00ab\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u00bb \u043b\u0438\u0448\u044c \u0441\u043b\u0435\u0433\u043a\u0430 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043d\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u0435\u0442 \u043e\u0442 \u0440\u0435\u0432\u0435\u0440\u0441\u0430.<\/p>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437 <a href=\"http:\/\/Secrets.java\" rel=\"noopener noreferrer nofollow\"><code>Secrets.java<\/code><\/a> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430: <code>com.vk.push.authsdk<\/code>. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430, \u0434\u043e \u0441\u043c\u0435\u0448\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442: <code>secret = customDecode( obf[i] XOR sha256_hex(\"com.vk.push.authsdk\")[i] )<\/code>.<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043a\u043b\u044e\u0447 \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0438 &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e SHA256-\u0445\u044d\u0448 \u043e\u0442 \u0445\u0430\u0440\u0434\u043a\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043c\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439 \u0438\u0445 \u00ab\u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439\u00bb \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>customDecode<\/code>, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c 50 \u0441\u0442\u0440\u043e\u043a \u043d\u0430 C: \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u0442\u044c <a href=\"http:\/\/libsecrets.so\" rel=\"noopener noreferrer nofollow\"><code>libsecrets.so<\/code><\/a> \u0447\u0435\u0440\u0435\u0437 <code>dlopen<\/code>, \u043f\u043e\u0434\u0441\u0443\u043d\u0443\u0442\u044c \u0444\u0435\u0439\u043a\u043e\u0432\u0443\u044e JNI-\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0439 \u0441\u0435\u0431\u044f. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0441\u043b\u0443\u0448\u043d\u043e \u0432\u044b\u0434\u0430\u0435\u0442 \u0432\u0441\u0451 \u00ab\u043d\u0430 \u0431\u043b\u044e\u0434\u0435\u0447\u043a\u0435\u00bb.<\/p>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u0442\u0434\u0430\u0435\u0442 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 (\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u044b \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0437\u0430\u043c\u0430\u0437\u0430\u043b \u0437\u0432\u0435\u0437\u0434\u043e\u0447\u043a\u0430\u043c\u0438, \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043f\u043e\u0447\u0435\u043c\u0443):<\/p>\n<ul>\n<li>\n<p><strong>vk<\/strong> : <code>qUuUUvx2vUsSu43nUAV********<\/code> <\/p>\n<\/li>\n<li>\n<p><strong>rustore<\/strong> : <code>sxxuX4A4Xwtq34XwwpZ********<\/code> <\/p>\n<\/li>\n<li>\n<p><strong>mail<\/strong> : <code>yzU4YZUTvWSYxqvxrzr********<\/code> <\/p>\n<\/li>\n<li>\n<p><strong>ok<\/strong> : <code>u2k4n4xV1pvzzzWVyU4********<\/code> <\/p>\n<\/li>\n<li>\n<p><strong>zen<\/strong> : <code>zqy44W02tnu23vwUU3Y********<\/code> <\/p>\n<\/li>\n<li>\n<p><strong>default<\/strong> : <code>WVynx04tWyqZUzsxnVT********<\/code> <\/p>\n<\/li>\n<\/ul>\n<p><em>(\u042f \u0442\u0430\u043a \u0438 \u043d\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0432\u0430\u043b\u0438\u0434\u043d\u044b \u043b\u0438 \u044d\u0442\u0438 \u043a\u043b\u044e\u0447\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438 \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c. \u041d\u043e \u043a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a Push Auth SDK \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a HMAC-\u043a\u043b\u044e\u0447\u0438 \u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0438 bootstrap-JWT. \u0421\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 package name \u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041f\u0440\u044f\u0442\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043a\u043b\u044e\u0447\u0438 \u0432 C++ \u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u0443\u0441\u0435\u0440\u0434\u0438\u0435\u043c \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0437\u0430\u0431\u0430\u0432\u043d\u043e: \u0432\u0441\u0451, \u0447\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0443, \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u044c. )<\/em><\/p>\n<h3>\u0418\u0442\u043e\u0433\u043e<\/h3>\n<p>RuStore \u044d\u0442\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d \u0441 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0439 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0435\u0439 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b VK \u0438 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0442\u044f\u0436\u0451\u043b\u044b\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 SDK. \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0441\u0431\u043e\u0440 \u0441\u043f\u0438\u0441\u043a\u0430 \u043b\u0430\u0443\u043d\u0447\u0430\u0431\u043b-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a <code>ANDROID_ID<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 <code>Radar<\/code>: \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0431\u0430\u0437\u0430 <code>snapshot_records<\/code> \u0441 <code>userId<\/code>, \u0442\u0440\u0435\u043c\u044f \u0433\u0435\u043e\u0444\u0438\u043a\u0441\u0430\u043c\u0438, MAC \u0440\u043e\u0443\u0442\u0435\u0440\u0430, \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0441\u043e\u0442\u043e\u0432\u044b\u0445 \u0432\u044b\u0448\u0435\u043a, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c SIM, \u0440\u043e\u0443\u043c\u0438\u043d\u0433\u043e\u043c \u0438 \u0444\u043b\u0430\u0433\u043e\u043c VPN; \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0441\u043d\u0438\u043c\u043e\u043a \u0440\u0430\u0437 \u0432 2 \u043c\u0438\u043d\u0443\u0442\u044b, \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 15 \u0434\u043d\u0435\u0439, \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 <code>POST <\/code><a href=\"http:\/\/reef.vk-cdn.net\/ru-vk-store\/stat\/v1\/ev\" rel=\"noopener noreferrer nofollow\"><code>reef.vk-cdn.net\/ru-vk-store\/stat\/v1\/ev<\/code><\/a>;<\/p>\n<\/li>\n<li>\n<p>\u0444\u043e\u043d\u043e\u0432\u043e\u0435 \u0430\u0432\u0442\u043e-\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 (\u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 RuStore) \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 (\u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\u0441\u044c) \u0447\u0435\u0440\u0435\u0437 <code>PACKAGE_USAGE_STATS<\/code> \u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 <a href=\"http:\/\/api.rustore.ru\" rel=\"noopener noreferrer nofollow\"><code>api.rustore.ru<\/code><\/a> (AltCraft) \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a <code>userId + vkId + deviceId<\/code>;<\/p>\n<\/li>\n<li>\n<p>AIDL-\u0440\u0430\u0437\u0434\u0430\u0447\u0430 VK-\u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0431\u0435\u0437 \u0434\u0438\u0430\u043b\u043e\u0433\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e-\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 MAX \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u00abpush -&gt; \u0442\u0438\u0445\u0430\u044f \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u043e \u0438\u043c\u0435\u043d\u0438\u00bb \u0432 \u0444\u0438\u0447\u0435 <code>preorder\/autoinstall<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0435\u0435\u0441\u0442\u0440 \u0438\u0437 73 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0445 \u0442\u043e\u0433\u0433\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0447\u0442\u0435\u043d\u0438\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 (IMEI, IMSI, ICCID) \u0441\u0438\u043b\u0430\u043c\u0438 kavsdk \u0438 libverify;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 Kaspersky-\u0434\u0432\u0438\u0436\u043e\u043a \u0441 KSN-\u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0435\u0439, P2P-\u043a\u0430\u043d\u0430\u043b\u043e\u043c \u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0432\u0441\u0435\u043c \u043a\u0442\u043e \u0447\u0438\u0442\u0430\u043b, \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0431\u044b\u0442\u044c \u043e\u0431\u044c\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c, \u043d\u0443 \u0438 \u0438\u0438 \u0441\u043b\u043e\u043f \u043a \u043a\u043e\u0434\u0443 \u043d\u0435 \u043f\u043e\u0434\u043f\u0443\u0441\u043a\u0430\u043b.<\/p>\n<p>\u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 <a href=\"https:\/\/t.me\/openlibrecommunit\" rel=\"noopener noreferrer nofollow\">t.me\/openlibrecommunity<\/a>\u00a0&#8212; \u0442\u0430\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043d\u043e\u0432\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u0430 \u0435\u0449\u0435 <a href=\"https:\/\/t.me\/owenewans\" rel=\"noopener noreferrer nofollow\">\u044f<\/a> \u0438\u0449\u0443 \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0430\u0441 \u0434\u043e\u043d\u0430\u0442\u043e\u043c<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0430\u0441 \u0434\u043e\u043d\u0430\u0442\u043e\u043c<\/summary>\n<div class=\"spoiler__content\">\n<p><strong>\u0420\u0423\u0411\u041b\u0418. \u0421\u0411\u041f, \u041a\u0410\u0420\u0422\u0410<\/strong>: pay.cloudtips.ru\/p\/28c476e5<\/p>\n<p><strong>\u041a\u0420\u0418\u041f\u0422\u0410. TON, USDT<\/strong>: UQD_Qc2cxLGe1P4wANi46cKdEvvzyJRrJTYPvGX2KAZDnsDh<\/p>\n<p><strong>\u041a\u0420\u0418\u041f\u0422\u0410, TRC 20, USDT:<\/strong> TYQqdACH5PrScvsMowSyS8JjaaF5wvFf5Q<\/p>\n<p><strong>\u041a\u0420\u0418\u041f\u0422\u0410, BTC<\/strong>: bc1qvw0ts0jk5e5dfj9fdez76j9ck95lqz04fpf02a<\/p>\n<\/div>\n<\/details>\n<p>UPD: \u0425\u0430 \u043a\u0430\u043a \u0432\u0430\u043c \u0438\u0434\u0435\u044f \u0440\u0435\u0432\u0435\u0440\u0441\u0438\u0442\u044c \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0440\u0443\u0441\u0441\u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0432 \u043c\u0435\u0441\u044f\u0446 \u043f\u043e\u043a\u0430 \u043e\u043d\u0438 \u043d\u0435 \u043f\u043e\u0437\u043e\u0432\u0443\u0442 \u043c\u0435\u043d\u044f \u043a \u0441\u0435\u0431\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c&#8230;<\/p>\n<p>UPD: \u041d\u0443, \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043a\u0430 \u043c\u043d\u0435 \u043d\u0435 \u043a\u0438\u043d\u0435\u0442 \u043e\u0444\u0435\u0440 \u043a\u0430\u043a\u043e\u0439 \u043d\u0438\u0442\u044c \u0431\u0438\u0433\u0442\u0435\u0445 \u044f \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0443 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 <\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1046710\/\">https:\/\/habr.com\/ru\/articles\/1046710\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440.\u0421 1 \u0430\u043f\u0440\u0435\u043b\u044f 2024 RuStore \u043f\u0440\u0435\u0434 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b, \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u0420\u0424.\u041d\u0443 \u0432\u043e\u0442 \u044f \u041c\u0430\u043a\u0441 \u0440\u0435\u0432\u0435\u0440\u0441\u0438\u043b, \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u043e\u0434\u043d\u043e \u0438 RuStor \u043f\u043e\u0440\u0435\u0432\u0435\u0441\u0438\u0442\u044c.\u041a\u0440\u0430\u0442\u043a\u043e \u0447\u0442\u043e \u044f \u043d\u0430\u0448\u0435\u043b\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 RuStore (VK):\u0428\u043e\u0443\u043a\u0435\u0439\u0441: \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 \u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438 \u0432 \u043b\u0430\u0443\u043d\u0447\u0435\u0440\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 POST api.rustore.ru\/v1\/showcase\/startup-destination \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u0444\u043e\u043d\u0435.\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f: \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 ANDROID_ID.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u043e \u0444\u043b\u0430\u0433\u0443: \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 MAX Messenger \u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0433\u043e \u041f\u041e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u043c\u0443 \u0444\u043b\u0430\u0433\u0443 SAK_MAX_MESSENGER_INSTALL \u0447\u0435\u0440\u0435\u0437 \u00ab\u0442\u0438\u0445\u0438\u0439\u00bb \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a.\u0422\u0438\u0445\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430: Push-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043a\u0440\u044b\u0442\u0443\u044e \u0444\u043e\u043d\u043e\u0432\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 (\u043b\u043e\u0433\u0438\u043a\u0430 preorder\/autoinstall, PreorderAutoInstallPushDto).SSO-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440: RuStore \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a VK-\u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 AIDL, \u0431\u0435\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.\u041f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Radar: \u041b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f SQLite-\u0431\u0430\u0437\u0430 snapshot_records \u0445\u0440\u0430\u043d\u0438\u0442 userId, \u0442\u0440\u0438 \u0433\u0435\u043e\u0444\u0438\u043a\u0441\u0430 (GPS, \u0441\u0435\u0442\u044c, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439), BSSID Wi-Fi-\u0440\u043e\u0443\u0442\u0435\u0440\u0430, \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0442\u043e\u0432\u044b\u0445 \u0432\u044b\u0448\u0435\u043a, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 SIM \u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 VPN\/\u0440\u043e\u0443\u043c\u0438\u043d\u0433\u0430.\u0410\u0432\u0442\u043e-\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435: \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u0441\u043e\u0444\u0442 \u0432 \u0444\u043e\u043d\u0435, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d.\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430: \u0421\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\u0441\u044c (PACKAGE_USAGE_STATS); \u0441\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0432\u043e\u0440\u043a\u0435\u0440 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043e\u0442\u0447\u0435\u0442\u044b \u043d\u0430 api.rustore.ru\/user-event-handler (AltCraft) \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a userId + vkId + deviceId.\u0422\u043e\u0433\u0433\u043b\u044b: \u0420\u0435\u0435\u0441\u0442\u0440 \u0438\u0437 73 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 VK ID SDK, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0444\u043b\u0430\u0433\u0438 \u0434\u043b\u044f MAX \u0438 sak_messenger_skip_sms_android. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0435 SDK:Kaspersky kavsdk: \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0441 KSN-\u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0435\u0439 (19 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044f P2P-\u0443\u0437\u043b\u044b), \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 inotify \u043f\u043e \u043c\u0435\u0434\u0438\u0430\u043f\u0430\u043f\u043a\u0430\u043c.Mail.ru libverify: \u0412\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e SMS\/\u0437\u0432\u043e\u043d\u043a\u0443, \u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u043e\u0434 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0438 \u043d\u043e\u043c\u0435\u0440 flash-call.VK SuperApp JS Bridge: 150+ \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043f\u0440\u043e\u0431\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 VK-\u0431\u0440\u0430\u0443\u0437\u0435\u0440.OK Tracer: \u0422\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 sdk-api.apptracer.ru.libsecrets.so: \u041e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u044b VK Push SDK.\u0421\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 MAXg20\/f.java \u044d\u0442\u043e MaxMessengerSeamlessInstallFlow. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 ru.oneme.app (MAX) \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 VK ID-\u0444\u043b\u043e\u0443 \u0433\u0435\u0439\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0444\u043b\u0430\u0433\u043e\u043c SAK_MAX_MESSENGER_INSTALL (\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0445 \u0442\u043e\u0433\u0433\u043b\u043e\u0432 VK, yn0\/b.java, \u043a\u043b\u044e\u0447 sak_max_messenger_install). \u0424\u043b\u0430\u0433 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u0430\u043c\u043e.\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0431\u0449\u0438\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a \u0441\u0442\u043e\u0440\u0430 wi2\/e.java:public final int g(String packageName) {    PackageInstaller.SessionParams sessionParams = new PackageInstaller.SessionParams(1);    sessionParams.setInstallReason(4);              \/\/ INSTALL_REASON_USER    if (Build.VERSION.SDK_INT &gt;= 31)        sessionParams.setRequireUserAction(2);      \/\/ USER_ACTION_NOT_REQUIRED    if (Build.VERSION.SDK_INT &gt;= 34)        sessionParams.setRequestUpdateOwnership(true);    sessionParams.setAppPackageName(packageName);    return this.f116925e.createSession(sessionParams);}setRequireUserAction(USER_ACTION_NOT_REQUIRED) \u044d\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0431\u0435\u0437 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. Android \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u0431\u0435\u0437 \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a\u0430 \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044f (UPDATE_PACKAGES_WITHOUT_USER_ACTION \u0438\/\u0438\u043b\u0438 \u0441\u0442\u0430\u0442\u0443\u0441 update-owner, \u043e\u0442\u0441\u044e\u0434\u0430 setRequestUpdateOwnership(true)). \u0414\u043b\u044f \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0442\u0438\u0445\u043e. \u042d\u0442\u043e \u0448\u0442\u0430\u0442\u043d\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a RuStore, \u0438 MAX \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0444\u043b\u0430\u0433. \u041c\u0435\u0442\u043e\u0434 g \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0435 \u0438\u043c\u044f \u043f\u0430\u043a\u0435\u0442\u0430, MAX \u0421\u043f\u0440\u0430\u0432\u043a\u0430: \u0431\u0435\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0432\u0435\u0434\u043e\u043c\u0430 \u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f \u0432 \u0444\u043e\u043d\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f MAX &#8212; \u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 E2E-\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u041f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e \u043d\u0438 \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c Android \u0434\u043b\u044f \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432, \u043d\u0438 \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c \u043b\u044e\u0431\u043e\u0433\u043e \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.Push \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0442\u0438\u0445\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043f\u0430\u043a\u0435\u0442\u0430\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 MAX \u044d\u0442\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u0443\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443. \u0412 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0438\u0447\u0435 ru.vk.store.feature.preorder.autoinstall \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c push-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c.\u041f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 push-\u0430 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 PreorderAutoInstallPushDto (&#8230;\/impl\/data\/PreorderAutoInstallPushDto.java):@Serializableclass PreorderAutoInstallPushDto {    String packageName;   \/\/ \u0447\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c    String name;    String icon;}\u041c\u0430\u043f\u043f\u0435\u0440 qq1\/a.java (PreorderAutoInstallPushMapper) \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0442\u0435\u043b\u043e push-\u0430 \u0432 \u044d\u0442\u043e\u0442 DTO:PreorderAutoInstallPushDto dto =    json.decode(PreorderAutoInstallPushDto.serializer(), str);return new PreorderAutoInstallPush(dto.getPackageName(), dto.getName(), Url(dto.getIcon()));\u0414\u0430\u043b\u044c\u0448\u0435 PreorderAutoInstallPushObserver (tq1\/h.java) \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u044d\u0442\u043e \u0432 GetPreorderAutoInstallActionInteractor (sq1\/a.java), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f PreorderAutoInstallAction:INSTALL, NOTIFICATION, SCREEN\u041d\u0430 \u0432\u0435\u0442\u043a\u0435 INSTALL \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 PreorderAutoInstallController (tq1\/c.java) \u0437\u043e\u0432\u0451\u0442 InstallAppUseCaseImpl (storeapp\/install\/impl\/domain\/j.java), \u0438 \u0442\u043e\u0442 \u0441\u0442\u0430\u0432\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c:\/\/ InstallAppUseCaseImpl.a(&#8230;)installRequestRepository.a(new InstallRequest.Enqueue(    packageName, appId, name, iconUrl, versionCode, signatures, &#8230;));\u041e\u0447\u0435\u0440\u0435\u0434\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 install-\u0432\u043e\u0440\u043a\u0435\u0440, \u0430 \u0441\u0430\u043c \u043f\u0430\u043a\u0435\u0442 \u0441\u0442\u0430\u0432\u0438\u0442 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a wi2\/e.java \u0441 setRequireUserAction(USER_ACTION_NOT_REQUIRED). \u041d\u0430 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0432 \u0444\u043e\u043d\u0435 \u0431\u0435\u0437 \u0442\u0430\u043f\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 PUSH \u043f\u0440\u044f\u043c\u043e \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d \u0432 MainActivity.java (PreorderAutoInstallReadyAnalyticsSource.PUSH).\u0412\u044b\u0431\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 INSTALL \u0438 NOTIFICATION\/SCREEN \u0433\u0435\u0439\u0442\u0438\u0442\u0441\u044f GetSilentInstallAvailabilityUseCase (ld1\/a.java) \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0442\u043e\u0433\u0433\u043b\u043e\u043c (FlipperRepository). \u041a\u043e\u0433\u0434\u0430 \u0442\u0438\u0445\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0438 \u0442\u043e\u0433\u0433\u043b \u0432\u043a\u043b\u044e\u0447\u0451\u043d, \u0431\u0435\u0440\u0451\u0442\u0441\u044f INSTALL, \u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u044d\u043a\u0440\u0430\u043d.\u0428\u0442\u0430\u0442\u043d\u044b\u0439, \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0437\u0430\u043a\u043e\u043d\u043d\u043e: \u0432\u044b \u0436\u043c\u0451\u0442\u0435 \u00ab\u041f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437\u0430\u0442\u044c\u00bb (POST v1\/preorder, vq1\/a.java), \u0432 \u0434\u0438\u0430\u043b\u043e\u0433\u0435 \u043f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e-\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 (AUTO_INSTALL, setAutoInstall), \u0438 \u043d\u0430 \u0440\u0435\u043b\u0438\u0437\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0441\u0430\u043c\u043e. \u042d\u0442\u043e \u0432\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0441\u0430\u043c\u0438.\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0432\u044f\u0437\u043a\u0430 GetPreorderAutoInstallActionInteractor (sq1\/b.java) \u0438 PreorderAutoInstallController (tq1\/c.java). \u0418\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u043e\u0440 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (INSTALL \/ NOTIFICATION \/ SCREEN) \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0442\u043e\u0433\u0433\u043b\u0430 (FlipperRepository) \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0442\u0438\u0445\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0431\u0435\u0440\u0451\u0442 \u0438\u043c\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u0442\u0435\u043b\u0430 \u043f\u0443\u0448\u0430 (PreorderAutoInstallPushDto.packageName), \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0438\u043c \u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443 RuStore (storeAppRepository.e(&#8230;)) \u0438 \u043e\u0442\u0434\u0430\u0451\u0442 \u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 (InstallAppUseCaseImpl -&gt; \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 wi2\/e.java).\u041f\u0440\u0438\u043a\u043e\u043b \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0447\u0442\u043e \u0432\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u043b\u0438 \u043f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442 \u043f\u043e\u043f\u0440\u043e\u0441\u0442\u0443 \u043d\u0435\u0442\u0443. \u0421\u0440\u0435\u0434\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u043e\u0440\u0430 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437\u0430\u0445 (\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 PreorderApi \/ PreorderNewRepository \u0438\u0437 vq1 \u0441\u044e\u0434\u0430 \u043d\u0435 \u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442\u0441\u044f), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u0441\u043b\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0441 \u0432\u0430\u0448\u0438\u043c\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437\u0430\u043c\u0438 \u044d\u0442\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442. \u0427\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430\u0437\u0432\u0430\u043b, \u0442\u043e \u0438 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f.\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043b \u0431\u044b \u0432\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a: \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u044d\u0442\u043e \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043d\u0430 \u0441\u043b\u043e\u0432\u043e. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 ( 67 \u043b\u044f\u043c\u043e\u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a ) \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0446\u0435\u043b\u044c\u044e \u0430\u0442\u0430\u043a, \u0438 \u043f\u0440\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0443\u0448\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0432\u044b\u0440\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u00ab\u043d\u0430\u0437\u043e\u0432\u0438 \u043b\u044e\u0431\u043e\u0439 \u043f\u0430\u043a\u0435\u0442 \u0438\u0437 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 -&gt; \u043e\u043d \u0432\u0441\u0442\u0430\u043d\u0435\u0442 \u0432 \u0444\u043e\u043d\u0435\u00bb \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0442\u0438\u0445\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439, \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437\u0430 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0436\u0435\u0440\u0442\u0432\u044b. \u0418 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043c\u0435\u0442\u0430\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442: \u0432 \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u044d\u0442\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e. \u041f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u044f \u0442\u0438\u0445\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0442\u043e\u0433\u0433\u043b\u044b \u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0443\u0434\u043e\u0431\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 \u043d\u0435\u0434\u043e\u0441\u043c\u043e\u0442\u0440.\u0421\u043f\u0440\u0430\u0432\u043a\u0430: \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0437\u0430\u0448\u0438\u0442 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u044d\u043a\u0434\u043e\u0440. \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u0433\u043e, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 \u0432\u044b \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0446\u0438\u0438. \u0421\u0435\u0440\u0432\u0435\u0440\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c Push-\u0441\u0438\u0433\u043d\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u044b\u0442\u043d\u043e \u0440\u0430\u0441\u043a\u0430\u0442\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0441\u043e\u0444\u0442 \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u041f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043f\u043e \u0442\u0438\u043f\u0443 Fdroid \u0438\u043b\u0438 Auroraoss &#8212; \u0442\u0438\u0445\u0430\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u041f\u041e \u0431\u0435\u0437 \u044f\u0432\u043d\u043e\u0433\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f &#8212; \u044d\u0442\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b.\u041f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Radar: \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0439, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044eRuStore \u043d\u0435\u0441\u0451\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0438 Radar (\u043f\u0430\u043a\u0435\u0442 ru.vk.store.lib.analytics.system.radar). \u042d\u0442\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 (\u043d\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 SDK). Radar \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u00ab\u0441\u043d\u0430\u043f\u0448\u043e\u0442\u00bb \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0430\u0437\u0443 SQLite \u0438 \u0440\u0430\u0437 \u0432 12 \u0447\u0430\u0441\u043e\u0432 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440.\u0421\u0430\u043c\u043e\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u0441\u0445\u0435\u043c\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. Room-\u0431\u0430\u0437\u0430 RadarDatabase \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 snapshot_records (dh2\/c.java, \u043a\u043b\u0430\u0441\u0441 RadarDatabase_Impl). \u041d\u0438\u0436\u0435 \u0435\u0451 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 CREATE TABLE, \u0438\u043c\u0435\u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0434\u043e\u0441\u043b\u043e\u0432\u043d\u044b\u0435, \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043c\u043e\u0438:CREATE TABLE `snapshot_records` (  `id` INTEGER PRIMARY KEY AUTOINCREMENT,  `sequenceNumber` INTEGER NOT NULL,  `userId` TEXT,                       &#8212; \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f  `createdTime` INTEGER NOT NULL,  `reason` TEXT NOT NULL,              &#8212; \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0441\u043d\u0438\u043c\u043a\u0430  &#8212; \u0442\u0440\u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0433\u0435\u043e\u0444\u0438\u043a\u0441\u0430, \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442:  `lastLocationlatitude` REAL, `lastLocationlongitude` REAL, `lastLocationaltitude` REAL,  `lastLocationaccuracy` REAL, `lastLocationspeed` REAL,  `gpsLocationlatitude` REAL, `gpsLocationlongitude` REAL, `gpsLocationaltitude` REAL,  `networkLocationlatitude` REAL, `networkLocationlongitude` REAL,  &#8212; \u0441\u043e\u0442\u043e\u0432\u0430\u044f \u0441\u0435\u0442\u044c:  `networkStatecellularExtendedInfosimOperator` TEXT,     &#8212; \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 SIM  `networkStatecellularExtendedInfonetworkOperator` TEXT,  `networkStatecellularExtendedInfoisRoaming` INTEGER,    &#8212; \u0440\u043e\u0443\u043c\u0438\u043d\u0433  `networkStatecellularExtendedInfocellInfoList` BLOB,    &#8212; \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u044b\u0448\u0435\u043a  `networkStatecellularExtendedInfosimInfoList` BLOB,  &#8212; \u0441\u0435\u0442\u044c \u0438 \u0442\u0440\u0430\u0444\u0438\u043a:  `networkStatenetworkInfovpnEnabled` INTEGER,            &#8212; \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u043b\u0438 VPN  `networkStatenetworkInfosignalStrength` INTEGER,  `networkStatesystemTrafficStatstotalBytes` INTEGER NOT NULL,  `networkStateprocessTrafficStatstotalBytes` INTEGER NOT NULL,  &#8212; Wi-Fi, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d \u0442\u0435\u043b\u0435\u0444\u043e\u043d:  `connectedWifiInfobssid` TEXT,                          &#8212; &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-483379","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/483379","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=483379"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/483379\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=483379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=483379"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=483379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}