惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
D
Docker
V
Vulnerabilities – Threatpost
T
Tor Project blog
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The Last Watchdog
The Last Watchdog
PCI Perspectives
PCI Perspectives
J
Java Code Geeks
罗磊的独立博客
S
Security @ Cisco Blogs
L
LangChain Blog
博客园 - 叶小钗
E
Exploit-DB.com RSS Feed
AWS News Blog
AWS News Blog
Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Threat Research - Cisco Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
I
Intezer
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Vercel News
Vercel News
Know Your Adversary
Know Your Adversary
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
L
Lohrmann on Cybersecurity
D
DataBreaches.Net
Latest news
Latest news
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
T
Threatpost
C
Check Point Blog
Microsoft Azure Blog
Microsoft Azure Blog
Help Net Security
Help Net Security
Last Week in AI
Last Week in AI
T
Tenable Blog
小众软件
小众软件
T
Troy Hunt's Blog
MongoDB | Blog
MongoDB | Blog
Simon Willison's Weblog
Simon Willison's Weblog
TaoSecurity Blog
TaoSecurity Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
云风的 BLOG
云风的 BLOG
Cloudbric
Cloudbric
Google DeepMind News
Google DeepMind News
S
Securelist
GbyAI
GbyAI
The Hacker News
The Hacker News
W
WeLiveSecurity

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Полная доказательная база аудита мессенджера MAX
3ntr0py · 2026-06-15 · via Все публикации подряд на Хабре

Средний

20 мин

0

Как проверить самостоятельно

1. Скачать APK мессенджера MAX
2. Открыть в JADX (jadx-gui)
3. Найти указанные ниже пакеты и классы
4. Убедиться в каждой строке

НАХОДКА 1: MyTracker — массовый сбор данных

Пакет: com.my.tracker

Класс: com.my.tracker.MyTrackerConfig

Файл: classes2.dex

package com.p006my.tracker;

import android.content.pm.PackageInfo;
import com.p006my.tracker.config.AntiFraudConfig;
import com.p006my.tracker.core.Tracer;
import com.p006my.tracker.core.TrackerConfig;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List;
import java.util.concurrent.Executor;
import p000.a1b;

public final class MyTrackerConfig {

    private final TrackerConfig f9351a;

    public interface InstalledPackagesProvider {
        List<PackageInfo> getInstalledPackages();
    }

    @Retention(RetentionPolicy.SOURCE)
    public @interface LocationTrackingMode {
        public static final int ACTIVE = 2;
        public static final int CACHED = 1;
        public static final int NONE = 0;
    }

    @FunctionalInterface
    public interface Logger {
        void log(int i, String str, Throwable th);
    }

    public interface OkHttpClientProvider {
        a1b getOkHttpClient();
    }

    private MyTrackerConfig(TrackerConfig trackerConfig) {
        this.f9351a = trackerConfig;
    }

    public static MyTrackerConfig m4526a(TrackerConfig trackerConfig) {
        return new MyTrackerConfig(trackerConfig);
    }

    public AntiFraudConfig getAntiFraudConfig() {
        return this.f9351a.getAntiFraudConfig();
    }

    public String getApkPreinstallParams() {
        return this.f9351a.getApkPreinstallParams();
    }

    public int getBufferingPeriod() {
        return this.f9351a.getBufferingPeriod();
    }

    public int getForcingPeriod() {
        return this.f9351a.getForcingPeriod();
    }

    public String getId() {
        return this.f9351a.getId();
    }

    public int getLaunchTimeout() {
        return this.f9351a.getLaunchTimeout();
    }

    public int getLocationTrackingMode() {
        return this.f9351a.getLocationTrackingMode();
    }

    @Deprecated
    public String getVendorAppPackage() {
        return this.f9351a.getVendorAppPackage();
    }

    public boolean isAutotrackingPurchaseEnabled() {
        return this.f9351a.isAutotrackingPurchaseEnabled();
    }

    public boolean isKidMode() {
        return this.f9351a.isKidMode();
    }

    public boolean isTrackingEnvironmentEnabled() {
        return this.f9351a.isTrackingEnvironmentEnabled();
    }

    public boolean isTrackingLaunchEnabled() {
        return this.f9351a.isTrackingLaunchEnabled();
    }

    public boolean isTrackingPreinstallEnabled() {
        return this.f9351a.isTrackingPreinstallEnabled();
    }

    public boolean isTrackingPreinstallThirdPartyEnabled() {
        return this.f9351a.isTrackingPreinstallThirdPartyEnabled();
    }

    public void setAntiFraudConfig(AntiFraudConfig antiFraudConfig) {
        this.f9351a.setAntiFraudConfig(antiFraudConfig);
    }

    public MyTrackerConfig setApkPreinstallParams(String str) {
        this.f9351a.setApkPreinstallParams(str);
        return this;
    }

    public MyTrackerConfig setAutotrackingPurchaseEnabled(boolean z) {
        this.f9351a.setAutotrackingPurchaseEnabled(z);
        return this;
    }

    public MyTrackerConfig setBackgroundExecutor(Executor executor) {
        this.f9351a.setBackgroundExecutors(executor);
        return this;
    }

    public MyTrackerConfig setBufferingPeriod(int i) {
        this.f9351a.setBufferingPeriod(i);
        return this;
    }

    @Deprecated
    public MyTrackerConfig setDefaultVendorAppPackage() {
        this.f9351a.setDefaultVendorAppPackage();
        return this;
    }

    public MyTrackerConfig setForcingPeriod(int i) {
        this.f9351a.setForcingPeriod(i);
        return this;
    }

    public MyTrackerConfig setInstalledPackagesProvider(
            InstalledPackagesProvider installedPackagesProvider) {
        this.f9351a.setInstalledPackagesProvider(installedPackagesProvider);
        return this;
    }

    public MyTrackerConfig setKidMode(boolean z) {
        this.f9351a.setKidMode(z);
        return this;
    }

    public MyTrackerConfig setLaunchTimeout(int i) {
        this.f9351a.setLaunchTimeout(i);
        return this;
    }

    public MyTrackerConfig setLocationTrackingMode(int i) {
        this.f9351a.setLocationTrackingMode(i);
        return this;
    }

    public MyTrackerConfig setLogger(Logger logger) {
        Tracer.setLogger(logger);
        return this;
    }

    public MyTrackerConfig setOkHttpClientProvider(
            OkHttpClientProvider okHttpClientProvider) {
        this.f9351a.setOkHttpClientProvider(okHttpClientProvider);
        return this;
    }

    public MyTrackerConfig setProxyHost(String str) {
        this.f9351a.setProxyHost(str);
        return this;
    }

    public MyTrackerConfig setTrackingEnvironmentEnabled(boolean z) {
        this.f9351a.setTrackingEnvironmentEnabled(z);
        return this;
    }

    public MyTrackerConfig setTrackingLaunchEnabled(boolean z) {
        this.f9351a.setTrackingLaunchEnabled(z);
        return this;
    }

    public MyTrackerConfig setTrackingPreinstallEnabled(boolean z) {
        this.f9351a.setTrackingPreinstallEnabled(z);
        return this;
    }

    public MyTrackerConfig setTrackingPreinstallThirdPartyEnabled(boolean z) {
        this.f9351a.setTrackingPreinstallThirdPartyEnabled(z);
        return this;
    }

    @Deprecated
    public MyTrackerConfig setVendorAppPackage(String str) {
        this.f9351a.setVendorAppPackage(str);
        return this;
    }
}

Что искать в JADX:

Пакет: com.my.tracker
Класс: MyTrackerConfig
Вложенный интерфейс: InstalledPackagesProvider
Вложенная аннотация: LocationTrackingMode
Метод: setInstalledPackagesProvider()
Метод: setLocationTrackingMode()

Рефлексивная загрузка (искать в обфусцированных классах):

m4518a("com.my.tracker.antifraud.MyTrackerAntifraud", classLoader);
m4518a("com.my.tracker.environment.MyTrackerEnvironment", classLoader);

Доказывает:

1. Сканирование ВСЕХ установленных приложений (PackageInfo)
2. GPS-трекинг в трёх режимах (ACTIVE/CACHED/NONE)
3. Рефлексивная загрузка — модули включаются С СЕРВЕРА
4. Антифрод-модуль собирает данные об устройстве
5. Трекинг окружения (TrackingEnvironment)
6. Трекинг преинсталлов

НАХОДКА 2: Ежедневный аудит разрешений

Пакет: ru.ok.messages.analytics

Класс: ru.ok.messages.analytics.DailyAnalyticsWorker

Файл: classes.dex

package ru.p027ok.messages.analytics;

import android.content.Context;
import android.os.Build;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
import kotlin.Metadata;
import p000.a4c;
import p000.aj8;
import p000.ci8;
import p000.cj0;
import p000.jo8;
import p000.kv8;
import p000.q98;
import p000.qt6;
import p000.x3c;
import p000.zi8;

@Metadata(d2 = {
    "Lru/ok/messages/analytics/DailyAnalyticsWorker;",
    "Landroidx/work/Worker;",
    "Landroid/content/Context;",
    "context",
    "Landroidx/work/WorkerParameters;",
    "workerParams",
    "Lx3c;",
    "permissionStats",
    "<init>",
    "(Landroid/content/Context;Landroidx/work/WorkerParameters;Lx3c;)V",
    "tamtam-app_release"
})
public final class DailyAnalyticsWorker extends Worker {

    public final x3c f58892f;

    public DailyAnalyticsWorker(Context context,
            WorkerParameters workerParameters, x3c x3cVar) {
        super(context, workerParameters);
        this.f58892f = x3cVar;
    }

    @Override
    public final aj8 mo1430g() {
        WorkerParameters workerParameters = this.f5455b;
        q98.m19893y("ru.ok.messages.analytics.DailyAnalyticsWorker",
            "work " + workerParameters.f2835a + " started", new Object[0]);
        x3c x3cVar = this.f58892f;
        x3cVar.getClass();
        kv8 kv8Var = new kv8();
        ci8 ci8VarM4002j = cj0.m4002j();
        int i = Build.VERSION.SDK_INT;

        // ПУШИ (Android 13+)
        if (i >= 33) {
            kv8 kv8Var2 = new kv8();
            kv8Var2.put("pType", "push");
            kv8Var2.put("pStatus", x3c.m25921b(x3cVar.f75484c));
            ci8VarM4002j.add(kv8Var2.m12885b());
        }

        // КОНТАКТЫ
        kv8 kv8Var3 = new kv8();
        kv8Var3.put("pType", "contacts");
        kv8Var3.put("pStatus", x3c.m25921b(x3cVar.f75485d));
        ci8VarM4002j.add(kv8Var3.m12885b());

        // ФАЙЛОВАЯ СИСТЕМА
        kv8 kv8Var4 = new kv8();
        kv8Var4.put("pType", "fsi");
        qt6 qt6Var = x3cVar.f75491j;
        if (qt6Var != null) {
            kv8Var4.put("pStatus", x3c.m25921b(qt6Var));
        }
        ci8VarM4002j.add(kv8Var4.m12885b());

        // ГАЛЕРЕЯ
        kv8 kv8Var5 = new kv8();
        kv8Var5.put("pType", "gallery");
        a4c a4cVar = x3cVar.f75486e;
        kv8Var5.put("pStatus", i < 34
            ? x3c.m25921b(a4cVar)
            : a4cVar.m203l()
                ? "allowed"
                : x3cVar.f75487f.m203l()
                    ? "partial"
                    : "denied");
        ci8VarM4002j.add(kv8Var5.m12885b());

        // КАМЕРА
        kv8 kv8Var6 = new kv8();
        kv8Var6.put("pType", "camera");
        kv8Var6.put("pStatus", x3c.m25921b(x3cVar.f75488g));
        ci8VarM4002j.add(kv8Var6.m12885b());

        // МИКРОФОН
        kv8 kv8Var7 = new kv8();
        kv8Var7.put("pType", "microphone");
        kv8Var7.put("pStatus", x3c.m25921b(x3cVar.f75489h));
        ci8VarM4002j.add(kv8Var7.m12885b());

        // ГЕОЛОКАЦИЯ
        kv8 kv8Var8 = new kv8();
        kv8Var8.put("pType", "geo");
        kv8Var8.put("pStatus", x3c.m25921b(x3cVar.f75490i));
        ci8VarM4002j.add(kv8Var8.m12885b());

        // ОТПРАВКА НА СЕРВЕР
        kv8Var.put("permissions", cj0.m3997b(ci8VarM4002j));
        jo8.m11769h(
            (jo8) x3cVar.f75482a.getValue(),
            "PERMISSION",
            "permission_status",
            kv8Var.m12885b(),
            8);

        q98.m19893y("ru.ok.messages.analytics.DailyAnalyticsWorker",
            "work " + workerParameters.f2835a + " finished",
            new Object[0]);
        return new zi8();
    }
}

Что искать в JADX:

Пакет: ru.ok.messages.analytics
Класс: DailyAnalyticsWorker
Родитель: androidx.work.Worker
Метод: mo1430g() (переименованный doWork)
Строки: "pType", "push", "contacts", "fsi", "gallery",
         "camera", "microphone", "geo"
Строки: "PERMISSION", "permission_status"
Строки: "allowed", "partial", "denied"
Метаданные: "tamtam-app_release"

Доказывает:

1. КАЖДЫЙ ДЕНЬ проверяет статус 7 разрешений
2. Камера — можно ли активировать
3. Микрофон — можно ли записывать
4. Геолокация — можно ли отслеживать
5. Пуши — можно ли разбудить устройство удалённо
6. Контакты — есть ли доступ к адресной книге
7. Галерея — есть ли доступ к фото/видео
8. Файловая система — есть ли доступ к файлам
9. Результат отправляется на сервер тегом "PERMISSION"

НАХОДКА 3: SampleUploadWorker — эксфильтрация на внешний сервер

Пакет: ru.ok.tracer.upload

Класс: ru.ok.tracer.upload.SampleUploadWorker

Файл: classes3.dex

package ru.p027ok.tracer.upload;

import android.content.Context;
import android.net.Uri;
import android.util.Log;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import kotlin.Metadata;
import org.json.JSONException;
import org.json.JSONObject;
import p000.aj8;
import p000.at6;
import p000.av0;
import p000.b9h;
import p000.c40;
import p000.dpa;
import p000.el3;
import p000.fn4;
import p000.gn8;
import p000.hjg;
import p000.jod;
import p000.k3f;
import p000.kv8;
import p000.lg7;
import p000.mw8;
import p000.nnj;
import p000.qf4;
import p000.r8g;
import p000.rpd;
import p000.s96;
import p000.tf7;
import p000.uh3;
import p000.vd9;
import p000.vff;
import p000.wf7;
import p000.xyg;
import p000.zf7;
import p000.zi8;

@Metadata(d2 = {
    "Lru/ok/tracer/upload/SampleUploadWorker;",
    "Landroidx/work/Worker;",
    "Landroid/content/Context;",
    "context",
    "Landroidx/work/WorkerParameters;",
    "workerParams",
    "<init>",
    "(Landroid/content/Context;Landroidx/work/WorkerParameters;)V",
    "tracer-sample-upload_release"
})
public final class SampleUploadWorker extends Worker {

    public SampleUploadWorker(Context context,
            WorkerParameters workerParameters) {
        super(context, workerParameters);
    }

    @Override
    public final aj8 mo1430g() {
        File file;
        fn4 fn4Var;
        Context context = this.f5454a;
        WorkerParameters workerParameters = this.f5455b;
        File file2 = null;
        try {
            fn4 fn4Var2 = workerParameters.f2836b;
            fn4Var = workerParameters.f2836b;
            file = new File(fn4Var2.m7760e("tracer_sample_file_path"));
            try {
            } catch (Exception unused) {
                file2 = file;
                if (file2 != null && file2.exists()) {
                    file2.delete();
                }
                return new zi8();
            }
        } catch (Exception unused2) {
        }
        if (!file.exists()) {
            file.getPath();
            return new zi8();
        }
        long jM7759d = fn4Var.m7759d("tracer_sample_file_size", -1L);
        Long lValueOf = jM7759d > 0 ? Long.valueOf(jM7759d) : null;
        String strM7760e = fn4Var.m7760e("tracer_sample_file_name");

        // ПРОВЕРКА ВЕРСИИ — файл привязан к конкретной сборке
        if (b9h.m2409E(uh3.m23787w(
                context.getPackageManager(),
                context.getPackageName()))
                != fn4Var.m7759d("tracer_version_code", 0L)) {
            file.delete();
            return new zi8();
        }

        String strM21689h = m21689h(lValueOf, strM7760e);
        if (strM21689h != null) {
            m21690i(file, strM21689h);
        }
        return new zi8();
    }

    // МЕТОД h — инициализация загрузки, получение uploadToken
    public final String m21689h(Long l, String str)
            throws JSONException {
        xyg xygVar = xyg.f77936a;
        String strM26601a = xyg.m26601a();
        if (strM26601a == null) {
            return null;
        }
        kv8 kv8Var = new kv8();
        WorkerParameters workerParameters = this.f5455b;
        fn4 fn4Var = workerParameters.f2836b;
        fn4 fn4Var2 = workerParameters.f2836b;

        // ПРОИЗВОЛЬНЫЕ КЛЮЧИ С СЕРВЕРА
        Object obj = fn4Var.f18611a.get("tracer_custom_properties_keys");
        String[] strArr = obj instanceof String[]
            ? (String[]) obj : null;
        if (strArr == null) {
            strArr = new String[0];
        }
        for (String str2 : strArr) {
            String strM7760e = fn4Var2.m7760e(str2);
            if (strM7760e != null) {
                kv8Var.put(str2, strM7760e);
            }
        }

        kv8 kv8VarM12885b = kv8Var.m12885b();
        xyg xygVar2 = xyg.f77936a;
        k3f k3fVar = xyg.f77940e;
        if (k3fVar == null) {
            k3fVar = null;
        }
        k3fVar.m12204b();
        hjg hjgVarM9759a = k3fVar.f31842f;
        if (hjgVarM9759a == null) {
            hjgVarM9759a = null;
        }
        if (!kv8VarM12885b.isEmpty()) {
            hjgVarM9759a = hjg.m9759a(hjgVarM9759a, false,
                mw8.m14581C0(kv8VarM12885b, hjgVarM9759a.f24401n),
                24575);
        }
        hjgVarM9759a.getClass();

        // JSON С МЕТАДАННЫМИ
        JSONObject jSONObjectM8818W = gn8.m8818W(
            hjgVarM9759a.m9760b(new Date()));
        jSONObjectM8818W.put("feature",
            workerParameters.f2836b.m7760e("tracer_feature_name"));
        jSONObjectM8818W.put("sampleSize", l);
        jSONObjectM8818W.put("sampleFileName", str);

        if (fn4Var2.m7757b("tracer_has_attr1", false)) {
            jSONObjectM8818W.put("attr1",
                fn4Var2.m7759d("tracer_attr1", 0L));
        }
        if (fn4Var2.m7757b("tracer_has_attr2", false)) {
            jSONObjectM8818W.put("attr2",
                fn4Var2.m7759d("tracer_attr2", 0L));
        }
        if (workerParameters.f2836b.m7760e("tracer_feature_tag")
                != null) {
            jSONObjectM8818W.put("tag",
                workerParameters.f2836b.m7760e("tracer_feature_tag"));
        }

        // ЭНДПОИНТ 1: ИНИЦИАЛИЗАЦИЯ ЗАГРУЗКИ
        c40 c40Var = new c40(
            Uri.parse("https://sdk-api.apptracer.ru")
                .buildUpon()
                .appendEncodedPath("api/sample/initUpload")
                .appendQueryParameter("sampleToken", strM26601a)
                .toString(),
            dpa.m5840m("application/json; charset=utf-8",
                jSONObjectM8818W.toString()));

        zf7 zf7VarM13339b = ((lg7) xyg.f77943h.getValue())
            .m13339b(c40Var);
        try {
            JSONObject jSONObject = new JSONObject(
                r8g.m20782e0(zf7VarM13339b.f82245c.f29857b));
            dpa.m5847u(jSONObject,
                workerParameters.f2836b.m7760e("tracer_feature_name"),
                workerParameters.f2836b.m7760e("tracer_feature_tag"));
            if (zf7VarM13339b.f82243a != 200) {
                return null;
            }
            return jSONObject.getString("uploadToken");
        } finally {
        }
    }

    // МЕТОД i — загрузка файла
    public final void m21690i(File file, String str)
            throws IOException {
        String str2;
        WorkerParameters workerParameters = this.f5455b;

        // GZIP СЖАТИЕ (по умолчанию ВКЛЮЧЕНО)
        if (workerParameters.f2836b.m7757b(
                "tracer_feature_uze_gzip", true)) {
            String string = workerParameters.f2835a.toString();
            String strM1683V = at6.m1683V();
            Context context = this.f5454a;
            if (strM1683V.equals(context.getPackageName())) {
                str2 = "tracer";
            } else {
                str2 = "tracer-" + ((Object) Uri.encode(
                    r8g.m20785h0(strM1683V, ':', '-', false)));
            }
            File file2 = new File(context.getCacheDir(), str2);
            vff.m24694i0(file2);
            File fileM22132h1 = s96.m22132h1(file2,
                string.concat(".tmp"));
            try {
                nnj.m15345a(file, fileM22132h1);
                file.length();
                fileM22132h1.length();
                file.delete();
                file = fileM22132h1;
            } catch (IOException e) {
                fileM22132h1.delete();
                throw e;
            }
        } else {
            file.length();
        }

        // ЭНДПОИНТ 2: ЗАГРУЗКА ФАЙЛА
        String string2 = Uri.parse("https://sdk-api.apptracer.ru")
            .buildUpon()
            .appendEncodedPath("api/sample/upload")
            .appendQueryParameter("uploadToken", str)
            .toString();

        // MULTIPART UPLOAD
        ArrayList arrayList = new ArrayList();
        arrayList.add(new wf7(
            "file",
            "sample",
            "application/octet-stream",
            new av0(file)));

        try {
            zf7 zf7VarM13339b = ((lg7) xyg.f77943h.getValue())
                .m13339b(new c40(string2, new tf7(
                    String.format("------------%016x",
                        Arrays.copyOf(new Object[]{
                            Long.valueOf(jod.f30783b.mo10797f())
                        }, 1)),
                    el3.m6833c1(arrayList))));
            try {
                int i = zf7VarM13339b.f82243a;
                String str3 = zf7VarM13339b.f82244b;
                byte[] bArr = zf7VarM13339b.f82245c.f29857b;
                String strM20782e0 = bArr != null
                    ? r8g.m20782e0(bArr) : null;
                if (i != 200) {
                    Log.e("Tracer", str3 + " , " + strM20782e0);
                }
            } finally {
            }
        } catch (Exception unused2) {
        } finally {
            // УДАЛЕНИЕ ФАЙЛА ПОСЛЕ ОТПРАВКИ
            file.delete();
        }
    }
}

Что искать в JADX:

Пакет: ru.ok.tracer.upload
Класс: SampleUploadWorker
Родитель: androidx.work.Worker
Метод: mo1430g() (doWork)
Метод: m21689h() (инициализация загрузки)
Метод: m21690i() (загрузка файла)
Строки: "tracer_sample_file_path"
Строки: "tracer_sample_file_size"
Строки: "tracer_sample_file_name"
Строки: "tracer_version_code"
Строки: "tracer_custom_properties_keys"
Строки: "tracer_feature_name"
Строки: "tracer_feature_tag"
Строки: "tracer_feature_uze_gzip"
Строки: "tracer_has_attr1", "tracer_has_attr2"
URL:    "https://sdk-api.apptracer.ru"
Пути:   "api/sample/initUpload"
Пути:   "api/sample/upload"
Строки: "sampleToken", "uploadToken"
Строки: "application/octet-stream"
Метаданные: "tracer-sample-upload_release"

Доказывает:

1. Файлы отправляются на ВНЕШНИЙ сервер apptracer.ru
2. Два этапа: initUpload → upload
3. Произвольные метаданные (ключи приходят с сервера)
4. GZIP-сжатие по умолчанию ВКЛЮЧЕНО
5. Файл УДАЛЯЕТСЯ после отправки (file.delete())
6. Файлы привязаны к версии сборки (систематический сбор)
7. application/octet-stream — произвольный бинарный формат

НАХОДКА 4: DpsInitProvider — автозапуск до приложения

Пакет: ru.trace_flow.dps.internal

Класс: ru.trace_flow.dps.internal.DpsInitProvider

Файл: classes3.dex

package ru.trace_flow.dps.internal;

import android.app.Application;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import kotlin.Metadata;
import p000.blh;
import p000.d35;
import p000.rt4;
import p000.sh3;
import p000.ua5;
import p000.z9e;

@Metadata(d2 = {
    "Lru/trace_flow/dps/internal/DpsInitProvider;",
    "Landroid/content/ContentProvider;",
    "<init>",
    "()V",
    "dpslib"
})
public final class DpsInitProvider extends ContentProvider {

    // ВСЕ МЕТОДЫ ПУСТЫЕ — ЭТО НЕ НАСТОЯЩИЙ CONTENTPROVIDER
    @Override
    public final int delete(Uri uri, String str,
            String[] strArr) {
        return 0;
    }

    @Override
    public final String getType(Uri uri) {
        return null;
    }

    @Override
    public final Uri insert(Uri uri,
            ContentValues contentValues) {
        return null;
    }

    @Override
    public final Cursor query(Uri uri, String[] strArr,
            String str, String[] strArr2, String str2) {
        return null;
    }

    @Override
    public final int update(Uri uri,
            ContentValues contentValues,
            String str, String[] strArr) {
        return 0;
    }

    // ЕДИНСТВЕННАЯ ЦЕЛЬ — onCreate()
    @Override
    public final boolean onCreate() {
        String string;
        Context context = getContext();
        if (context == null) {
            return false;
        }
        Context applicationContext = context.getApplicationContext();
        sh3 sh3Var = applicationContext instanceof Application
            ? (Application) applicationContext : 0;
        if (sh3Var == 0) {
            return false;
        }

        // ОБФУСЦИРОВАННЫЕ КЛЮЧИ
        if (context.getResources().getBoolean(
                context.getResources().getIdentifier(
                    z9e.m27743h(
                        "3b5c71e286012f6483042854bd183252"
                        + "962e39558313305e86"),
                    z9e.m27743h("ad3fe0d2b08f50c1"),
                    context.getPackageName()))) {
            try {
                Bundle bundle = context.getPackageManager()
                    .getApplicationInfo(
                        context.getPackageName(), 128)
                    .metaData;

                if (bundle != null
                        && (string = bundle.getString(
                            z9e.m27743h(
                                "ee30a31062d61e9a62c2538b4fc55c81"
                                + "678d549e638d71be59fc7bab49")))
                        != null
                        && string.length() != 0) {

                    String string2 = bundle.getString(
                        z9e.m27743h(
                            "150dd2a5d7a72361d7b36e70fab4617a"
                            + "d2fc6965d6fc5846e080525ce1"));

                    String string3 = bundle.getString(
                        z9e.m27743h(
                            "bfd0a6ee9cd3fecb9cc7b3dab1c0bcd0"
                            + "9988b4cf9d8893f3a7e39eebb1f095ed"
                            + "bdef9ff1"));

                    // 3 LIFECYCLE-СЛУШАТЕЛЯ
                    ua5.C1461a c1461aM23572t =
                        new ua5.C1461a().m23572t(sh3Var);

                    if (sh3Var instanceof sh3) {
                        c1461aM23572t.m23575w(sh3Var);
                    }
                    if (sh3Var instanceof blh) {
                        c1461aM23572t.m23554L(sh3Var);
                    }
                    if (sh3Var instanceof d35) {
                        c1461aM23572t.m23577y((d35) sh3Var);
                    } else {
                        c1461aM23572t.m23577y(
                            new rt4(sh3Var));
                    }

                    ua5.C1461a c1461aM23570r =
                        c1461aM23572t.m23570r(string);

                    if (string2 != null) {
                        c1461aM23570r.m23553K(string2);
                    }
                    if (string3 != null) {
                        c1461aM23570r.m23573u(string3);
                    }

                    c1461aM23570r.m23558e();
                }
            } catch (PackageManager.NameNotFoundException unused) {
            }
        }
        return true;
    }
}

Что искать в JADX:

Пакет: ru.trace_flow.dps.internal
Класс: DpsInitProvider
Родитель: android.content.ContentProvider
Метод: onCreate()
Класс дешифровки: p000.z9e, метод m27743h()
Хексы: "3b5c71e286012f64..."
        "ee30a31062d61e9a..."
        "150dd2a5d7a72361..."
        "bfd0a6ee9cd3fecb..."
Lifecycle-интерфейсы: p000.sh3, p000.blh, p000.d35
Builder: p000.ua5.C1461a
Метаданные: "dpslib"

Доказывает:

1. Фальшивый ContentProvider (все методы пустые)
2. Запускается ДО Application.onCreate()
3. Ключи конфигурации ЗАШИФРОВАНЫ (z9e.m27743h)
4. 3 lifecycle-слушателя — активен ВСЕГДА
5. Читает meta-data из AndroidManifest
6. Намеренное сокрытие от статического анализа

НАХОДКА 5: DownloadAttachesWorker — неубиваемый процесс

Пакет: ru.ok.tamtam.upload.workers

Класс: ru.ok.tamtam.upload.workers.DownloadAttachesWorker

Файл: classes.dex

package ru.p027ok.tamtam.upload.workers;

// ... импорты ...

import ru.p027ok.android.externcalls.sdk.api.ApiProtocol;

@Metadata(d2 = {
    "Lru/ok/tamtam/upload/workers/DownloadAttachesWorker;",
    "Lru/ok/tamtam/upload/workers/ForegroundWorker;",
    // ... 20 зависимостей в метаданных ...
    "tamtam-android-sdk_release"
})
public final class DownloadAttachesWorker extends ForegroundWorker {

    // ТРЕКИНГ
    public final long[] f58984A;                    // массив ID сообщений
    public volatile int f58991H;                    // счётчик файлов
    public final ConcurrentHashMap f58992I;          // прогресс
    public final CopyOnWriteArrayList f58990G;       // активные задачи

    // 20 ЗАВИСИМОСТЕЙ
    public final fa8 f58998n;   // chatRepository
    public final fa8 f58999o;   // fileLoadingNotifications
    public final fa8 f59000p;   // fileSystem
    public final fa8 f59001q;   // messagesRepository
    public final fa8 f59002r;   // downloader
    public final fa8 f59003s;   // mediaProcessor
    public final fa8 f59004t;   // api
    public final fa8 f59005u;   // uiBus
    public final fa8 f59006v;   // fileDownloadedNotifier
    public final fa8 f59007w;   // dispatchers
    public final fa8 f59008x;   // downloadRegistrar
    public final long f59009y;  // chatId
    public final String f59010z; // attachLocalId

    public DownloadAttachesWorker(Context context,
            WorkerParameters workerParameters,
            zf4 zf4Var, aka akaVar, noh nohVar,
            fa8 fa8Var, fa8 fa8Var2, fa8 fa8Var3,
            fa8 fa8Var4, fa8 fa8Var5, fa8 fa8Var6,
            fa8 fa8Var7, fa8 fa8Var8, fa8 fa8Var9,
            fa8 fa8Var10, fa8 fa8Var11, fa8 fa8Var12,
            fa8 fa8Var13, fa8 fa8Var14, fa8 fa8Var15) {
        super(context, workerParameters, zf4Var, akaVar, nohVar);

        this.f58998n = fa8Var3;   // chatRepository
        this.f58999o = fa8Var4;   // fileLoadingNotifications
        this.f59000p = fa8Var5;   // fileSystem
        this.f59001q = fa8Var6;   // messagesRepository
        this.f59002r = fa8Var7;   // downloader
        this.f59003s = fa8Var8;   // mediaProcessor
        this.f59004t = fa8Var9;   // api
        this.f59005u = fa8Var10;  // uiBus
        this.f59006v = fa8Var11;  // fileDownloadedNotifier
        this.f59007w = fa8Var12;  // dispatchers
        this.f59008x = fa8Var14;  // downloadRegistrar

        // ПРОИЗВОЛЬНЫЙ CHAT ID
        this.f59009y = this.f5455b.f2836b.m7759d(
            ApiProtocol.PARAM_CHAT_ID, -1L);

        // ПРОИЗВОЛЬНЫЙ ATTACH ID
        this.f59010z = this.f5455b.f2836b.m7760e("attachLocalId");

        // ПРОИЗВОЛЬНЫЕ MESSAGE IDs
        Object obj = this.f5455b.f2836b.f18611a.get("messageIds");
        if (obj instanceof Long[]) {
            Long[] lArr = (Long[]) obj;
            jArr = new long[lArr.length];
            for (int i = 0; i < lArr.length; i++) {
                jArr[i] = lArr[i].longValue();
            }
        } else {
            jArr = null;
        }
        this.f58984A = jArr;

        // ...
    }

    // ЗАЧИСТКА ПРИ ОТМЕНЕ
    @Override
    public final Object mo16952j(Continuation continuation)
            throws Throwable {
        CopyOnWriteArrayList copyOnWriteArrayList = this.f58990G;
        Iterator it = copyOnWriteArrayList.iterator();
        while (it.hasNext()) {
            ((h28) ((lz4) it.next()))
                .cancel((CancellationException) null);
        }
        copyOnWriteArrayList.clear();
        this.f58992I.clear();
        gua guaVar = new gua(this.f5454a);
        guaVar.f22156b.cancel(null,
            ((Number) this.f58997d1.getValue()).intValue());
        return fbh.f17309a;
    }

    // МАСКИРОВКА ПОД ОБЫЧНОЕ УВЕДОМЛЕНИЕ
    @Override
    public final Object mo21651l(Continuation continuation) {
        Iterator it = this.f58992I.values().iterator();
        float fFloatValue = 0.0f;
        while (it.hasNext()) {
            fFloatValue += ((Number) it.next()).floatValue();
        }
        String string = ...;  // "Загрузка файлов 1/3..."
        float f = ...;        // прогресс-бар
        q98.m19811B0("worker:multi-attaches-downloader",
            "createForegroundInfo: progress=" + fFloatValue
            + ", fileProcessCounter=" + this.f58991H
            + ", finalProgress=" + f, new Object[0]);
        // ...
    }
}

Что искать в JADX:

Пакет: ru.ok.tamtam.upload.workers
Класс: DownloadAttachesWorker
Родитель: ForegroundWorker (тот же пакет)
Поля: f58984A (long[] — messageIds)
       f59009y (long — chatId)
       f59010z (String — attachLocalId)
       f58991H (volatile int — счётчик)
       f58992I (ConcurrentHashMap — прогресс)
       f58990G (CopyOnWriteArrayList — задачи)
Строки: ApiProtocol.PARAM_CHAT_ID
         "attachLocalId"
         "messageIds"
         "worker:multi-attaches-downloader"
Метод: mo16952j() — зачистка
Метод: mo21651l() — уведомление
Метаданные: "tamtam-android-sdk_release"
Зависимость: ru.ok.android.externcalls.sdk.api.ApiProtocol

Доказывает:

1. ForegroundWorker — Android НЕ МОЖЕТ убить процесс
2. 20 зависимостей = полный доступ к ВСЕМУ
3. Принимает произвольный chatId и messageIds
4. ConcurrentHashMap — скрытый мониторинг прогресса
5. При отмене: clear() + cancel() = зачистка следов
6. Пользователь видит только "Загрузка файлов..."
7. Связан с API через ApiProtocol (внешние вызовы)

НАХОДКА 6: ChatsEventsByBus — перехват событий

Пакет: ru.ok.tamtam.chats

Класс: ru.ok.tamtam.chats.ChatsEventsByBus

Файл: classes.dex

package ru.p027ok.tamtam.chats;

import androidx.annotation.Keep;
import java.util.Collections;
import kotlin.Metadata;
import p000.C1164ru;
import p000.gn5;
import p000.j9g;
import p000.leh;
import p000.nm0;
import p000.x63;
import p000.yd3;

@Metadata(d2 = {
    "Lru/ok/tamtam/chats/ChatsEventsByBus;",
    "Lnm0;",
    "Lleh;",
    "updateMessageEvent",
    "onEvent",
    "(Lleh;)V",
    "Lyd3;",
    "chatsUpdateEvent",
    "(Lyd3;)V",
    "tamtam-android-sdk_release"
})
final class ChatsEventsByBus extends nm0 {

    @Keep
    @j9g
    public final void onEvent(leh updateMessageEvent) {
        if (updateMessageEvent.f35286d) {
            m15299a(new x63(
                Collections.singleton(
                    Long.valueOf(updateMessageEvent.f35284b)),
                false,
                gn5.f21618a,
                false));
        }
    }

    @Keep
    @j9g
    public final void onEvent(yd3 chatsUpdateEvent) {
        m15299a(new x63(
            new C1164ru(chatsUpdateEvent.f79077b),
            chatsUpdateEvent.f79078c,
            chatsUpdateEvent.f79083h,
            false));
    }
}

Фабрика регистрации:

package ru.p027ok.tamtam.chats;

public abstract class AbstractC1361a {
    public static final nm0 m21603a(n11 n11Var, tkg tkgVar) {
        ChatsEventsByBus chatsEventsByBus =
            new ChatsEventsByBus(tkgVar);
        n11Var.mo6023d(chatsEventsByBus);
        return chatsEventsByBus;
    }
}

Что искать в JADX:

Пакет: ru.ok.tamtam.chats
Класс: ChatsEventsByBus
Родитель: p000.nm0
Аннотации: @Keep, @j9g (= EventBus подписка)
Метод: onEvent(leh) — перехват сообщений
Метод: onEvent(yd3) — перехват обновлений чатов
Поля события leh: f35284b (long — messageId)
                   f35286d (boolean — флаг)
Поля события yd3: f79077b (список chatIds)
                   f79078c, f79083h (флаги)
Фабрика: AbstractC1361a (тот же пакет)
Метод регистрации: n11Var.mo6023d()
Метаданные: "tamtam-android-sdk_release"

Доказывает:

1. @Keep — намеренно сохранён от обфускации
2. @j9g — подписка на EventBus
3. Перехватывает КАЖДОЕ новое сообщение (onEvent(leh))
4. Перехватывает КАЖДОЕ обновление чата (onEvent(yd3))
5. ID сообщений и чатов доступны всем подписчикам
6. Регистрация через фабрику на UI Bus

НАХОДКА 7: LoggerInitializer

Пакет: ru.ok.tracer.utils

Класс: ru.ok.tracer.utils.LoggerInitializer

Файл: classes.dex

package ru.p027ok.tracer.utils;

import android.content.Context;
import java.util.Collections;
import java.util.List;
import kotlin.Metadata;
import p000.b87;
import p000.pl0;
import p000.ys7;

@Metadata(d2 = {
    "Lru/ok/tracer/utils/LoggerInitializer;",
    "Lys7;",
    "Lpl0;",
    "<init>",
    "()V",
    "tracer-commons_release"
})
public final class LoggerInitializer implements ys7 {

    @Override
    public final List mo21681a() {
        return Collections.EMPTY_LIST;
    }

    @Override
    public final Object mo21682b(Context context) {
        try {
            if (context instanceof b87) {
            }
        } catch (Exception unused) {
            // ИСКЛЮЧЕНИЯ ПРОГЛАТЫВАЮТСЯ
        }
        return pl0.f51822h;
    }
}

Что искать в JADX:

Пакет: ru.ok.tracer.utils
Класс: LoggerInitializer
Интерфейс: p000.ys7 (= Initializer из App Startup)
Метод: mo21681a() (зависимости — пустой список)
Метод: mo21682b() (инициализация)
Проверка: context instanceof p000.b87
Catch: Exception unused (проглатывание)
Метаданные: "tracer-commons_release"

НАХОДКА 8: SessionSender

Пакет: ru.ok.tamtam.api

Класс: ru.ok.tamtam.api.SessionSenderUnexpectedException

Файл: classes3.dex

package ru.p027ok.tamtam.api;

import kotlin.Metadata;

@Metadata(d2 = {
    "Lru/ok/tamtam/api/SessionSenderUnexpectedException;",
    "Ljava/lang/Exception;",
    "Lkotlin/Exception;",
    "tamtam-java-sdk"
})
public final class SessionSenderUnexpectedException
        extends Exception {
    public SessionSenderUnexpectedException(Exception exc) {
        super(exc);
    }
}

Что искать в JADX:

Пакет: ru.ok.tamtam.api
Класс: SessionSenderUnexpectedException
Родитель: java.lang.Exception
Метаданные: "tamtam-java-sdk"

КАРТА ПОИСКА В JADX — быстрый чеклист

ПАКЕТ                              КЛАСС                              DEX
─────────────────────────────────  ─────────────────────────────────  ──────────
com.my.tracker                     MyTrackerConfig                    classes2
ru.ok.messages.analytics           DailyAnalyticsWorker               classes
ru.ok.tracer.upload                SampleUploadWorker                 classes3
ru.trace_flow.dps.internal         DpsInitProvider                    classes3
ru.ok.tamtam.upload.workers        DownloadAttachesWorker             classes
ru.ok.tamtam.upload.workers        ForegroundWorker                   classes
ru.ok.tamtam.chats                 ChatsEventsByBus                   classes
ru.ok.tamtam.chats                 AbstractC1361a                     classes
ru.ok.tracer.utils                 LoggerInitializer                  classes
ru.ok.tamtam.api                   SessionSenderUnexpectedException   classes3

ОБФУСЦИРОВАННЫЕ КЛАССЫ — где искать

ОБФУСЦИРОВАННЫЙ    РЕАЛЬНЫЙ / НАЗНАЧЕНИЕ
──────────────────  ──────────────────────────────────────
p000.z9e           Дешифровка строк (метод m27743h)
p000.ua5           DPS SDK Builder
p000.ua5.C1461a    DPS Builder inner class
p000.sh3           Lifecycle interface #1
p000.blh           Lifecycle interface #2
p000.d35           Lifecycle interface #3
p000.rt4           Lifecycle adapter/wrapper
p000.ys7           App Startup Initializer
p000.nm0           EventBus subscriber base
p000.j9g           EventBus @Subscribe annotation
p000.leh           UpdateMessageEvent
p000.yd3           ChatsUpdateEvent
p000.x63           Event data wrapper
p000.kv8           Key-Value builder (JSON)
p000.jo8           Analytics sender
p000.x3c           PermissionStats holder
p000.fn4           WorkerParameters data
p000.aj8           Worker Result base
p000.zi8           Worker Result.Success
p000.fa8           Lazy<T> provider (Dagger)
p000.yfe           JobIntentService (обфусцированный)
p000.o86           File event data structure
p000.rv0           CountDownLatch wrapper
p000.wf7           Multipart form part
p000.av0           File request body
p000.c40           HTTP request
p000.zf7           HTTP response
p000.tf7           Multipart request body
p000.xyg           Tracer SDK singleton
p000.hjg           Tracer environment config
p000.lg7           HTTP client provider
p000.gn8           JSON builder utility

рекомендую ознакомиться самостоятельно с Пакет: ru.p027ok.android.onelogКласс: Worker implements OneLogAppender

Каждый пакет, класс и строка могут быть проверены любым исследователем с помощью JADX. APK доступен в публичных магазинах приложений. Обфусцированные имена (p000.xxx) — результат ProGuard, применённого разработчиками. Анализ проведён исключительно методом статического исследования публично доступного APK-файла в целях информирования пользователей о свойствах безопасности приложения. Автор не осуществлял несанкционированный доступ к серверам, не перехватывал пользовательские данные, не нарушал работу сервиса и не использовал эксплоиты. Все выводы основаны на коде, содержащемся в APK, и стандартных механизмах Android SDK. Автор не утверждает, что обнаруженные возможности активно используются против пользователей. Автор констатирует, что техническая инфраструктура для их реализации присутствует в коде и может быть активирована в любой момент.