{"id":314727,"date":"2020-12-11T15:01:35","date_gmt":"2020-12-11T15:01:35","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=314727"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=314727","title":{"rendered":"\u041f\u0430\u0441\u0445\u0430\u043b\u043a\u0430 \u0432 APK-\u0444\u0430\u0439\u043b\u0430\u0445: \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Frosting"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/lw\/qw\/zh\/lwqwzh_toq_jmkgmzqu_7pqog3c.jpeg\"><\/p>\n<p>  <\/p>\n<p>\u0410\u0432\u0442\u043e\u0440: <a href=\"https:\/\/github.com\/sc07kvm\">\u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0438\u043d \u041c\u043e\u043b\u043e\u0434\u044f\u043a\u043e\u0432<\/a><\/p>\n<p>  <\/p>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0444\u0430\u0439\u043b\u0430 \u2014 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u0440 \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439, \u0442\u0430\u0439\u043d\u0430\u043c\u0438 \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u0440\u043a\u043e\u043c \u0443\u0440\u043e\u0434\u043e\u0432, \u0433\u0434\u0435 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u043a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432 \u043d\u0435\u0439 \u043f\u043e\u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e.<\/p>\n<p>  <\/p>\n<p>\u042f \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u0443 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c APK-\u0444\u0430\u0439\u043b\u043e\u0432 \u2014 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0441 \u043e\u0441\u043e\u0431\u044b\u043c \u0431\u043b\u043e\u043a\u043e\u043c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, <strong>Frosting<\/strong>. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u043b\u0441\u044f \u043b\u0438 \u0444\u0430\u0439\u043b \u0447\u0435\u0440\u0435\u0437 Google Play. \u042d\u0442\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043d\u044b\u0445 \u0432\u0435\u043d\u0434\u043e\u0440\u043e\u0432 \u0438 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446 \u043f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043e\u0432. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043a\u0440\u0438\u043c\u0438\u043d\u0430\u043b\u0438\u0441\u0442\u0430\u043c \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0444\u0430\u0439\u043b\u0430. <\/p>\n<p>  <\/p>\n<p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0442. \u0423\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0434\u0435\u043b <a href=\"https:\/\/android-developers.googleblog.com\/2017\/12\/improving-app-security-and-performance.html\">Security metadata in early<\/a> 2018 \u0432 <em>Android Developers Blog<\/em> \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 Avast, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u044c. \u042f \u0440\u0435\u0448\u0438\u043b \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u044d\u0442\u0443 \u0448\u0442\u0443\u043a\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Avast \u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0438 Frosting-\u0431\u043b\u043e\u043a\u0430 \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438.<a name=\"habracut\"><\/a><\/p>\n<p>  <\/p>\n<h2 id=\"frosting-i-apk-signing-block\">Frosting \u0438 APK Signing Block<\/h2>\n<p>  <\/p>\n<p>Google \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u044c APK-\u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0432 Google Play. \u042d\u0442\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u043b\u0435\u0436\u0438\u0442 \u0432 <em>APK Signing Block<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0435\u0439 ZIP-\u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ir\/u9\/ef\/iru9efrghb8bnsita1orpif-7mk.png\"><br \/>  \u0414\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 <em>APK Signing Block<\/em> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f magic \u2014 <em>APK Sig Block 42<\/em>. \u0412\u043d\u0443\u0442\u0440\u0438 \u0431\u043b\u043e\u043a\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043c\u043e\u0433\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0431\u043b\u043e\u043a\u0438, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f 4-\u0431\u0430\u0439\u0442\u043e\u0432\u044b\u043c ID. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 ZIP-\u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c\u044e. \u0415\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0438\u043b\u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u043c\u0435\u0442\u043e\u0434 <em>ApkSigningBlockUtils.findSignature<\/em> <a href=\"https:\/\/android.googlesource.com\/platform\/frameworks\/base\/+\/master\/core\/java\/android\/util\/apk\/ApkSigningBlockUtils.java\">\u043e\u043f\u0438\u0441\u0430\u043d \u0442\u0443\u0442<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u044c\u043c\u0435\u043c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0444\u0430\u0439\u043b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/www.virustotal.com\/gui\/file\/250f60f7d34af9d48895ef21e417ba3060d086e624e6f562ba04016a0a4cfa0a\/details\">2124948e2b7897cd6fbbe5fbd655c26d<\/a>. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0431\u043b\u043e\u043a\u043e\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445\u0441\u044f \u0432 <em>APK Signing Block,<\/em> \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/github.com\/androguard\/androguard\">androguard<\/a>:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">from androguard.core.bytecodes import apk apk_obj = apk.APK(&quot;2124948e2b7897cd6fbbe5fbd655c26d.apk&quot;) apk_obj.parse_v2_v3_signature() print([&quot;0x%X&quot; % key for key in apk_obj._v2_blocks.keys()])  ['0x7109871A', '0x2146444E']<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u043e\u043a\u043e\u0432 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0438\u043d\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 <a href=\"https:\/\/source.android.com\/security\/apksigning\/v2\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>:<\/p>\n<p>  <\/p>\n<ul>\n<li><strong>0x7109871a<\/strong> (<a href=\"https:\/\/android.googlesource.com\/platform\/tools\/apksig\/+\/refs\/heads\/master\/src\/main\/java\/com\/android\/apksig\/internal\/apk\/v2\/V2SchemeVerifier.java#65\">APK_SIGNATURE_SCHEME_V2_BLOCK_ID<\/a>) \u2014 \u0431\u043b\u043e\u043a \u0441\u0445\u0435\u043c\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u0438 APK \u0432\u0435\u0440\u0441\u0438\u0438 2;<\/li>\n<li><strong>0xf05368c0<\/strong> (<a href=\"https:\/\/android.googlesource.com\/platform\/tools\/apksig\/+\/refs\/heads\/master\/src\/main\/java\/com\/android\/apksig\/internal\/apk\/v3\/V3SchemeVerifier.java#72\">APK_SIGNATURE_SCHEME_V3_BLOCK_ID<\/a>) \u2014 \u0431\u043b\u043e\u043a \u0441\u0445\u0435\u043c\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u0438 APK \u0432\u0435\u0440\u0441\u0438\u0438 3.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 <a href=\"https:\/\/android.googlesource.com\/\">Android<\/a>:<\/p>\n<p>  <\/p>\n<ul>\n<li><strong>0x42726577<\/strong> (<a href=\"https:\/\/android.googlesource.com\/platform\/tools\/apksig\/+\/refs\/heads\/master\/src\/main\/java\/com\/android\/apksig\/internal\/apk\/ApkSigningBlockUtils.java#1072\">VERITY_PADDING_BLOCK_ID<\/a>) \u2014 \u0431\u043b\u043e\u043a, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430;<\/li>\n<li><strong>0x6dff800d<\/strong> (<a href=\"https:\/\/android.googlesource.com\/platform\/frameworks\/base\/+\/master\/core\/java\/android\/util\/apk\/SourceStampVerifier.java#78\">SOURCE_STAMP_BLOCK_ID<\/a>) \u2014 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u043e\u0432\u044b\u0439 \u0432\u0438\u0434 \u0431\u043b\u043e\u043a\u043e\u0432.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0412\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0431\u043b\u043e\u043a\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li><strong>0x504b4453<\/strong> (<a href=\"https:\/\/github.com\/guptadeepanshu\/agp-sources\/blob\/main\/sources\/com.android.tools.build\/apkzlib\/com\/android\/tools\/build\/apkzlib\/sign\/SigningExtension.java#L92\">DEPENDENCY_INFO_BLOCK_ID<\/a>) \u2014 \u0431\u043b\u043e\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c, \u043f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u0445, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u0430\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c <a href=\"https:\/\/developer.android.com\/studio\/releases\/gradle-plugin#dependency-metadata\">Android Gradle<\/a> \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043d\u0438\u043c\u0438;<\/li>\n<li><strong>0x71777777<\/strong> (<a href=\"https:\/\/github.com\/Meituan-Dianping\/walle\/blob\/master\/payload_reader\/src\/main\/java\/com\/meituan\/android\/walle\/ApkUtil.java#L28\">APK_CHANNEL_BLOCK_ID<\/a>) \u2014 \u0431\u043b\u043e\u043a \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0439 \u043f\u0440\u0438\u0431\u043b\u0443\u0434\u044b Walle \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 JSON \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u043a\u0430\u043d\u0430\u043b\u0430;<\/li>\n<li><strong>0xff3b5998<\/strong> \u2014 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0431\u043b\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f \u043c\u043d\u0435 \u0432 <a href=\"https:\/\/www.virustotal.com\/gui\/file\/8e7de372827008bec8af7e1deeee819b3082aaa25fa77964f9d4025cbb907fb6\/details\">\u0444\u0430\u0439\u043b\u0435<\/a> \u2014 \u043d\u0430\u0439\u0442\u0438 \u043a\u0430\u043a\u0443\u044e-\u043b\u0438\u0431\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0435\u043c \u044f \u043d\u0435 \u0441\u043c\u043e\u0433;<\/li>\n<li><strong>0x2146444e<\/strong> \u2014 \u0431\u043b\u043e\u043a \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u043c\u0435\u0442\u0430\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e\u0442 Google Play.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"frosting--i-play-market\">Frosting \u0438 \u00abPlay \u041c\u0430\u0440\u043a\u0435\u0442\u00bb<\/h2>\n<p>  <\/p>\n<p>\u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u0430\u043d\u0430\u043b\u0438\u0437\u0443 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 <strong>0x2146444e<\/strong>. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 <a href=\"https:\/\/www.virustotal.com\/gui\/file\/c1bd706d0fecda239f32612fc72f3873cda8c9239820cca6a664610031f03fd6\/details\">\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u00abPlay \u041c\u0430\u0440\u043a\u0435\u0442\u00bb<\/a>.<\/p>\n<p>  <\/p>\n<pre><code class=\"java\">.method public static b(ByteBuffer)ByteBuffer         .registers 2     00000000  invoke-static       bny-&gt;a(ByteBuffer)aea, p0     00000006  move-result-object  p0     00000008  const               v0, 0x2146444E     0000000E  invoke-virtual      aea-&gt;a(I)Object, p0, v0     00000014  move-result-object  p0     00000016  check-cast          p0, bnx     0000001A  if-eqz              p0, :00000024     0000001E  iget-object         p0, p0, bnx-&gt;a:ByteBuffer     00000022  return-object       p0     00000024  new-instance        p0, SigBlockUtil$BlockNotFoundException     00000028  const-string        v0, &quot;Block entry id (go\/apk-structure-glossary) &quot;                                       &quot;not present in APK Signing Block&quot;     0000002C  invoke-direct       SigBlockUtil$BlockNotFoundException-&gt;                                       &lt;init&gt;(String)V, p0, v0     00000032  throw               p0 .end method<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u0432 \u0434\u0432\u0443\u0445 \u043c\u0435\u0441\u0442\u0430\u0445. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0433\u043b\u0443\u0431\u0436\u0435. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0440\u0430\u0437\u0431\u043e\u0440 \u0431\u043b\u043e\u043a\u0430. \u0417\u0434\u0435\u0441\u044c \u0436\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u0441\u0440\u0435\u0434\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 Frosting-\u0431\u043b\u043e\u043a\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"java\">public enum aysn implements avto {     UNKNOWN(0),     SUCCESS(81),     NO_FROSTING_BLOCK(1),     FROSTING_BLOCK_TOO_SHORT(2),     BAD_SIGNED_DATA_LENGTH_VARINT(3),     NON_POSITIVE_SIGNED_DATA_LENGTH(4),     SIGNED_DATA_LENGTH_TOO_LONG(5),     BAD_FROSTING_LENGTH_VARINT(6),     NON_POSITIVE_FROSTING_LENGTH(7),     FROSTING_LENGTH_BEYOND_SIGNED_DATA(8),     FROSTING_LENGTH_BEYOND_BLOCK(9),     MALFORMED_FROSTING(10),     \/\/ ...     INSTALLER_NO_ACCOUNT_WITH_MATCHING_REGION(74);     \/\/ ... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u042f \u0441\u0440\u0430\u0432\u043d\u0438\u043b \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u00abPlay \u041c\u0430\u0440\u043a\u0435\u0442\u00bb \u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u043a\u043e\u0434, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0440\u0430\u0437\u0431\u043e\u0440 \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0438, \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u044f\u043d\u0432\u0430\u0440\u0435 2018 \u0433\u043e\u0434\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u0432\u0435\u0440\u0441\u0438\u0438 8.6.X. \u0411\u043b\u043e\u043a \u0441 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 Frosting \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u0442 \u043f\u0435\u0440\u0438\u043e\u0434 \u043e\u043d \u043f\u0440\u0438\u043d\u044f\u043b \u0442\u043e\u0442 \u0432\u0438\u0434, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0435\u0439\u0447\u0430\u0441.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 \u0447\u0442\u0435\u043d\u0438\u044f 4-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430. \u0421\u0445\u0435\u043c\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 varint \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0443\u0445\u0438\u0449\u0440\u0435\u043d\u0438\u0439 \u0441 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"java\">private static int read_int32(ByteBuffer arg2) {     int v0 = arg2.get();     if(v0 &gt;= 0) {         return v0;     }      int v0_1 = v0 &amp; 0x7F;     int v1 = arg2.get();     if(v1 &gt;= 0) {         return v1 &lt;&lt; 7 | v0_1;     }      v0_1 |= (v1 &amp; 0x7F) &lt;&lt; 7;     int v1_1 = arg2.get();     if(v1_1 &gt;= 0) {         return v1_1 &lt;&lt; 14 | v0_1;     }      v0_1 |= (v1_1 &amp; 0x7F) &lt;&lt; 14;     int v1_2 = arg2.get();     if(v1_2 &gt;= 0) {         return v1_2 &lt;&lt; 21 | v0_1;     }      int v2 = arg2.get();     int v0_2 = v0_1 | (v1_2 &amp; 0x7F) &lt;&lt; 21 | v2 &lt;&lt; 28;     if(v2 &gt;= 0) {         return v0_2;     }      throw new IllegalArgumentException(); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0431\u043b\u043e\u043a\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u0445\u043e\u0442\u044c \u0438 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">{     var_int32 size_signed_data,     var_int32 size_frosting,     byte frosting[size_frosting],     var_int32 size_validation_sequence,     array validation_sequence {         var_int32 size_validation_data,         var_int32 validation_strategy,         var_int32 signing_key_index,         byte sha256[0x20]},     var_int32 size_signature_sequence,     array signature_sequence {         var_int32 size_signature,         byte signature[size_signature]}}<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0445\u0435\u0448 \u0438 \u043a\u043b\u044e\u0447 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 <em>validation_sequence<\/em>, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e <em>validation_strategy<\/em> \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e. \u0421\u0430\u043c\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 <em>signature_sequence<\/em> \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c, \u043a\u0430\u043a \u0443 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 <em>validation_sequence<\/em>. \u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u043d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u043e\u044f\u0441\u043d\u044f\u044e\u0449\u0438\u0439 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434:<\/p>\n<p>  <\/p>\n<pre><code class=\"java\">def get_signing_data(frosting_block):     for i, validation in enumerate(frosting_block.validation_sequence):         if validation.validation_strategy != 0:             continue         return (             validation.sha256, validation.signing_key_index,             frosting_block.signature_sequence[i].signature)     raise AttributeError()<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>signing_key_index<\/em> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 <strong>finsky.peer_app_sharing_api.frosting_public_keys<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438 \u043f\u043e\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043a\u043b\u044e\u0447:<\/p>\n<p>  <\/p>\n<pre><code class=\"java\">gyd.iH = arip.a(     &quot;finsky.peer_app_sharing_api.min_tos_version&quot;, v8); gyd.iI = arip.a(     &quot;finsky.peer_app_sharing_api.frosting_public_keys&quot;,     &quot;MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZH2+1+E07dnErAD3L6BbTnaohU0bbXriNlJI7VxJU+LjdSwPyXR5pomARAMoyPkMksLz\/gitUPtFuJoPL2ziEw==&quot;); gyd.iJ = arip.a(     &quot;finsky.peer_app_sharing_api.startup_package_blacklist&quot;,     &quot;com.android.vending,com.google.android.gms,com.android.providers.downloads&quot;); gyd.iK = arip.a(     &quot;finsky.frosting_only_update_time_ms&quot;, Long.valueOf(TimeUnit.DAYS.toMillis(30L)));<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c <em>size_signed_data<\/em>, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <em>size_frosting<\/em>, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c <code>ECDSA_SHA256<\/code>. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 <code>SHA-256<\/code> \u043e\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<p>  <\/p>\n<p>1) \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u0430\u0439\u043b\u0430 \u0434\u043e \u0431\u043b\u043e\u043a\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0438;<\/p>\n<p>  <\/p>\n<p>2) \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 <em>central directory<\/em> \u0434\u043e \u043a\u043e\u043d\u0446\u0430 <em>end of central directory<\/em>, \u0441 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u0432 <em>end of central directory<\/em> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f <em>offset of start of central with respect to the starting disk number<\/em> \u043d\u0430 \u043e\u0444\u0444\u0441\u0435\u0442 \u0431\u043b\u043e\u043a\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0438.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0431\u043b\u043e\u043a \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0441\u0445\u0435\u043c\u044b \u0432\u0435\u0440\u0441\u0438\u0438 2, \u0442\u043e \u043e\u043d \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u0437 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 1 \u0438 2 \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c <code>APK_SIGNATURE_SCHEME_V2_BLOCK_ID<\/code> \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/za\/ja\/mm\/zajammjadi0fwqph_6pw--rhffi.png\"><br \/>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0449\u0430\u044f \u0445\u0435\u0448 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u00abPlay \u041c\u0430\u0440\u043a\u0435\u0442\u00bb, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"java\">private static byte[] get_frosting_hash(RandomAccessFile f_apk,          long offset_signing_block, ByteBuffer signature_scheme_v2_block,          long offset_zip_central_dir, long size_from_central_dir_to_end_central_dir,          ByteBuffer end_central_dir) {     MessageDigest v0;     try {         v0 = MessageDigest.getInstance(&quot;SHA-256&quot;);     }     catch(NoSuchAlgorithmException unused_ex) {         throw new FrostingUtil.FailureException(aysn.N);  \/\/ NO_SHA_256_ALGORITHM     }      mcc.update_digest(v0, f_apk, 0L, offset_signing_block);     if(signature_scheme_v2_block != null) {         v0.update(mcc.a);         v0.update(signature_scheme_v2_block);     }      mcc.update_digest(v0, f_apk, offset_zip_central_dir,             size_from_central_dir_to_end_central_dir);     bnz.a(end_central_dir, offset_signing_block);     end_central_dir.position(end_central_dir.position());     end_central_dir.limit(end_central_dir.limit());     v0.update(end_central_dir);     return v0.digest(); }<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"frosting--i--protobuf\">Frosting \u0438 ProtoBuf<\/h2>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u0438. \u041d\u043e, \u0443\u0432\u044b, \u043c\u043d\u0435 \u0442\u0430\u043a \u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 Frosting-\u0431\u043b\u043e\u043a\u0430. \u0423 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043b\u0438\u0448\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 ProtoBuf \u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u044e \u043f\u043e\u043b\u0435\u0439 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>  <\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0431\u0435\u0437 \u0441\u0445\u0435\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a (<a href=\"https:\/\/www.virustotal.com\/gui\/file\/557c5ee3476f67a8928b2f0fc3d196ae7164026eb18bd0267e2f5ee477f3dbf7\/details\">4b005c9e9ea0731330a757fcf3abeb6e<\/a>):<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">cat .\/ru.sberbankmobile_11.1.0_2020072413.protobuf | .\/protodec -p  {   &quot;1:0:varint&quot;: 2,   &quot;2:1:varint&quot;: 0,   &quot;3:2:varint&quot;: 1,   &quot;4:3:varint&quot;: 1603811598348,   &quot;5:4:embedded&quot;: {     &quot;8:0:embedded&quot;: {       &quot;1:0:embedded&quot;: {         &quot;1:0:varint&quot;: 21       },       &quot;6:1:varint&quot;: 3     },     &quot;9:1:embedded&quot;: {       &quot;1:0:embedded&quot;: {         &quot;1:0:varint&quot;: 2020072413,         &quot;4:1:varint&quot;: 3       },       &quot;2:1:embedded&quot;: {         &quot;1:0:varint&quot;: 2020072414,         &quot;4:1:varint&quot;: 5       }     },     &quot;10:2:embedded&quot;: {       &quot;1:0:bytes&quot;: [         255, 255, 255, 255, 255, 255, 255, 255, 255,         255, 255, 255, 255, 255, 255, 255, 255, 7,         0, 40, 0, 16, 0, 0, 80, 5, 16, 64, 0, 56       ]     }   },   &quot;8:5:varint&quot;: 1,   &quot;9:6:varint&quot;: 2 }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b (<a href=\"https:\/\/www.virustotal.com\/gui\/file\/30a73489735769e0554dcd6b7ad95f3e48c16138279419ca258d855b2f257a16\/details\">471c589acc800135eb318057c43a8068<\/a>), \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u043f\u043e\u0434 \u043f\u044f\u0442\u044c\u0441\u043e\u0442 \u043f\u043e\u043b\u0435\u0439.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">{   &quot;1:0:varint&quot;: 1,   &quot;2:1:varint&quot;: 1,   &quot;3:2:varint&quot;: 1,   &quot;4:3:varint&quot;: 1593452906098,   &quot;5:4:embedded&quot;: {     &quot;7:0:embedded&quot;: {       &quot;1:0:varint&quot;: 1,       &quot;2:1:varint&quot;: 1     },     &quot;8:1:embedded&quot;: {       &quot;1:0:embedded&quot;: {         &quot;1:0:varint&quot;: 16       },       &quot;6:1:varint&quot;: 3,       &quot;6:2:varint&quot;: 2     },     &quot;9:2:embedded&quot;: {       &quot;1:0:embedded&quot;: {         &quot;1:0:varint&quot;: 2021505050,         &quot;4:1:varint&quot;: 3,         &quot;4:2:varint&quot;: 2       }     },     &quot;10:3:embedded&quot;: {       &quot;1:0:bytes&quot;: [         221, 255, 227, 239, 247, 127, 255, 191, 239, 191, 255, 255, 255, 255,         247, 255, 255, 0, 0, 8, 0, 16, 0, 0, 16, 5, 16, 64, 0, 32],       &quot;3:1:embedded&quot;: {         &quot;1:0:bytes&quot;: [           137, 204, 247, 126, 103, 225, 96, 185, 11, 67, 239, 227, 193, 247,           248, 68, 8, 2, 37, 20, 197, 120, 249, 112, 81, 240, 131, 124, 231,           64, 45, 116, 60, 212, 47, 211, 175, 84, 218, 140, 61, 140, 116, 14,           9, 38, 64, 21, 87, 196, 128, 228, 201, 237, 248, 67, 96, 229, 131,           79, 217, 94, 223, 232, 73, 222, 177, 132, 162, 191, 144, 84, 83, 77,           253, 70, 207, 180, 53, 131, 75, 2, 111, 84, 212, 4, 33, 100, 160, 78,           253, 54, 63, 120, 67, 18, 92, 196, 101, 214, 245, 149, 11, 217, 102,           93, 243, 158, 87, 133, 135, 85, 179, 175, 58, 242, 217, 52, 37, 128,           81, 76, 10, 113, 96, 205, 150, 253, 12, 105, 74, 1, 25, 146, 160,           126, 93, 196, 179, 143, 145, 106, 135, 242, 136, 186, 96, 164, 61,           11, 56, 229, 113, 104, 68, 162, 179, 105, 25, 125, 27, 43, 162, 94,           238, 237, 75, 89, 0, 112, 98, 49, 129, 49, 208, 89, 163, 66, 174,           119, 27, 135, 109, 105, 204],         &quot;2:1:varint&quot;: 13       }     },     &quot;12:4:embedded&quot;: {       &quot;1:0:embedded&quot;: {         &quot;5:0:varint&quot;: 21       },       &quot;2:1:embedded&quot;: {         &quot;1:0:varint&quot;: 0,         &quot;2:1:embedded&quot;: {           &quot;1:0:bytes&quot;: [             41, 93, 201, 211, 27, 15, 203, 207, 160, 84, 10, 4, 65, 194, 92,             146, 191, 221, 207, 134, 150, 216, 77, 234, 223, 53, 187, 49, 207,             136, 84, 82]         },         &quot;3:2:embedded&quot;: {           &quot;1:0:bytes&quot;: [             80, 168, 41, 12, 177, 59, 101, 235, 150, 116, 174, 248, 213, 250,             72, 228, 35, 56, 11, 184, 197, 36, 206, 168, 225, 19, 221, 82, 213,             106, 206, 248],           &quot;2:1:embedded&quot;: {             &quot;1:0:embedded&quot;: {               &quot;1:0:varint&quot;: 120             }           }         },         &quot;3:3:embedded&quot;: {           &quot;1:0:bytes&quot;: [             59, 234, 46, 139, 75, 154, 134, 17, 78, 53, 232, 182, 38, 151, 51,             63, 38, 71, 1, 189, 112, 252, 157, 201, 177, 179, 163, 159, 188,             22, 181, 221],           &quot;2:1:embedded&quot;: {             &quot;1:0:embedded&quot;: {               &quot;1:0:varint&quot;: 160             }           }         },         &quot;3:4:embedded&quot;: {           &quot;1:0:bytes&quot;: [             202, 210, 137, 99, 138, 209, 74, 181, 118, 190, 8, 18, 68, 86, 137,             151, 223, 217, 226, 19, 248, 109, 240, 206, 216, 31, 232, 18, 87,             167, 17, 251],           &quot;2:1:embedded&quot;: {             &quot;1:0:embedded&quot;: {               &quot;1:0:varint&quot;: 240             }           }         },         &quot;3:5:embedded&quot;: {           &quot;1:0:bytes&quot;: [             191, 119, 224, 30, 167, 161, 4, 135, 44, 155, 92, 208, 26, 168,             120, 198, 195, 65, 125, 110, 58, 168, 92, 171, 56, 41, 131, 172,             176, 171, 78, 223],           &quot;2:1:embedded&quot;: {             &quot;1:0:embedded&quot;: {               &quot;1:0:varint&quot;: 320             }           }         },         &quot;3:6:embedded&quot;: {           &quot;1:0:bytes&quot;: [             246, 143, 161, 148, 32, 191, 55, 116, 35, 71, 23, 31, 83, 35, 218,             162, 116, 40, 111, 227, 122, 3, 151, 57, 45, 54, 156, 94, 171, 146,             185, 175],           &quot;2:1:embedded&quot;: {             &quot;1:0:embedded&quot;: {               &quot;1:0:varint&quot;: 480             }           }         },         &quot;3:7:embedded&quot;: {           &quot;1:0:bytes&quot;: [             5, 217, 66, 174, 71, 16, 113, 53, 143, 20, 129, 142, 83, 16, 107,             217, 105, 193, 85, 234, 236, 46, 45, 168, 7, 17, 71, 171, 18, 239,             131, 23],           &quot;2:1:embedded&quot;: {             &quot;1:0:embedded&quot;: {               &quot;1:0:varint&quot;: 640             }           }         },         &quot;3:8:embedded&quot;: {           &quot;1:0:bytes&quot;: [             134, 163, 146, 36, 137, 172, 95, 238, 205, 214, 71, 99, 209, 190,             16, 59, 205, 59, 201, 2, 146, 43, 117, 131, 131, 218, 64, 251, 108,             217, 37, 141],           &quot;2:1:embedded&quot;: {             &quot;1:0:embedded&quot;: {               &quot;1:0:varint&quot;: 213             }           }         },         &quot;3:9:embedded&quot;: {           &quot;1:0:bytes&quot;: [             186, 26, 67, 178, 23, 52, 226, 60, 224, 196, 139, 119, 120, 246,             20, 110, 238, 52, 171, 50, 107, 40, 225, 89, 86, 93, 183, 41, 195,             150, 1, 234],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 7             }           }         },         &quot;3:10:embedded&quot;: {           &quot;1:0:bytes&quot;: [             58, 32, 81, 63, 166, 190, 81, 128, 63, 140, 253, 185, 32, 231, 65,             64, 145, 144, 158, 160, 114, 51, 147, 56, 145, 78, 131, 124, 155,             244, 135, 29],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 47             }           }         },         &quot;3:11:embedded&quot;: {           &quot;1:0:bytes&quot;: [             208, 138, 65, 103, 12, 44, 60, 179, 81, 117, 125, 125, 32, 171, 58,             255, 61, 9, 184, 59, 17, 165, 38, 250, 2, 126, 131, 206, 204, 106,             121, 122],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 172             }           }         },         &quot;3:12:embedded&quot;: {           &quot;1:0:bytes&quot;: [             31, 249, 92, 139, 0, 179, 127, 14, 76, 18, 118, 130, 116, 231, 107,             180, 104, 172, 152, 12, 126, 119, 18, 158, 162, 145, 126, 39, 92,             184, 71, 29],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 148             }           }         },         &quot;3:13:embedded&quot;: {           &quot;1:0:bytes&quot;: [             215, 70, 132, 253, 56, 142, 20, 226, 80, 118, 251, 124, 96, 236,             23, 198, 249, 38, 100, 213, 16, 125, 232, 138, 142, 127, 236, 127,             185, 25, 114, 190],           &quot;2:1:embedded&quot;: {             &quot;7:0:embedded&quot;: {               &quot;1:0:string&quot;: &quot;IW&quot;             }           }         },         &quot;3:14:embedded&quot;: {           &quot;1:0:bytes&quot;: [             87, 151, 187, 223, 182, 225, 35, 238, 176, 44, 82, 149, 122, 132,             165, 219, 225, 29, 73, 188, 200, 85, 139, 102, 160, 115, 38, 107,             248, 236, 198, 127],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 153             }           }         },         &quot;3:15:embedded&quot;: {           &quot;1:0:bytes&quot;: [             41, 181, 59, 170, 70, 192, 248, 215, 162, 173, 176, 230, 98, 201,             85, 97, 46, 213, 204, 180, 97, 160, 104, 131, 96, 116, 115, 239,             75, 4, 152, 127],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 171             }           }         },         &quot;3:16:embedded&quot;: {           &quot;1:0:bytes&quot;: [             66, 31, 252, 95, 240, 235, 159, 130, 37, 247, 203, 210, 165, 40, 2,             37, 157, 33, 78, 114, 102, 214, 7, 15, 128, 103, 91, 63, 138, 113,             125, 119],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 3             }           }         },         &quot;3:17:embedded&quot;: {           &quot;1:0:bytes&quot;: [             38, 209, 2, 170, 201, 97, 61, 107, 59, 193, 146, 187, 51, 241, 22,             232, 147, 33, 169, 77, 71, 109, 213, 77, 47, 247, 160, 158, 111,             206, 156, 243],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 184             }           }         },         &quot;3:18:embedded&quot;: {           &quot;1:0:bytes&quot;: [             195, 229, 130, 114, 114, 109, 5, 1, 40, 156, 47, 239, 0, 169, 239,             211, 98, 138, 113, 182, 234, 23, 214, 125, 49, 107, 142, 168, 175,             253, 223, 124],           &quot;2:1:embedded&quot;: {             &quot;7:0:embedded&quot;: {               &quot;1:0:string&quot;: &quot;IN&quot;             }           }         },         &quot;3:19:embedded&quot;: {           &quot;1:0:bytes&quot;: [             53, 252, 95, 223, 136, 114, 75, 101, 122, 251, 97, 128, 49, 203,             183, 223, 33, 50, 56, 209, 198, 238, 135, 15, 85, 128, 142, 242,             221, 17, 110, 219],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 77             }           }         },         &quot;3:20:embedded&quot;: {           &quot;1:0:bytes&quot;: [             31, 231, 69, 193, 155, 115, 41, 39, 125, 98, 164, 106, 101, 40, 15,             168, 63, 161, 40, 158, 119, 56, 170, 131, 97, 143, 204, 117, 219,             228, 115, 58],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 51             }           }         },         &quot;3:21:embedded&quot;: {           &quot;1:0:bytes&quot;: [             58, 114, 14, 110, 167, 28, 66, 253, 106, 5, 106, 130, 219, 199,             234, 73, 126, 0, 63, 102, 153, 172, 52, 224, 22, 145, 84, 42, 74,             216, 210, 58],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 154             }           }         },         &quot;3:22:embedded&quot;: {           &quot;1:0:bytes&quot;: [             3, 198, 55, 89, 63, 195, 67, 117, 23, 19, 208, 6, 64, 61, 55, 60,             106, 216, 150, 133, 175, 51, 211, 254, 106, 150, 250, 240, 10, 49,             163, 47],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 84             }           }         },         &quot;3:23:embedded&quot;: {           &quot;1:0:bytes&quot;: [             43, 113, 17, 252, 89, 90, 79, 80, 158, 159, 123, 186, 207, 137, 84,             186, 68, 155, 105, 111, 176, 215, 70, 107, 51, 237, 73, 155, 242,             122, 10, 46],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 325             }           }         },         &quot;3:24:embedded&quot;: {           &quot;1:0:bytes&quot;: [             163, 118, 101, 102, 1, 115, 201, 144, 237, 239, 117, 79, 163, 127,             173, 149, 33, 211, 90, 111, 82, 50, 146, 101, 80, 30, 22, 112,             153, 164, 19, 150],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 258             }           }         },         &quot;3:25:embedded&quot;: {           &quot;1:0:bytes&quot;: [             11, 171, 219, 11, 212, 240, 116, 80, 201, 168, 63, 75, 188, 168,             236, 220, 108, 157, 49, 226, 17, 158, 105, 188, 44, 180, 67, 196,             36, 31, 46, 149],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 161             }           }         },         &quot;3:26:embedded&quot;: {           &quot;1:0:bytes&quot;: [             233, 52, 162, 8, 5, 80, 139, 147, 172, 124, 252, 124, 75, 146, 182,             53, 109, 29, 220, 18, 52, 120, 53, 83, 255, 138, 143, 39, 194, 61,             163, 196],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 46             }           }         },         &quot;3:27:embedded&quot;: {           &quot;1:0:bytes&quot;: [             82, 61, 18, 192, 210, 218, 157, 38, 65, 86, 39, 30, 138, 32, 248,             114, 10, 148, 210, 251, 130, 23, 54, 116, 104, 206, 141, 102, 169,             191, 5, 233],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 38             }           }         },         &quot;3:28:embedded&quot;: {           &quot;1:0:bytes&quot;: [             47, 251, 190, 153, 104, 136, 52, 169, 146, 57, 29, 6, 153, 167, 3,             209, 5, 30, 100, 215, 240, 47, 96, 103, 114, 164, 131, 197, 69,             112, 4, 86],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 129             }           }         },         &quot;3:29:embedded&quot;: {           &quot;1:0:bytes&quot;: [             93, 192, 14, 10, 50, 59, 229, 14, 140, 132, 196, 12, 219, 149, 215,             224, 125, 6, 139, 61, 6, 144, 255, 96, 5, 37, 216, 91, 137, 135,             41, 24],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 25             }           }         },         &quot;3:30:embedded&quot;: {           &quot;1:0:bytes&quot;: [             10, 2, 142, 220, 179, 122, 72, 30, 24, 127, 28, 65, 31, 28, 73,             126, 198, 238, 62, 156, 228, 87, 163, 9, 38, 116, 106, 48, 25,             152, 159, 179],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 126             }           }         },         &quot;3:31:embedded&quot;: {           &quot;1:0:bytes&quot;: [             81, 12, 199, 94, 25, 57, 186, 111, 6, 142, 64, 231, 47, 149, 116,             21, 53, 34, 89, 104, 13, 47, 184, 121, 38, 4, 206, 64, 179, 247,             20, 137],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 156             }           }         },         &quot;3:32:embedded&quot;: {           &quot;1:0:bytes&quot;: [             171, 95, 184, 6, 120, 203, 22, 123, 134, 45, 181, 225, 90, 186,             233, 210, 8, 55, 43, 48, 169, 47, 10, 200, 161, 216, 118, 98, 61,             215, 124, 135],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 158             }           }         },         &quot;3:33:embedded&quot;: {           &quot;1:0:bytes&quot;: [             198, 24, 206, 30, 88, 136, 6, 128, 184, 53, 150, 247, 25, 79, 56,             60, 81, 143, 13, 123, 107, 35, 86, 162, 122, 7, 216, 27, 27, 249,             19, 47],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 63             }           }         },         &quot;3:34:embedded&quot;: {           &quot;1:0:bytes&quot;: [             230, 93, 108, 31, 194, 183, 82, 253, 244, 34, 6, 1, 7, 69, 80, 147,             131, 89, 158, 29, 236, 115, 92, 196, 44, 178, 254, 238, 121, 246,             113, 68],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 104             }           }         },         &quot;3:35:embedded&quot;: {           &quot;1:0:bytes&quot;: [             147, 204, 39, 33, 249, 108, 184, 249, 48, 14, 165, 120, 66, 9, 137,             134, 5, 48, 106, 48, 105, 140, 144, 159, 125, 179, 124, 71, 158,             117, 131, 210],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 19             }           }         },         &quot;3:36:embedded&quot;: {           &quot;1:0:bytes&quot;: [             89, 255, 33, 10, 191, 177, 183, 189, 245, 158, 109, 205, 126, 163,             104, 71, 57, 35, 124, 14, 130, 83, 188, 213, 129, 96, 249, 122, 39,             106, 120, 195],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 80             }           }         },         &quot;3:37:embedded&quot;: {           &quot;1:0:bytes&quot;: [             105, 92, 221, 66, 185, 181, 94, 19, 30, 129, 85, 145, 196, 110, 14,             125, 216, 251, 11, 186, 138, 194, 135, 243, 1, 172, 32, 128, 159,             113, 84, 87],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 106             }           }         },         &quot;3:38:embedded&quot;: {           &quot;1:0:bytes&quot;: [             157, 183, 189, 153, 219, 24, 43, 100, 235, 0, 132, 119, 215, 108,             236, 153, 22, 241, 252, 211, 231, 116, 33, 113, 123, 237, 138, 202,             213, 153, 43, 88],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 123             }           }         },         &quot;3:39:embedded&quot;: {           &quot;1:0:bytes&quot;: [             146, 229, 59, 43, 145, 105, 186, 201, 142, 14, 158, 90, 5, 28, 230,             197, 134, 18, 13, 219, 74, 209, 84, 214, 210, 54, 70, 1, 56, 31,             218, 54],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 58             }           }         },         &quot;3:40:embedded&quot;: {           &quot;1:0:bytes&quot;: [             220, 242, 61, 79, 217, 248, 85, 208, 85, 163, 104, 176, 88, 2, 114,             108, 131, 202, 204, 53, 110, 75, 239, 56, 136, 67, 248, 247, 12,             63, 191, 12],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 175             }           }         },         &quot;3:41:embedded&quot;: {           &quot;1:0:bytes&quot;: [             71, 68, 176, 15, 211, 98, 59, 27, 187, 227, 14, 91, 53, 120, 129,             50, 108, 107, 103, 66, 252, 217, 178, 77, 184, 147, 91, 90, 19,             111, 128, 53],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 134             }           }         },         &quot;3:42:embedded&quot;: {           &quot;1:0:bytes&quot;: [             201, 51, 220, 118, 187, 125, 87, 7, 246, 185, 155, 52, 220, 28, 12,             90, 48, 123, 202, 135, 233, 18, 3, 137, 10, 222, 223, 206, 111,             196, 255, 235],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 78             }           }         },         &quot;3:43:embedded&quot;: {           &quot;1:0:bytes&quot;: [             144, 123, 192, 106, 90, 212, 71, 96, 188, 5, 46, 223, 100, 12, 58,             99, 141, 127, 17, 14, 181, 44, 129, 224, 57, 134, 157, 34, 245, 78,             63, 60],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 130             }           }         },         &quot;3:44:embedded&quot;: {           &quot;1:0:bytes&quot;: [             21, 33, 78, 136, 74, 131, 86, 48, 170, 99, 67, 146, 12, 42, 119,             249, 70, 198, 221, 127, 241, 175, 42, 0, 12, 66, 71, 172, 59, 17,             27, 228],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 56             }           }         },         &quot;3:45:embedded&quot;: {           &quot;1:0:bytes&quot;: [             45, 178, 69, 5, 175, 52, 44, 90, 190, 94, 100, 180, 238, 153, 189,             58, 248, 181, 189, 134, 151, 53, 68, 244, 110, 252, 95, 156, 34,             248, 195, 141],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 90             }           }         },         &quot;3:46:embedded&quot;: {           &quot;1:0:bytes&quot;: [             91, 22, 185, 64, 72, 46, 38, 48, 20, 244, 241, 114, 1, 64, 97, 227,             136, 54, 169, 201, 133, 11, 182, 88, 154, 1, 142, 138, 24, 112,             166, 16],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 168             }           }         },         &quot;3:47:embedded&quot;: {           &quot;1:0:bytes&quot;: [             27, 146, 39, 199, 46, 197, 241, 106, 223, 55, 129, 191, 176, 123,             232, 151, 44, 180, 31, 142, 137, 201, 21, 52, 94, 201, 111, 170,             169, 93, 55, 131],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 76             }           }         },         &quot;3:48:embedded&quot;: {           &quot;1:0:bytes&quot;: [             193, 124, 22, 3, 213, 34, 101, 149, 246, 22, 8, 15, 68, 75, 165,             76, 38, 150, 247, 77, 2, 140, 154, 249, 2, 205, 73, 232, 130, 104,             69, 159],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 66             }           }         },         &quot;3:49:embedded&quot;: {           &quot;1:0:bytes&quot;: [             5, 193, 68, 1, 180, 40, 46, 163, 192, 112, 174, 29, 81, 223, 190,             244, 3, 142, 55, 211, 8, 2, 192, 194, 30, 20, 55, 42, 41, 68, 125,             127],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 136             }           }         },         &quot;3:50:embedded&quot;: {           &quot;1:0:bytes&quot;: [             83, 24, 100, 126, 8, 186, 138, 33, 95, 127, 89, 36, 2, 106, 137,             183, 242, 92, 104, 95, 122, 198, 162, 7, 255, 251, 123, 96, 225,             149, 63, 111],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 29             }           }         },         &quot;3:51:embedded&quot;: {           &quot;1:0:bytes&quot;: [             194, 142, 59, 4, 54, 96, 70, 2, 123, 91, 9, 252, 170, 235, 182, 98,             37, 143, 10, 210, 186, 173, 103, 165, 149, 47, 171, 59, 201, 209,             250, 66],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 107             }           }         },         &quot;3:52:embedded&quot;: {           &quot;1:0:bytes&quot;: [             99, 76, 68, 203, 167, 245, 211, 142, 143, 66, 189, 190, 254, 178,             37, 12, 61, 195, 104, 178, 165, 186, 113, 253, 215, 1, 169, 54,             129, 175, 212, 70],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 35             }           }         },         &quot;3:53:embedded&quot;: {           &quot;1:0:bytes&quot;: [             92, 240, 11, 68, 247, 15, 103, 182, 210, 65, 243, 114, 153, 230,             135, 241, 160, 60, 31, 140, 166, 85, 107, 163, 252, 119, 167, 35,             195, 207, 141, 18],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 20             }           }         },         &quot;3:54:embedded&quot;: {           &quot;1:0:bytes&quot;: [             52, 163, 30, 105, 147, 104, 203, 234, 85, 78, 118, 91, 238, 243,             81, 81, 183, 127, 166, 173, 2, 33, 111, 160, 93, 35, 4, 128, 97,             231, 134, 223],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 40             }           }         },         &quot;3:55:embedded&quot;: {           &quot;1:0:bytes&quot;: [             15, 45, 48, 189, 170, 219, 22, 126, 243, 217, 200, 106, 165, 165,             120, 108, 150, 111, 105, 150, 85, 8, 120, 155, 210, 148, 32, 198,             145, 49, 115, 16],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 26             }           }         },         &quot;3:56:embedded&quot;: {           &quot;1:0:bytes&quot;: [             27, 250, 155, 159, 74, 227, 46, 27, 185, 4, 150, 8, 184, 21, 240,             149, 45, 244, 81, 252, 85, 159, 50, 201, 247, 73, 42, 60, 127, 194,             238, 197],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 36             }           }         },         &quot;3:57:embedded&quot;: {           &quot;1:0:bytes&quot;: [             108, 3, 162, 113, 54, 72, 115, 18, 228, 40, 151, 67, 169, 226, 153,             58, 138, 252, 59, 67, 200, 53, 128, 160, 233, 148, 198, 100, 2,             236, 64, 76],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 127             }           }         },         &quot;3:58:embedded&quot;: {           &quot;1:0:bytes&quot;: [             49, 49, 177, 65, 227, 61, 198, 32, 171, 82, 125, 100, 152, 38, 31,             134, 206, 214, 41, 7, 221, 160, 238, 165, 79, 21, 214, 112, 178,             61, 11, 9],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 118             }           }         },         &quot;3:59:embedded&quot;: {           &quot;1:0:bytes&quot;: [             20, 105, 162, 168, 235, 1, 24, 192, 39, 86, 5, 217, 99, 35, 205,             139, 169, 93, 95, 58, 226, 208, 58, 100, 127, 228, 120, 31, 18, 41,             125, 188],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 24             }           }         },         &quot;3:60:embedded&quot;: {           &quot;1:0:bytes&quot;: [             34, 182, 106, 248, 174, 109, 85, 82, 233, 185, 158, 189, 109, 180,             122, 16, 147, 191, 174, 75, 237, 181, 28, 126, 154, 187, 117, 74,             222, 183, 40, 42],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 140             }           }         },         &quot;3:61:embedded&quot;: {           &quot;1:0:bytes&quot;: [             26, 231, 159, 209, 255, 47, 66, 73, 25, 159, 150, 146, 159, 24,             180, 147, 187, 127, 158, 136, 140, 26, 16, 163, 73, 22, 192, 248,             72, 201, 123, 70],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 160             }           }         },         &quot;3:62:embedded&quot;: {           &quot;1:0:bytes&quot;: [             203, 229, 192, 110, 98, 83, 18, 72, 171, 75, 44, 16, 145, 234, 53,             21, 92, 92, 252, 180, 147, 252, 134, 164, 131, 200, 84, 216, 173,             57, 215, 64],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 65             }           }         },         &quot;3:63:embedded&quot;: {           &quot;1:0:bytes&quot;: [             27, 37, 29, 129, 135, 60, 21, 21, 130, 47, 246, 84, 230, 29, 106,             8, 164, 126, 104, 33, 221, 10, 59, 198, 65, 59, 120, 175, 206,             115, 159, 192],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 150             }           }         },         &quot;3:64:embedded&quot;: {           &quot;1:0:bytes&quot;: [             247, 70, 240, 58, 235, 170, 216, 77, 82, 133, 127, 229, 69, 233,             41, 152, 29, 26, 140, 211, 60, 199, 111, 14, 228, 194, 135, 49,             207, 62, 100, 88],           &quot;2:1:embedded&quot;: {             &quot;3:0:embedded&quot;: {               &quot;1:0:varint&quot;: 3             }           }         },         &quot;3:65:embedded&quot;: {           &quot;1:0:embedded&quot;: {             &quot;3:0:bytes&quot;: [               240, 189, 141, 59, 178, 229, 21, 207, 150, 181, 18, 214, 123,               229, 94, 213, 47, 55, 0, 35, 94, 176, 10, 239, 63, 91, 177, 203,               181, 232]           },           &quot;2:1:embedded&quot;: {             &quot;3:0:embedded&quot;: {               &quot;1:0:varint&quot;: 2             }           }         }       },       &quot;3:2:embedded&quot;: {         &quot;1:0:varint&quot;: 1,         &quot;2:1:embedded&quot;: {           &quot;1:0:bytes&quot;: [             33, 255, 48, 173, 71, 120, 45, 62, 197, 131, 213, 202, 76, 94, 249,             217, 35, 187, 218, 99, 4, 123, 252, 140, 225, 146, 188, 168, 168,             162, 182, 43]         },         &quot;3:2:embedded&quot;: {           &quot;1:0:bytes&quot;: [             25, 141, 201, 30, 174, 20, 216, 191, 35, 48, 111, 202, 181, 109,             38, 200, 22, 81, 86, 189, 190, 86, 13, 133, 64, 168, 191, 133, 34,             39, 191, 224],           &quot;2:1:embedded&quot;: {             &quot;3:0:embedded&quot;: {               &quot;1:0:varint&quot;: 3             }           }         },         &quot;3:3:embedded&quot;: {           &quot;1:0:bytes&quot;: [             71, 158, 85, 141, 109, 205, 49, 21, 217, 217, 209, 39, 252, 123,             76, 99, 122, 134, 75, 8, 32, 224, 96, 181, 34, 239, 108, 110, 14,             13, 46, 205],           &quot;2:1:embedded&quot;: {             &quot;3:0:embedded&quot;: {               &quot;1:0:varint&quot;: 2             }           }         }       },       &quot;3:3:embedded&quot;: {         &quot;1:0:varint&quot;: 0,         &quot;2:1:embedded&quot;: {           &quot;1:0:bytes&quot;: [             203, 190, 37, 85, 163, 233, 86, 189, 68, 5, 138, 164, 64, 165, 54,             146, 237, 162, 128, 49, 148, 179, 51, 34, 217, 7, 38, 108, 182,             197, 160, 179]         }       },       &quot;3:4:embedded&quot;: {         &quot;1:0:varint&quot;: 0,         &quot;2:1:embedded&quot;: {           &quot;1:0:bytes&quot;: [             163, 159, 42, 53, 128, 115, 90, 161, 149, 19, 157, 15, 58, 113,             122, 238, 204, 104, 91, 216, 78, 131, 30, 240, 110, 166, 106, 159,             237, 125, 147, 82]         },         &quot;3:2:embedded&quot;: {           &quot;1:0:bytes&quot;: [             57, 32, 198, 203, 112, 159, 189, 236, 244, 113, 104, 205, 165,             135, 237, 217, 163, 184, 202, 45, 241, 164, 164, 78, 112, 12, 177,             124, 204, 213, 16, 78],           &quot;2:1:embedded&quot;: {             &quot;3:0:embedded&quot;: {               &quot;1:0:varint&quot;: 3             }           }         },         &quot;3:3:embedded&quot;: {           &quot;1:0:bytes&quot;: [             220, 184, 103, 130, 108, 220, 83, 140, 36, 238, 139, 5, 167, 253,             252, 136, 76, 43, 72, 36, 245, 92, 47, 147, 40, 134, 117, 179, 88,             9, 164, 70],           &quot;2:1:embedded&quot;: {             &quot;3:0:embedded&quot;: {               &quot;1:0:varint&quot;: 2             }           }         }       },       &quot;3:5:embedded&quot;: {         &quot;1:0:varint&quot;: 1,         &quot;2:1:embedded&quot;: {           &quot;1:0:bytes&quot;: [             240, 142, 243, 236, 188, 6, 32, 37, 148, 220, 19, 135, 176, 7, 175,             172, 234, 124, 152, 61, 115, 11, 68, 50, 219, 32, 182, 146, 2, 41,             153, 192]         },         &quot;3:2:embedded&quot;: {           &quot;1:0:bytes&quot;: [             245, 12, 255, 55, 29, 151, 184, 242, 250, 247, 191, 244, 52, 251,             172, 66, 40, 242, 47, 67, 168, 136, 224, 201, 229, 16, 64, 4, 36,             207, 164, 97],           &quot;2:1:embedded&quot;: {             &quot;3:0:embedded&quot;: {               &quot;1:0:varint&quot;: 3             }           }         },         &quot;3:3:embedded&quot;: {           &quot;1:0:bytes&quot;: [             98, 200, 36, 229, 239, 75, 96, 35, 195, 26, 180, 253, 4, 232, 178,             167, 173, 163, 171, 110, 154, 60, 20, 229, 82, 52, 201, 194, 199,             137, 188, 237],           &quot;2:1:embedded&quot;: {             &quot;3:0:embedded&quot;: {               &quot;1:0:varint&quot;: 2             }           }         }       },       &quot;3:6:embedded&quot;: {         &quot;1:0:varint&quot;: 1,         &quot;2:1:embedded&quot;: {           &quot;1:0:bytes&quot;: [             36, 1, 15, 223, 76, 25, 153, 9, 204, 90, 139, 114, 200, 122, 201,             226, 179, 79, 135, 58, 82, 134, 136, 184, 34, 249, 131, 132, 127,             38, 46, 245]         },         &quot;3:2:embedded&quot;: {           &quot;1:0:bytes&quot;: [             110, 242, 238, 199, 145, 159, 168, 178, 187, 136, 71, 7, 156, 155,             102, 157, 218, 30, 147, 63, 91, 89, 147, 79, 29, 133, 10, 154, 77,             107, 15, 23],           &quot;2:1:embedded&quot;: {             &quot;3:0:embedded&quot;: {               &quot;1:0:varint&quot;: 3             }           }         },         &quot;3:3:embedded&quot;: {           &quot;1:0:bytes&quot;: [             193, 203, 71, 244, 30, 18, 158, 188, 15, 77, 73, 13, 22, 120, 82,             107, 224, 130, 68, 135, 58, 123, 59, 135, 29, 86, 232, 139, 54, 74,             77, 121],           &quot;2:1:embedded&quot;: {             &quot;3:0:embedded&quot;: {               &quot;1:0:varint&quot;: 2             }           }         }       },       &quot;3:7:embedded&quot;: {         &quot;1:0:varint&quot;: 0,         &quot;2:1:embedded&quot;: {           &quot;1:0:embedded&quot;: {             &quot;2:0:varint&quot;: 495613890054,             &quot;192224:1:float32&quot;: 4.882061335059751e-12,             &quot;13:2:float64&quot;: -1.0035307849984653e+45,             &quot;14:3:float64&quot;: -9.42824039531738e+194           }         },         &quot;3:2:embedded&quot;: {           &quot;1:0:bytes&quot;: [             176, 193, 111, 217, 103, 210, 40, 38, 174, 253, 210, 197, 138, 118,             79, 56, 223, 186, 161, 214, 205, 215, 175, 9, 245, 199, 58, 188,             87, 17, 112, 187],           &quot;2:1:embedded&quot;: {             &quot;3:0:embedded&quot;: {               &quot;1:0:varint&quot;: 3             }           }         },         &quot;3:3:embedded&quot;: {           &quot;1:0:bytes&quot;: [             233, 74, 153, 41, 23, 225, 3, 244, 202, 119, 170, 143, 9, 6, 210,             63, 125, 169, 131, 143, 182, 92, 221, 250, 202, 54, 145, 84, 30,             120, 18, 91],           &quot;2:1:embedded&quot;: {             &quot;3:0:embedded&quot;: {               &quot;1:0:varint&quot;: 2             }           }         }       },       &quot;3:8:embedded&quot;: {         &quot;1:0:varint&quot;: 1,         &quot;2:1:embedded&quot;: {           &quot;1:0:bytes&quot;: [             168, 15, 228, 127, 125, 117, 127, 138, 147, 171, 112, 68, 159, 126,             29, 136, 159, 179, 53, 127, 49, 203, 4, 114, 246, 31, 236, 30, 138,             177, 114, 180]         },         &quot;3:2:embedded&quot;: {           &quot;1:0:bytes&quot;: [             175, 38, 148, 203, 5, 192, 218, 240, 99, 37, 193, 198, 171, 54,             171, 189, 43, 21, 47, 93, 178, 90, 122, 26, 84, 147, 81, 211, 72,             159, 117, 186],           &quot;2:1:embedded&quot;: {             &quot;1:0:embedded&quot;: {               &quot;1:0:varint&quot;: 120             }           }         },         &quot;3:3:embedded&quot;: {           &quot;1:0:bytes&quot;: [             178, 168, 118, 168, 112, 230, 109, 168, 126, 135, 179, 184, 202,             71, 168, 52, 173, 232, 47, 90, 206, 58, 2, 36, 231, 168, 28, 159,             121, 169, 250, 225],           &quot;2:1:embedded&quot;: {             &quot;1:0:embedded&quot;: {               &quot;1:0:varint&quot;: 160             }           }         },         &quot;3:4:embedded&quot;: {           &quot;1:0:bytes&quot;: [             27, 161, 172, 103, 148, 85, 34, 240, 54, 186, 19, 156, 128, 76,             161, 194, 205, 44, 121, 156, 95, 221, 165, 157, 48, 84, 171, 94,             213, 94, 38, 32],           &quot;2:1:embedded&quot;: {             &quot;1:0:embedded&quot;: {               &quot;1:0:varint&quot;: 240             }           }         },         &quot;3:5:embedded&quot;: {           &quot;1:0:bytes&quot;: [             59, 22, 204, 77, 122, 25, 137, 251, 172, 27, 167, 105, 49, 28, 42,             101, 237, 95, 111, 59, 71, 48, 155, 192, 72, 229, 119, 45, 87, 83,             228, 126],           &quot;2:1:embedded&quot;: {             &quot;1:0:embedded&quot;: {               &quot;1:0:varint&quot;: 320             }           }         },         &quot;3:6:embedded&quot;: {           &quot;1:0:bytes&quot;: [             8, 33, 151, 137, 172, 94, 16, 17, 78, 72, 18, 122, 33, 27, 94, 14,             210, 96, 130, 155, 222, 163, 85, 72, 14, 65, 157, 51, 80, 239, 102,             159],           &quot;2:1:embedded&quot;: {             &quot;1:0:embedded&quot;: {               &quot;1:0:varint&quot;: 480             }           }         },         &quot;3:7:embedded&quot;: {           &quot;1:0:bytes&quot;: [             56, 238, 38, 244, 65, 33, 107, 152, 55, 119, 194, 4, 193, 171, 0,             161, 170, 76, 178, 1, 83, 171, 68, 124, 231, 251, 16, 58, 69, 140,             73, 27],           &quot;2:1:embedded&quot;: {             &quot;1:0:embedded&quot;: {               &quot;1:0:varint&quot;: 640             }           }         },         &quot;3:8:embedded&quot;: {           &quot;1:0:bytes&quot;: [             234, 0, 220, 53, 6, 255, 39, 198, 77, 205, 185, 199, 74, 82, 77,             238, 19, 189, 175, 169, 229, 243, 213, 98, 178, 88, 114, 237, 130,             176, 18, 73],           &quot;2:1:embedded&quot;: {             &quot;1:0:embedded&quot;: {               &quot;1:0:varint&quot;: 213             }           }         },         &quot;3:9:embedded&quot;: {           &quot;1:0:bytes&quot;: [             185, 165, 104, 89, 84, 74, 209, 29, 242, 21, 183, 113, 130, 246,             55, 41, 106, 125, 21, 102, 221, 45, 71, 190, 159, 70, 149, 140, 48,             167, 19, 193],           &quot;2:1:embedded&quot;: {             &quot;5:0:embedded&quot;: {               &quot;1:0:varint&quot;: 40             }           }         },         &quot;3:10:embedded&quot;: {           &quot;1:0:bytes&quot;: [             220, 55, 196, 143, 179, 190, 76, 224, 62, 229, 56, 186, 142, 119,             251, 254, 170, 172, 89, 23, 229, 85, 169, 193, 135, 234, 5, 63, 19,             102, 182, 115],           &quot;2:1:embedded&quot;: {             &quot;3:0:embedded&quot;: {               &quot;1:0:varint&quot;: 3             }           }         },         &quot;3:11:embedded&quot;: {           &quot;1:0:bytes&quot;: [             129, 101, 107, 114, 78, 83, 69, 51, 80, 76, 1, 218, 223, 168, 239,             110, 132, 179, 104, 145, 7, 183, 83, 83, 248, 208, 228, 139, 134,             120, 52, 26],           &quot;2:1:embedded&quot;: {             &quot;3:0:embedded&quot;: {               &quot;1:0:varint&quot;: 2             }           }         }       },       &quot;3:9:embedded&quot;: {         &quot;1:0:varint&quot;: 0,         &quot;2:1:embedded&quot;: {           &quot;1:0:bytes&quot;: [             74, 175, 233, 99, 240, 93, 193, 197, 121, 201, 157, 138, 122, 204,             35, 17, 29, 212, 57, 239, 239, 42, 0, 122, 150, 248, 198, 205, 34,             3, 51, 162]         }       }     }   },   &quot;7:5:varint&quot;: 1,   &quot;8:6:varint&quot;: 2,   &quot;9:7:varint&quot;: 2 }<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u0440\u0435\u0434\u043a\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u043d\u044f\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438: <code>android.hardware.ram.low<\/code>, <code>com.samsung.feature.SAMSUNG_EXPERIENCE<\/code>, <code>com.google.android.apps.photos.PIXEL_2018_PRELOAD<\/code>. \u042d\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u2014 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 <a href=\"https:\/\/developer.android.com\/guide\/topics\/manifest\/uses-feature-element\">\u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<p>  <\/p>\n<p>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 \u0432 \u043f\u0430\u043f\u043a\u0435 <code>\/etc\/sysconfig\/<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"xml\">adb shell cat \/etc\/sysconfig\/pixel_experience_2017.xml  &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;!-- These are configurations that should exist on Google's 2017 and newer Nexus devices. --&gt; &lt;config&gt;     &lt;!-- This is meant to be the canonical feature identifying 2017 and newer Nexus devices. --&gt;     &lt;feature name=&quot;com.google.android.feature.PIXEL_2017_EXPERIENCE&quot; \/&gt; &lt;\/config&gt;  adb shell cat \/etc\/sysconfig\/pixel_2017_exclusive.xml  &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;!-- These are configurations that should exist on Google's 2017 devices (and not newer\/older) --&gt; &lt;config&gt;     &lt;!-- This defines the Photos preload feature for specifically the 2017 Pixel devices. --&gt;     &lt;feature name=&quot;com.google.android.apps.photos.PIXEL_2017_PRELOAD&quot; \/&gt; &lt;\/config&gt;<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043a\u0430\u043c\u0435\u0440\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>android.hardware.camera<\/code> \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/developer.android.com\/reference\/android\/content\/pm\/PackageManager#hasSystemFeature(java.lang.String)\"><em>hasSystemFeature<\/em><\/a> \u043a\u043b\u0430\u0441\u0441\u0430 <em>PackageManager<\/em>. \u041d\u043e \u0437\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u044b \u044d\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0438, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e.<\/p>\n<p>  <\/p>\n<p>\u041c\u043d\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0433\u0430\u0434\u0430\u0442\u044c, \u043d\u0430\u0439\u0442\u0438 \u0438\u043b\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 <em>APK<\/em> \u00abPlay \u041c\u0430\u0440\u043a\u0435\u0442\u00bb. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u0442\u0430\u043c \u0438 \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u041f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e <a href=\"https:\/\/github.com\/avast\/apkverifier\/blob\/master\/signingblock\/frosting.go#L51\">\u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/a> \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 <a href=\"https:\/\/github.com\/avast\/apkverifier\">\u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043e\u0442 Avast<\/a> \u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 ProtoBuf \u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 <code>com.google.android.apps.photos.PIXEL_2018_PRELOAD<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\/\u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"javascript\">1 &lt;varint&gt; = 1  \/\/ frosting versions? 2 &lt;varint&gt; = 0 3 &lt;varint&gt; = 1 4 &lt;varint&gt; = 1541545744578  \/\/ Timestamp of the frosting creation? 5 &lt;chunk&gt; = message:     8 &lt;chunk&gt; = message:         1 &lt;chunk&gt; = message(1 &lt;varint&gt; = 22)  \/\/ minSdkLevel?         6 &lt;varint&gt; = 2     9 &lt;chunk&gt; = message:         1 &lt;chunk&gt; = message(1 &lt;varint&gt; = 2266, 4 &lt;varint&gt; = 2)  \/\/ versionCode         2 &lt;chunk&gt; = message(1 &lt;varint&gt; = 50003, 4 &lt;varint&gt; = 4)     10 &lt;chunk&gt; = message:         1 &lt;chunk&gt; = bytes (30)  \/\/ ?? only last byte changes across apks             0000   FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF             0010   FF FE FF FF FF FF FF FF FF FF FF FF FF 3F             '.............................?'         3 &lt;chunk&gt; = message:             1 &lt;chunk&gt; = bytes (32)  \/\/ sha256 of something?                 0000   16 F8 22 A6 93 26 89 34 D8 2A 88 BB 8C AD B6 68                 0010   2C EB 77 A8 AA E4 5F AA F9 3C CA 63 44 2A A4 B9                 '..&quot;..&amp;.4.*.....h,.w..._..&lt;.cD*..'             2 &lt;varint&gt; = 20<\/code><\/pre>\n<p>  <\/p>\n<p>\u042f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0441\u0447\u0435\u0442.<\/p>\n<p>  <\/p>\n<p>1) \u041f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u0441\u0442\u0440\u043e\u043a\u0438 <code>com.google.android.apps.photos.PIXEL_2018_PRELOAD<\/code>: \u043b\u0435\u0433\u043a\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0421\u043a\u0430\u0447\u0430\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <a href=\"https:\/\/developers.google.com\/android\/images\">\u043e\u0431\u0440\u0430\u0437\u043e\u0432<\/a>, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 Google, \u0438 \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a, \u043d\u043e \u0438 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u043e \u0431\u043b\u043e\u043a Frosting.<\/p>\n<p>  <\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u044d\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043d\u0430 \u043e\u0431\u0440\u0430\u0437\u0435 <a href=\"https:\/\/dl.google.com\/dl\/android\/aosp\/walleye-pq3a.190801.002-factory-f9a5e230.zip\">walleye for Pixel 2 9.0.0 (PQ3A.190801.002, Aug 2019)<\/a>. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043e\u0431\u0440\u0430\u0437 \u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043c, \u0447\u0442\u043e \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 187 APK-\u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a Frosting. \u0415\u0441\u043b\u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0431\u043b\u043e\u043a Frosting \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u0441\u044f \u0443 33 \u0438\u0437 264 APK-\u0444\u0430\u0439\u043b\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0443 \u043f\u044f\u0442\u0438 \u0438\u0437 \u043d\u0438\u0445 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/www.apklab.io\/apk.html?hash=cbca9dca5191ddd49f6b9101ee7dabd8ddc1eea2b049425ed0c278ef379d669e\">com.google.android.as:<\/a><br \/> \n<ul>\n<li>com.google.android.feature.DPS<\/li>\n<li>com.google.android.feature.PIXEL_EXPERIENCE<\/li>\n<li>com.google.android.feature.PIXEL_2017_EXPERIENCE<\/li>\n<li>com.google.android.feature.PIXEL_2019_EXPERIENCE<\/li>\n<li>com.google.android.feature.ANDROID_ONE_EXPERIENCE<\/li>\n<li>com.google.android.feature.PIXEL_2018_EXPERIENCE<\/li>\n<li>com.google.android.feature.PIXEL_2020_EXPERIENCE<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.google.android.inputmethod.latin\">google.android.inputmethod.latin<\/a>:<br \/> \n<ul>\n<li>android.hardware.ram.low<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.google.android.dialer\">google.android.dialer<\/a>:<br \/> \n<ul>\n<li>com.google.android.apps.dialer.GO_EXPERIENCE<\/li>\n<li>com.google.android.feature.PIXEL_2020_EXPERIENCE<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.google.android.GoogleCamera\">google.android.GoogleCamera<\/a>:<br \/> \n<ul>\n<li>android.hardware.camera.level.full<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.google.android.apps.photos\">google.android.apps.photos<\/a>:<br \/> \n<ul>\n<li>com.google.android.feature.PIXEL_2020_EXPERIENCE<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u043a\u0443\u0434\u0430 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043c \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u0438 \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"bash\">adb shell pm list features  feature:reqGlEsVersion=0x30002 feature:android.hardware.audio.low_latency feature:android.hardware.audio.output feature:android.hardware.audio.pro feature:android.hardware.bluetooth feature:android.hardware.bluetooth_le feature:android.hardware.camera feature:android.hardware.camera.any feature:android.hardware.camera.ar feature:android.hardware.camera.autofocus feature:android.hardware.camera.capability.manual_post_processing feature:android.hardware.camera.capability.manual_sensor feature:android.hardware.camera.capability.raw feature:android.hardware.camera.flash feature:android.hardware.camera.front feature:android.hardware.camera.level.full feature:android.hardware.faketouch feature:android.hardware.fingerprint feature:android.hardware.location feature:android.hardware.location.gps feature:android.hardware.location.network feature:android.hardware.microphone feature:android.hardware.nfc feature:android.hardware.nfc.any feature:android.hardware.nfc.hce feature:android.hardware.nfc.hcef feature:android.hardware.opengles.aep feature:android.hardware.ram.normal feature:android.hardware.screen.landscape feature:android.hardware.screen.portrait feature:android.hardware.sensor.accelerometer feature:android.hardware.sensor.assist feature:android.hardware.sensor.barometer feature:android.hardware.sensor.compass feature:android.hardware.sensor.gyroscope feature:android.hardware.sensor.hifi_sensors feature:android.hardware.sensor.light feature:android.hardware.sensor.proximity feature:android.hardware.sensor.stepcounter feature:android.hardware.sensor.stepdetector feature:android.hardware.telephony feature:android.hardware.telephony.carrierlock feature:android.hardware.telephony.cdma feature:android.hardware.telephony.euicc feature:android.hardware.telephony.gsm feature:android.hardware.touchscreen feature:android.hardware.touchscreen.multitouch feature:android.hardware.touchscreen.multitouch.distinct feature:android.hardware.touchscreen.multitouch.jazzhand feature:android.hardware.usb.accessory feature:android.hardware.usb.host feature:android.hardware.vr.headtracking feature:android.hardware.vr.high_performance feature:android.hardware.vulkan.compute feature:android.hardware.vulkan.level feature:android.hardware.vulkan.version=4198400 feature:android.hardware.wifi feature:android.hardware.wifi.aware feature:android.hardware.wifi.direct feature:android.hardware.wifi.passpoint feature:android.hardware.wifi.rtt feature:android.software.activities_on_secondary_displays feature:android.software.app_widgets feature:android.software.autofill feature:android.software.backup feature:android.software.cant_save_state feature:android.software.companion_device_setup feature:android.software.connectionservice feature:android.software.cts feature:android.software.device_admin feature:android.software.device_id_attestation feature:android.software.file_based_encryption feature:android.software.home_screen feature:android.software.input_methods feature:android.software.live_wallpaper feature:android.software.managed_users feature:android.software.midi feature:android.software.picture_in_picture feature:android.software.print feature:android.software.securely_removes_users feature:android.software.sip feature:android.software.sip.voip feature:android.software.verified_boot feature:android.software.voice_recognizers feature:android.software.vr.mode feature:android.software.webview feature:com.google.android.apps.dialer.SUPPORTED feature:com.google.android.apps.photos.PIXEL_2017_PRELOAD feature:com.google.android.feature.EXCHANGE_6_2 feature:com.google.android.feature.GOOGLE_BUILD feature:com.google.android.feature.GOOGLE_EXPERIENCE feature:com.google.android.feature.PIXEL_2017_EXPERIENCE feature:com.google.android.feature.PIXEL_EXPERIENCE feature:com.google.android.feature.TURBO_PRELOAD feature:com.google.android.feature.WELLBEING feature:com.google.android.feature.ZERO_TOUCH feature:com.google.hardware.camera.easel feature:com.verizon.hardware.telephony.ehrpd feature:com.verizon.hardware.telephony.lte<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>2) \u0421 <strong>frosting versions<\/strong> \u044f \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0435\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043e\u0442 1. \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u043e\u0441\u044c, \u2013\u2013 26.<\/p>\n<p>  <\/p>\n<p>3) \u0421 <strong>timestamp of the frosting creation<\/strong> \u044f \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0435\u043d: \u044f \u043f\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u043b \u0437\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u0441 \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0442\u0435\u0442. \u041e\u043d\u043e \u0441\u043a\u0430\u0447\u0435\u0442 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c.<\/p>\n<p>  <\/p>\n<p>4) <strong>MinSdkLevel<\/strong> \u0438 <strong>VersionCode<\/strong> \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p>  <\/p>\n<h2 id=\"zaklyuchenie\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<p>\u0418\u0442\u0430\u043a, \u0431\u043b\u043e\u043a Frosting \u0432 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u043b\u0441\u044f \u043b\u0438 \u0444\u0430\u0439\u043b \u0447\u0435\u0440\u0435\u0437 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0433\u0430\u0437\u0438\u043d. \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u044b \u0438\u0437 \u044d\u0442\u043e\u0439 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>  <\/p>\n<p>\u041b\u043e\u0432\u0438\u0442\u0435 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u043e\u0442\u0447\u0435\u0442\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b <a href=\"https:\/\/www.apklab.io\/\">ApkLab<\/a>:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/xh\/tw\/kd\/xhtwkddoecbpcstaknl4m13fxik.png\"><\/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\/company\/bizone\/blog\/531712\/\"> https:\/\/habr.com\/ru\/company\/bizone\/blog\/531712\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/lw\/qw\/zh\/lwqwzh_toq_jmkgmzqu_7pqog3c.jpeg\"><\/p>\n<p>  <\/p>\n<p>\u0410\u0432\u0442\u043e\u0440: <a href=\"https:\/\/github.com\/sc07kvm\">\u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0438\u043d \u041c\u043e\u043b\u043e\u0434\u044f\u043a\u043e\u0432<\/a><\/p>\n<p>  <\/p>\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0444\u0430\u0439\u043b\u0430 \u2014 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u0440 \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439, \u0442\u0430\u0439\u043d\u0430\u043c\u0438 \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u0440\u043a\u043e\u043c \u0443\u0440\u043e\u0434\u043e\u0432, \u0433\u0434\u0435 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u043a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432 \u043d\u0435\u0439 \u043f\u043e\u043a\u043e\u043f\u0430\u0442\u044c\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e.<\/p>\n<p>  <\/p>\n<p>\u042f \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u0443 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c APK-\u0444\u0430\u0439\u043b\u043e\u0432 \u2014 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0441 \u043e\u0441\u043e\u0431\u044b\u043c \u0431\u043b\u043e\u043a\u043e\u043c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445, <strong>Frosting<\/strong>. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u043b\u0441\u044f \u043b\u0438 \u0444\u0430\u0439\u043b \u0447\u0435\u0440\u0435\u0437 Google Play. \u042d\u0442\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043d\u044b\u0445 \u0432\u0435\u043d\u0434\u043e\u0440\u043e\u0432 \u0438 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446 \u043f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043e\u0432. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043a\u0440\u0438\u043c\u0438\u043d\u0430\u043b\u0438\u0441\u0442\u0430\u043c \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0444\u0430\u0439\u043b\u0430. <\/p>\n<p>  <\/p>\n<p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0442. \u0423\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u0434\u0435\u043b <a href=\"https:\/\/android-developers.googleblog.com\/2017\/12\/improving-app-security-and-performance.html\">Security metadata in early<\/a> 2018 \u0432 <em>Android Developers Blog<\/em> \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0443 Avast, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u044c. \u042f \u0440\u0435\u0448\u0438\u043b \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u044d\u0442\u0443 \u0448\u0442\u0443\u043a\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Avast \u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0438 Frosting-\u0431\u043b\u043e\u043a\u0430 \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-314727","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/314727","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=314727"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/314727\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=314727"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=314727"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=314727"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}