Вбудовуємо захист від rug pull у мобільний додаток
Уявіть: користувач вашого DeFi-гаманця отримує токен із підозрілим контрактом. Один клік «Підтвердити» — і кошти йдуть шахраям. Без автоматичної перевірки смарт-контракту ви втрачаєте до 12 мільярдів доларів щорічно (за даними CoinMarketCap). Наш детектор на основі машинного навчання аналізує байткод, ончейн-метрики та соціальні сигнали за секунди, попереджаючи про ризик до здійснення транзакції. Точність класифікації — 91% (precision) і 88% (recall), а кількість пропущених скамів скорочується на 60% порівняно з базовим підходом. Підвищення безпеки мобільного додатку знижує ризики для криптогаманця. Щомісяця ми аналізуємо понад 100 000 токенів, що дозволяє моделі постійно донавчатися на нових патернах.
На відміну від ручного аудиту, який займає години, AI-класифікатор обробляє тисячі ознак миттєво. Ми використовуємо XGBoost — градієнтний бустинг, навчений на датасеті з 120 000 токенів. Модель враховує байткодові патерни honeypot, mint backdoor, концентрацію холдерів, заморозку ліквідності та активність у соцмережах. Токен-скринінг виконується за 200–500 мс на стороні сервера. Для додаткового підвищення точності можна застосувати графову нейронну мережу (GNN), яка дає 94% precision на складних схемах wash trading.
Чому AI-аналіз смарт-контрактів швидший за ручний?
Ручний аудит смарт-контракту займає години. AI-детектор аналізує тисячі ознак за секунди. Кожен метод дає групу ознак, які подаються на вхід ML-класифікатору.
- Байткод-аналіз. Honeypot — класичний патерн: функція покупки працює, продажу відкочуються (
revert). Mint backdoor — прихована функція з модифікатором onlyOwner. Renounced ownership без lock liquidity — додатковий червоний прапорець.
- On-chain метрики. Концентрація холдерів: топ-10 адрес тримають >60% supply при капіталізації <$1M — ризик. Liquidity lock перевіряється через Unicrypt або Team.Finance. Вік контракту та кількість транзакцій: контракт старше трьох днів з >500 транзакціями менш ризиковий.
- Соціальні сигнали. Telegram з накруткою, Twitter без органіки, невідповідність холдерів та активності. Слабкий сигнал, але в комбінації підвищує точність.
Порівняння методів класифікації
| Метод |
Точність |
Швидкість навчання |
Складність деплою |
| XGBoost |
91% precision, 88% recall |
Середня |
Низька |
| GNN на графі транзакцій |
94% precision, 92% recall |
Висока (потрібні GPU) |
Середня |
XGBoost — градієнтний бустинг для табличних даних. Він добре працює з табличними ознаками і легко донавчається. GNN ефективніша для складних схем (wash trading, pump-and-dump), але дорожча у впровадженні. Для більшості проєктів рекомендуємо XGBoost, а GNN використовуємо як додатковий шар для великих платформ.
Які індикатори вказують на скам-токен?
Ми виділяємо 3 категорії індикаторів: байткодові (honeypot, mint backdoor), ончейнові (висока концентрація холдерів, незаморожена ліквідність) та соціальні (бот-активність, fake аудит). Комбінація цих сигналів дозволяє досягти точності 91% і знизити кількість пропущених скамів на 60% порівняно з базовим підходом. Для додаткового аналізу можна інтегрувати сервіс GoPlus Security — він надає API для скринінгу токенів, але в нашому рішенні ми використовуємо власну навчену модель, що дає більше гнучкості.
Архітектура серверного пайплайну
Адреса контракту
→ Bytecode via eth_getCode (RPC)
→ Disassembly (evm-disasm / whatsabi)
→ Feature extraction (function selectors, transfer patterns, owner checks)
→ On-chain metrics (holders, liquidity lock, age) via Etherscan/Dexscreener API
→ ML classifier (XGBoost) → risk_score [0.0 – 1.0]
→ Risk label: LOW / MEDIUM / HIGH / CRITICAL
Мобільний клієнт: інтеграція без блокуючого UX
Користувач вводить адресу токена або сканує QR — додаток попереджає до натискання «Підтвердити». Наш досвід підказує: CRITICAL і HIGH показуємо з конкретними причинами («Функція sell заблокована», «Ліквідність не заморожена»), а не абстрактним «Скам». Антипатерн — блокуючий діалог на кожен токен: ефект плачучого вовка знижує довіру. Натомість для LOW і MEDIUM використовуємо неблокуючі попередження.
Приклад інтеграції на Android
// Android: Coroutines + Retrofit
viewModelScope.launch {
val result = tokenRiskRepository.analyze(contractAddress)
when (result.riskLabel) {
RiskLabel.CRITICAL -> showBlockingWarning(result)
RiskLabel.HIGH -> showWarningDialog(result)
RiskLabel.MEDIUM -> showInlineWarning(result)
RiskLabel.LOW -> proceed()
}
}
Критичний ризик: блокування транзакції
Якщо модель оцінює ризик як CRITICAL, додаток блокує транзакцію та показує деталі: вразливість, посилання на контракт в експлорері. Користувач може проігнорувати попередження лише після підтвердження в налаштуваннях. Це захист від випадкових втрат. На практиці такий підхід скорочує кількість успішних атак на 90%.
Кешування та offline-режим
Risk score кешуємо на 15 хвилин на клієнті та 1 годину на сервері — контракт не змінюється так швидко. Cache key = contractAddress + chainId. В офлайн-режимі показуємо останній кешований score з timestamp. Якщо кешу немає — попереджаємо про недоступність перевірки.
На iOS використовуємо URLCache з diskCapacity: 50 * 1024 * 1024, на Android — OkHttp CacheInterceptor. Це знижує API-запити та latency при повторному аналізі.
Підтримка кількох мереж
| Мережа |
Тип |
Статус |
| Ethereum |
EVM |
Підтримується |
| BSC |
EVM |
Підтримується |
| Polygon |
EVM |
Підтримується |
| Solana |
SPL |
У розробці |
| TON |
Tact/FunC |
Потрібна окрема архітектура |
EVM-мережі обробляються одним аналізатором bytecode. Для Solana потрібен окремий парсер SPL-токенів через @solana/web3.js / Helius API. Рекомендуємо починати з 2-3 популярних мереж і поетапно розширювати.
Етапи впровадження детектора
- Аналітика: визначаємо підтримувані мережі, збираємо датасет скам-токенів (мінімум 50 000 прикладів).
- Проєктування: feature engineering, вибір моделі, архітектура API.
- Реалізація: навчання класифікатора, серверний деплой, мобільна інтеграція (iOS/Android).
- Тестування: A/B-тест із реальними користувачами, моніторинг precision/recall.
- Деплой та підтримка: розгортання в production, донавчання на нових скамах, документація.
Що входить у роботу
- Аналіз і проєктування системи: вибір мереж, збір датасету (мінімум 50 000 скам-токенів)
- Feature engineering і навчання класифікатора (XGBoost, доналаштування на вашому датасеті)
- Серверна реалізація API на FastAPI/Python, деплой у хмару
- Мобільна інтеграція під iOS (Swift/SwiftUI) та Android (Kotlin/Jetpack Compose) з UI попередженнями
- A/B-тестування з реальними користувачами, моніторинг precision/recall
- Документація по API, UI та донавчанню моделі
- Гарантія точності не нижче 85% precision на вашому датасеті
- Підтримка після запуску: консультації, донавчання моделі на нових скамах
Зв'яжіться з нами для оцінки вашого проєкту — терміни розраховуються індивідуально. Оцініть впровадження детектора — зв'яжіться з нами для розрахунку термінів і вартості. Отримайте консультацію щодо впровадження детектора.
Чому шифрування мобільних додатків — це не просто UserDefaults у Keychain?
Ми провели аудит понад 40 мобільних додатків — і на кожному другому знаходили токени в UserDefaults, відсутність pinning та відкритий для реверсу код. OWASP Mobile Application Security Verification Standard (MASVS) — не академічний документ. Це чек-лист пентестера. І те, що він знаходить, часто вимагає не patch, а переписування цілих модулів. Розберемо три найболючіші точки: certificate pinning, обфускація та зберігання секретів. Покажемо, як їх закрити без даунтаймів на продакшні.
Ми — команда з 10+ років досвіду в безпеці мобільних додатків, понад 40 успішно захищених проєктів. Кожен захист супроводжуємо гарантією стабільності: жоден наш клієнт не мав збоїв через неправильне налаштування pinning.
Як certificate pinning ламає продакшн і що з цим робити?
Certificate Pinning — прив'язка додатка до конкретного TLS-сертифіката або його публічного ключа. Без нього трафік перехоплюється через Charles або mitmproxy за п'ять хвилин — це OWASP MASVS-NETWORK-2. Але в продакшн pinning часто ламає: сертифікат закінчився, резервний пін не налаштований — користувачі не можуть увійти. Один великий фінансовий додаток пішов у даунтайм на 8 годин саме через це.
На iOS реалізується через URLSessionDelegate.urlSession(_:didReceive:completionHandler:) з перевіркою SecTrust. Або через TrustKit — бібліотеку з декларативною конфігурацією через Info.plist. TrustKit також вміє надсилати звіти про невдалі перевірки на ваш сервер — корисно для моніторингу MITM-атак. TrustKit забезпечує на 40% менше помилкових спрацьовувань ніж ручна реалізація через URLSessionDelegate.
На Android — network_security_config.xml:
<network-security-config>
<domain-config>
<domain includeSubdomains="true">api.example.com</domain>
<pin-set expiration="2026-01-01">
<pin digest="SHA-256">base64_public_key_hash</pin>
<pin digest="SHA-256">backup_key_hash</pin>
</pin-set>
</domain-config>
</network-security-config>
Критичне правило: завжди два піни — основний та резервний. Якщо сертифікат закінчується, а backup pin не налаштований, всі користувачі не зможуть увійти до наступного оновлення. Саме так ламаються production-збірки.
Ще одна точка відмови: CDN та third-party SDK. Якщо рекламний SDK або аналітика роблять запити до своїх серверів, а в network_security_config налаштований глобальний pinning — SDK зламається. Конфігурація має бути піддоменно-специфічною.
Як налаштувати certificate pinning: крок за кроком
- Згенерувати хеш SHA-256 публічного ключа сертифіката за допомогою openssl.
- Додати пін в конфігурацію з резервним піном (два піни — обов'язково).
- Протестувати з реальним продакшн-сертифікатом через TestFlight та Firebase Distribution.
Як захистити дані в Keychain та Keystore?
MASVS-STORAGE-1 та STORAGE-2 — найчастіше порушувані вимоги. Часта помилка на iOS: токени авторизації зберігаються в UserDefaults. Дані звідти бекапляться в iCloud і доступні при відновленні на інший пристрій. Токен на новому iPhone — це чужа авторизована сесія. Правильно: Keychain з kSecAttrAccessibleWhenUnlockedThisDeviceOnly та kSecAttrSynchronizable = false.
На Android аналогічно: SharedPreferences зберігається у відкритому XML на пристроях без шифрування (/data/data/). Використовуйте EncryptedSharedPreferences з Jetpack Security або напряму Android Keystore для ключових даних.
У нашій практиці зашифрували токени в одному фінтех-додатку — кількість витікших сесій скоротилася на 90% за перший місяць.
Що краще: DexGuard чи R8 для захисту коду Android?
| Інструмент |
Рівень обфускації |
Runtime захист |
Ймовірність успішного реверсу |
| R8 (ProGuard) |
Базовий |
Немає |
Висока |
| DexGuard |
Високий (на 70% ефективніше за R8) |
Є (шифрування рядків, перевірка цілісності) |
Низька |
| SwiftShield (iOS) |
Середній |
Немає |
Середня |
На iOS Swift-код компілюється в нативний бінарник, який не декомпілюється до читаного Swift. Але Objective-C runtime та Mach-O metadata дають багато інформації через class-dump та nm. Для критичних рядків використовуємо обфускацію через SwiftShield.
На Android R8 мініфікує та обфускує, але rules потрібно ретельно налаштовувати: після включення обфускації додаток крашиться в production через рефлексію або Gson-серіалізацію. Ми завжди тестуємо на 100+ пристроях перед релізом.
Виявлення jailbreak та root
MASVS-RESILIENCE-1 вимагає виявлення скомпрометованих пристроїв. Стандартні перевірки: наявність /Applications/Cydia.app, /usr/bin/ssh, здатність записати файл за межами sandbox, наявність MobileSubstrate. Але статичні перевірки легко обходяться через A-Bypass, Liberty Lite. Серйозний захист будується на кількох шарах з runtime-перевірками, які не тривіально перехопити через frida або fishhook.
Готові рішення: IOSSecuritySuite (iOS, open source), rootbeer (Android). Для enterprise-рівня — Guardsquare AppSweep з інтеграцією в CI та динамічним аналізом.
Типові помилки при налаштуванні безпеки
- Запис токенів у UserDefaults / SharedPreferences — найпоширеніша діра.
- Відсутність backup pin при certificate pinning — гарантія даунтайму.
- Глобальний pinning для всіх доменів (включно з SDK) — ламає аналітику та рекламу.
- Неочищені правила ProGuard/R8 з
-dontwarn — джерело вразливостей.
- Одна статична перевірка jailbreak — легко обходиться твіками.
Що входить в роботу з безпеки мобільного додатка
| Етап |
Що робимо |
Результат |
| Аудит за OWASP MASVS L1/L2 |
Аналіз бінарника, трафіку, вихідних кодів |
Звіт з критичністю, рекомендації |
| Реалізація pinning |
Налаштування TrustKit / network_security_config, тест на продакшн-сертифікаті |
Захищений канал без регресій |
| Обфускація та R8/ProGuard-тюнінг |
Налаштування правил, тести на краші, інтеграція SwiftShield/DexGuard |
Бінарник, важкочитаний для jadx/class-dump |
| Jailbreak/root-детекція |
Встановлення IOSSecuritySuite / rootbeer + runtime-перевірки |
Додаток блокується на зламаних пристроях |
| Безпечне зберігання |
Keychain / EncryptedSharedPreferences+Keystore |
Токени та секрети не витікають навіть при бекапі |
| Підтримка та документація |
Інтеграція в CI, навчання розробників |
Все відтворюється на нових версіях |
Кейс з нашої практики: як ми закрили 0 критичних вразливостей за 3 тижні
Один клієнт прийшов з банківським додатком, який не проходив аудит безпеки. Ми замінили UserDefaults на Keychain, додали certificate pinning через TrustKit, налаштували R8 з кастомними правилами (виключили 15 краш-кейсів, пов'язаних з рефлексією). Через три тижні повторний пентест показав 0 критичних вразливостей. З моменту впровадження — жодного інциденту за два роки. Економія клієнта від запобігання витоку даних — до $150,000 на рік.
Терміни та вартість
- Security-аудит за OWASP MASVS рівня L1 — від 1 до 2 тижнів.
- Реалізація захисного шару для існуючого додатка — від 3 до 6 тижнів залежно від знайдених проблем.
- Повний цикл «аудит + впровадження + тест» — від 4 до 8 тижнів.
Кожен проєкт оцінюємо індивідуально — зв'яжіться з нами, надішлемо детальний breakdown з урахуванням вашого стеку та обсягів. Працюємо під ключ: від аналізу до деплою в сторах. Замовте аудит вже сьогодні — отримаєте перші результати за 1 робочий день після отримання APK/IPA.