Щоденник чи шпигун? Які дані насправді збирає офіційний додаток Нові знання

💡 Усі статті, обговорення, новини про Mobile — в одному місці. Приєднуйтесь до Mobile спільноти!

Поки діти вчаться, а батьки перевіряють їхні оцінки, офіційний додаток «Нові знання» (ua.nz.NZClient) тихенько тягне зі смартфона купу зайвої інформації.

Я вирішив трохи поколупатися в його APK-файлі та зазирнув у AndroidManifest.xml. І список дозволів мене неприємно здивував. Як для звичайного електронного щоденника, програма просить надто багато критичних доступів до системи і виглядає скоріше як інструмент для стеження.

Чому на безпеку додатка «Нові Знання» просто забили: технічний розбір

Реверс-інжиніринг APK-файлу шкільного щоденника через JADX показав, що шпигунської змови тут немає, але є тотальна лінь розробників та застарілий підхід до безпеки.

Аналіз головного компонента com.embarcadero.firemonkey.FMXNativeActivity доводить, що мобільну програму взагалі ніхто не писав з нуля під Android — її створено на Delphi / Object Pascal через фреймворк FireMonkey (FMX). Автори просто взяли свій готовий веб-сайт nz.ua і загорнули його в мобільну коробку (WebView), скомпілювавши логіку в бінарник libNZClient.so. Через такий Web-to-App підхід і виникла купа стрьомних дозволів у системі (доступ до точного GPS, читання контактів, право здійснювати дзвінки): розробники просто полінувалися зняти стандартні галочки в конфігу Delphi перед релізом програми.

Проте найбільші проблеми ховаються в безпеці самого маніфесту. По-перше, параметр android:usesCleartextTraffic="true" примусово дозволяє додатку гоняти дані через незашифрований протокол HTTP, що у 2026 році є критичним факапом. Будь-який зловмисник у тому ж шкільному Wi-Fi через простий сніффер може легко перехопити паролі, сесії чи оцінки учнів. По-друге, використання сайту всередині WebView разом із застарілими веб-компонентами (на кшталт TinyMCE) відкриває шлях для XSS-атак. Шкідливий JavaScript-скрипт, підкинутий, наприклад, у повідомлення вчителю, виконається всередині додатка і, маючи міст із Delphi-кодом, отримає куди більше доступу до функцій телефону, ніж у звичайному браузері. На додачу, прапорець android:persistent="true" примусово тримає щоденник у пам’яті як критичний системний процес, який Android ніколи не може закрити, що абсолютно безглуздо валить акумулятор пристрою.

Продукт, яким користуються мільйони дітей та вчителів, зліпили на швидку руку, повністю проігнорувавши базову безпеку мережі й оптимізацію.

Що ховається на серверній стороні (Kerio Connect & Російський слід)

Але найцікавіше ховається в мережевій інфраструктурі, яка обслуговує сервіс nz.ua. Якщо трохи дослідити їхні сервери, можна натрапити на відкриту адмінку поштового сервера Kerio Connect дуже старої версії.

Мало того, що цей сервер працює по незашифрованому HTTP (світячи древнім фреймворком ExtJS 4 під Internet Explorer 6), розробники взагалі забили на його кастомізацію. При переході на сторінку входу користувача зустрічає старий російський логотип Kerio та інтерфейс мовою окупанта («Вход», «Имя пользователя», Новые знания).

Це найкраща ілюстрація тотального технічного пофігізму. Продукт, яким змушують користуватися мільйони українських дітей та вчителів, зліпили на швидку руку, повністю проігнорувавши базову безпеку мережі та залишивши російські хвости в системі.

  • Твоє точне місцезнаходження (GPS): Знає, де саме ти перебуваєш у будь-який момент, і може відстежувати твої переміщення.
  • Твої контакти: Повністю бачить твою телефонну книгу (імена та номери всіх твоїх друзів, батьків і знайомих).
  • Усі твої акаунти: Бачить список профілів, прив’язаних до телефона (наприклад, твою особисту пошту Google).
  • Дані телефона та сім-картки (IMEI/IMSI): Знає унікальний «паспорт» твого смартфона, твій мобільний номер, оператора зв’язку і те, коли саме ти з кимось розмовляєш (бачить сам статус дзвінка).
  • Камера: Може вмикати камеру (наприклад, для фото завдань).
  • Пам’ять телефона: Має повний доступ до твоїх файлів, фотографій та завантажень.
  • Самовільні дзвінки: Має технічне право самостійно набирати номери і запускати виклик без твого підтвердження.

====================================================================

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

    <uses-permission android:name="android.permission.CALL_PHONE"/>

    <uses-permission android:name="android.permission.CAMERA"/>

    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>

    <uses-permission android:name="android.permission.INTERNET"/>

    <uses-permission android:name="android.permission.READ_CONTACTS"/>

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>




================================================================


+<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    android:versionCode="7"

    android:versionName="1.2.1"

    android:installLocation="auto"

    android:compileSdkVersion="33"

    android:compileSdkVersionCodename="13"

    package="ua.nz.NZClient"

    platformBuildVersionCode="33"

    platformBuildVersionName="13">

    <uses-sdk

        android:minSdkVersion="23"

        android:targetSdkVersion="33"/>

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

    <uses-permission android:name="android.permission.CALL_PHONE"/>

    <uses-permission android:name="android.permission.CAMERA"/>

    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>

    <uses-permission android:name="android.permission.INTERNET"/>

    <uses-permission android:name="android.permission.READ_CONTACTS"/>

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

    <uses-permission

        android:name="android.permission.MANAGE_EXTERNAL_STORAGE"

        android:minSdkVersion="33"/>

    <uses-permission

        android:name="android.permission.READ_MEDIA_IMAGES"

        android:minSdkVersion="33"/>

    <uses-permission

        android:name="android.permission.READ_EXTERNAL_STORAGE"

        android:maxSdkVersion="32"/>

    <uses-permission

        android:name="android.permission.WRITE_EXTERNAL_STORAGE"

        android:maxSdkVersion="32"/>

    <uses-feature

        android:glEsVersion="0x20000"

        android:required="true"/>

    <queries/>

    <application

        android:theme="@android:style/Theme.NoTitleBar"

        android:label="Нові знання"

        android:icon="@drawable/ic_launcher"

        android:persistent="true"

        android:debuggable="false"

        android:restoreAnyVersion="false"

        android:hardwareAccelerated="true"

        android:largeHeap="false"

        android:usesCleartextTraffic="true"

        android:resizeableActivity="false"

        android:forceDarkAllowed="false"

        android:requestLegacyExternalStorage="true">

        <provider

            android:name="androidx.core.content.FileProvider"

            android:exported="false"

            android:authorities="ua.nz.NZClient.fileprovider"

            android:grantUriPermissions="true">

            <meta-data

                android:name="android.support.FILE_PROVIDER_PATHS"

                android:resource="@xml/provider_paths"/>

        </provider>

        <activity

            android:label="Нові знання"

            android:name="com.embarcadero.firemonkey.FMXNativeActivity"

            android:exported="true"

            android:launchMode="singleTask"

            android:configChanges="screenSize|orientation|keyboardHidden|keyboard">

            <meta-data

                android:name="android.app.lib_name"

                android:value="NZClient"/>

            <intent-filter>

                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>

            </intent-filter>

        </activity>

        <receiver android:name="com.embarcadero.rtl.notifications.NotificationAlarm"/>

        <meta-data

            android:name="com.android.dynamic.apk.fused.modules"

            android:value="base"/>

        <meta-data

            android:name="com.android.stamp.source"

            android:value="https://play.google.com/store"/>

        <meta-data

            android:name="com.android.stamp.type"

            android:value="STAMP_TYPE_STANDALONE_APK"/>

        <meta-data

            android:name="com.android.vending.splits"

            android:resource="@xml/splits0"/>

        <meta-data

            android:name="com.android.vending.derived.apk.id"

            android:value="2"/>

    </application>

</manifest>
👍ПодобаєтьсяСподобалось1
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

А щодо «російського сліду», то це питання до автора статті, а чому в нього російськомовний браузер, який замість системних полів Username та Password відображає те, що бачить автор ?

та інтерфейс мовою окупанта («Вход», «Имя пользователя»,

а чому вирізали? скинь весь скрин

192.138.146.2:81/

до речі, ви праві
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32″/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.USE_BIOMETRIC"/>
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="com.samsung.android.mapsagent.permission.READ_APP_INFO"/>
<uses-permission android:name="com.huawei.appmarket.service.commondata.permission.GET_COMMON_DATA"/>
<uses-permission android:name="ua.gov.mriia.prod.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSI
<package android:name="ua.gov.diia.app"/>
<package android:name="org.telegram.messenger"/>
<package android:name="com.viber.voip"/>
<package android:name="ua.privatbank.ap24″/>
<package android:name="com.ftband.mono"/>
<package android:name="ua.alfabank.mobile.android"/>
<package android:name="ua.com.ukrcapital.capi"/>
<package android:name="com.fuib.android.spot"/>
<package android:name="com.fuib.android.spot.online"/>
<package android:name="ua.monvel.bankalliance"/>
<package android:name="ua.otpbank.android"/>
<package android:name="com.bank.vr"/>
<package android:name="ua.concord.neo.bank.release"/>
<package android:name="obank.app.link"/>
<package android:name="ua.com.abank"/>
<package android:name="ua.concord.neobank.business"/>
<package android:name="com.middleware.piraeus"/>
<package android:name="com.dyvotech.sportbank"/>
<package android:name="ua.com.cs.ifobs.mobile.lviv"/>
<package android:name="net.treeum.multi.invest"/>
<package android:name="ua.com.cs.ifobs.mobile.android.otp"/>
<package android:name="com.creditdnepr.mb"/>
<package android:name="ua.creditagricole.mobile.app"/>
<package android:name="com.fenomena.oxibank"/>
<package android:name="ua.industrialbank.android"/>
<package android:name="ua.izibank.app"/>
<package android:name="ua.ideabank.obank"/>
<package android:name="ua.piraeusbank.mobile.app"/>
<package android:name="ua.raiffeisen.myraif"/>
розібрав вашу мрію.

Чому ви взагалі коментуєте внутрішні системи? Просто відпрацьовуєте як можете?

Етичний хакінг — це легальна практика тестування безпеки комп’ютерних систем, мереж і додатків на наявність вразливостей

Вибачте, але майже вся стаття написана у ChatGPT, з промтом по типу «знайди 10 недоліків» у старому (є і зовсім інший новий) безкоштовному додатку. І майже вся стаття суперечить сама собі. З чого можно зробити деякі висновки відносно автора і того нащо він притягнув це сміття сюди.

Коментар порушує правила спільноти і видалений модераторами.

возьми своїми руками сам програму розкопай, прийдеш скажеш шо нашов

Вибачте, але просто смішно читати

Російський слід

на якийсь внутрішній старий корпоративний софт від провідного міжнародного розробника, який можливо використовувала компанія, ґрунтуючись лише на тому що інтерфейс форми входу має російську мову? І при цьоми писати русізми у коментарі

шо нашов

админку не обновляи давно, багато дир можна найти, одну я знаю, та розказать можу тільки їм

я зрозумів що ви продовжуєте думати що я спів робітник мрії, а давайте її розберем

Мені усе одно хто Ви, але навіщо ви це сміття з ChatGPT принесли сюди? Та ще і на старий додаток 2023 року. А чому не на ще більш старе? Доречі, на нього навіть посилання нема на сайті.

а чому вирізали? скинь весь скрин

а де тут гпт? вся моя інформація

Ні) в бородатий хлопчик, який вирішив просто промоніторити освітні проєкти країни) змішуйте далі акцент уваги на інших)

мені до бороди ще роки 3, а порти закрили) освітні проекти багато на себе беруть, а чому це ви захищяєте проекти на які забили давним давно?

Та мені фіолетово, просто мені не подобається коли держава за рахунок платників податків займається фігнею, краще б на дрони гроші витратили.

Коментар порушує правила спільноти і видалений модераторами.

Все эти мобильные додатки — это плохо контроллируемая малварь и сбор данных. И все их можно сделать в виде обычных сайтов. Все таки в браузерное приложение всунуть скрытые элементы шпионажа проблемно — их можно быстро обнаружить. Я не понимаю, почему производители браузеров еще не сделали простой вещи — возможности полного скрытия джаваскриптом например всех элементов интерфейса браузера, чтоб юзер видел на странице только интерфейс браузерного приложения. Тогда будет точная имитация мобильного приложения, но при этом оно будет запускаться как вэбстраница.

в 2026 всім потрібен гарний інтерфейс і як би полегше, нікому не до діла що за ними стежать, контроль не в моді

Ставлю під сумнів компетентність автора, і вбачаю статтю вкидом після цієї фрази "

Автори просто взяли свій готовий веб-сайт nz.ua і загорнули його в мобільну коробку (WebView)

" - бо це не відповідає дійсності. Додаток має власний повноцінний інтерфейс і працює через АПІ, а не як WebView.

Дякую за технічне зауваження, Тарасе. Згоден, формулювання про «простий WebView» було не зовсім точним — додаток насправді зібрано на фреймворку Delphi / Embarcadero (FireMonkey), про що чітко свідчить наявність FMXNativeActivity у маніфесті. Мій косяк, тут інтерфейс дійсно малюється через FMX.

Але давайте подивіться на суть поста...

А яка суть поста? З приводу http та https. Дійсно, додаток вміє ходити через http. Проте вміти — це одне, а ходити — це інше. Він ходить виключно через https, достатньо було запустити сніфер і подивитись. Все інше так само — вміти, не означає, що він це використовує.
Давайте краще Мрію розберемо, вона ж державна, і дуже агресивно насаджується школам через адмін ресурс. Як там справи з нею, все добре та безпечно?

Те що сказали автору написати, те він і написав. Автор просто працює на дискредитацію цифрових рішень. Потрібно ж якимсь чином просувати продукти на які «ввалили мільйони», а вони не працюють.

якшо пост про нз буде популярніше, то і до мрії докульгає, я за безпеку, а не вбиваю конкурентів.

Ну прям цікава стаття, з яких пір ми можемо вважати що права які є в додатку однозначно використовуються. Ви мабуть дослідили не шифровані запити? Мабуть дослідили логи? Чи це просто «Пук» від мрії на всі системи щоб стати монополістом?

Кажете, права не використовуються і це просто мрії? Тоді тримайте AndroidManifest.xml вашого офіційного додатка.

Там прописано usesCleartextTraffic="true" — розробники прямо дозволили незашифрований HTTP-трафік на рівні системи. Додаток є «persistent», висить у пам’яті вічно і не закривається, збирає точні GPS-координати, лізе в контакти, і вміє сам дзвонити.

Це класичний наслідок розробки на Delphi (FireMonkey), де в маніфест закинули взагалі всі дозволи, які були під рукою, і залишили HTTP-трафік. Тож про які «невикористовувані права» мова, якщо додаток офіційно налаштований як шпигунський софт з нульовим шифруванням?) чи бачили ви точку входа в адмін панель? це все робота неуважності адмінів

Я лише про те що ви будучи представником компанії яка є державною, просто хочете стати монополістом. томі у строчите статті про «все пропало»

Досить неочікувано, що мій скромний технічний розбір сприйняли як масштабну спецоперацію від команди розробників «Мрії» :), я не повнолітній та не можу працювати на державних установах

Ну, гадаю можна було б створити з нуля «все як слід» — але воно б і коштувало дорожче. А потім ще для всіх учнів — вчителів — батьків — платну підписку вели .........

ну якщо буде витік данних то ця інформація буде коштувати більше ніж сам сайт

ось бачите, ви недавно перевіряли код, який ви пишете як краще для вас бо вам потім з ним працювати,прикиньте: вам та 1000000+ людям зробили програму яка зроблена з частин коду, код взятий з різних джерел, так щей не на плюсах а на Delphi, програма збирає про тебе більше інформації ніж ти думаєш, з інтерфейсом з 2010-х, так без власних серверів, чи тобі сподобається? так це ще не проста прога, а застосунок де навчаються діти...

Підписатись на коментарі