├── .github └── workflows │ └── link-checker.yml ├── CONTRIBUTING.md └── README.md /.github/workflows/link-checker.yml: -------------------------------------------------------------------------------- 1 | name: Check Markdown links 2 | 3 | on: push 4 | 5 | jobs: 6 | markdown-link-check: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@master 10 | - uses: gaurav-nelson/github-action-markdown-link-check@v1 11 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Как добавлять новые вопросы и исправлять старые 2 | 3 | Все просто. Если хотите добавить вопрос и ответ на него или отредактировать существующие вопрос/ответ, то сделайте fork этого репозитория, внесите изменения и сделайте PR. Если хотите задать вопрос и увидеть ответ на него в FAQ, то создайте issue c вопросом. Предпочтение отдается "вопросам новичков". -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FAQ 2 | Вопросы на которые все устали отвечать 3 | 4 | - [FAQ](#faq) 5 | - [**Как перехватить трафик приложения?**](#как-перехватить-трафик-приложения) 6 | - [**Пытаюсь перехватить трафик так, как написано выше, ничего не выходит, что делать?**](#пытаюсь-перехватить-трафик-так-как-написано-выше-ничего-не-выходит-что-делать) 7 | - [**Как получить права root на смартфоне?**](#как-получить-права-root-на-смартфоне) 8 | - [**Как написать вирус?**](#как-написать-вирус) 9 | - [**Как шифровать данные?**](#как-шифровать-данные) 10 | - [**Как сделать проверку на root?**](#как-сделать-проверку-на-root) 11 | - [**Не могу установить/заставить работать/скачать %название инструмента%, что делать?**](#не-могу-установитьзаставить-работатьскачать-название-инструмента-что-делать) 12 | - [**Чем декомпилировать код приложения?**](#чем-декомпилировать-код-приложения) 13 | - [**Как изменить поведение чужого приложения?**](#как-изменить-поведение-чужого-приложения) 14 | - [**Как подписать пересобранное приложение?**](#как-подписать-пересобранное-приложение) 15 | - [**Можно ли изменить приложение с сохранением оригинальной цифровой подписи?**](#можно-ли-изменить-приложение-с-сохранением-оригинальной-цифровой-подписи) 16 | - [**Код приложения обфусцирован, всюду китайские символы и зашифрованные строки. Что делать?**](#код-приложения-обфусцирован-всюду-китайские-символы-и-зашифрованные-строки-что-делать) 17 | - [**Как получить apk файл приложения?**](#как-получить-apk-файл-приложения) 18 | - [**Где почитать про уязвимости в приложениях и техники их устранения?**](#где-почитать-про-уязвимости-в-приложениях-и-техники-их-устранения) 19 | - [**Меня посадят если я буду реверсить чужие приложения?**](#меня-посадят-если-я-буду-реверсить-чужие-приложения) 20 | 21 | ### **Как перехватить трафик приложения?** 22 | 23 | Взять [Charles](https://www.charlesproxy.com/), [Fiddler](https://www.telerik.com/fiddler), [Burp Suite](https://portswigger.net/burp) или [mitmproxy](https://mitmproxy.org/) и нагуглить любой понравившийся мануал. Секретный google дорк может выглядеть так: *charles proxy intercept android traffic.* 24 | 25 | Общий алгоритм в любом мануале как правило сводится к такому: 26 | 27 | 1. Запустить прокси на компьютере 28 | 2. Установить на устройство сертификат предоставляемый проксей 29 | 3. В настройках сети на смартфоне указать адрес хостовой машины и порт 30 | 4. Запустить на смартфоне приложение, которое нужно изучить 31 | 5. ??????? 32 | 6. PROFIT! 33 | 34 | В отдельных, клинических случаях может потребоваться использование приложения вроде [ProxyDroid](https://github.com/madeye/proxydroid) (нужен [root](#как-получить-права-root-на-смартфоне)). Если ничего не работает, то вот гайд по решению проблем - [Перехват трафика в Android. Большой гайд](https://fi5t.xyz/posts/intercept-android-traffic/) 35 | 36 | ### **Пытаюсь перехватить трафик так, как написано выше, ничего не выходит, что делать?** 37 | 38 | Скорее всего в приложение применяется ssl pinning. Иногда он отключается просто, иногда не очень. Простые способы: 39 | 40 | - В [APKLab](https://github.com/APKLab/APKLab) есть опция пересборки приложения с отключением пиннинга 41 | - Похожая опция есть в [Objection](https://github.com/sensepost/objection) 42 | - В Xposed под это есть модули: [SSLUnpinning](https://repo.xposed.info/module/mobi.acpm.sslunpinning) и [JustTrustMe](https://github.com/Fuzion24/JustTrustMe) 43 | - [Скрипт](https://codeshare.frida.re/@pcipolloni/universal-android-ssl-pinning-bypass-with-frida/) для Frida 44 | 45 | Если ничего из приведенного выше не помогло победить пиннинг, то выкорчевывать его придется руками. Пример такой работы есть в [этом](https://www.youtube.com/watch?v=Xn6CSqJpf6I) видео. 46 | 47 | ### **Как получить права root на смартфоне?** 48 | 49 | Самый простой и актуальный способ — использовать [Magisk](https://magisk.me/), если он не работает, то искать конкретное решение для вашей модели или смириться. 50 | 51 | ### **Как написать вирус?** 52 | 53 | Никак, это запрещено [ст. 273 УК РФ](https://www.consultant.ru/document/cons_doc_LAW_10699/a4d58c1af8677d94b4fc8987c71b131f10476a76/) 54 | 55 | ### **Как шифровать данные?** 56 | 57 | Если нужно шифровать просто что-нибудь, то лучше использовать библиотеку [Tink](https://github.com/google/tink). Но как правило нужно шифровать преференсы или файлы. В этом случае нужно использовать библиотеку [security-crypto](https://developer.android.com/jetpack/androidx/releases/security) из Android JetPack 58 | 59 | ### **Как сделать проверку на root?** 60 | 61 | Использовать библиотеку [RootBeer](https://github.com/scottyab/rootbeer) или [SafetyNet Attestation API](https://developer.android.com/training/safetynet/attestation) 62 | 63 | 64 | Для проверки рута из натива есть неплохая и удобно дописываемая либа: 65 | https://github.com/DimaKoz/meat-grinder 66 | 67 | У неё даже есть [демо приложение](https://github.com/DimaKoz/meat-grinder/blob/master/apk/NativeRootChecker_1_0_0.apk) 68 | 69 | Но magiskhide она пробить всё равно не может, зато может выявить более примитивные велосипеды пытающиеся спрятать рут, или инструменты хукающие из андроид рантайма, например xposed 70 | 71 | ### **Не могу установить/заставить работать/скачать %название инструмента%, что делать?** 72 | 73 | Если не получается что-то сделать по официальной инструкции, то тут возможно два варианта: 74 | 75 | 1. Нарушены системные требования (версии библиотек и т.п.) 76 | 2. Вы используете не ту версию, которая описана в инструкции 77 | 78 | Вторая проблема решается просто — всегда сверяйтесь с версиями утилит для которых написан мануал. 79 | 80 | С первой проблемой все несколько сложнее, потому что системные требования не всегда очевидны. В большинстве случаев от этого спасает Docker, т.к. позволяет не гадить в системе и легко создавать нужные окружения. 81 | 82 | ### **Чем декомпилировать код приложения?** 83 | 84 | Если денег нет, то [Jadx](https://github.com/skylot/jadx), если деньги есть то [Jeb](https://www.pnfsoftware.com/jeb/android) 85 | 86 | ### **Как изменить поведение чужого приложения?** 87 | 88 | Распаковать с помощью [apktool](https://ibotpeaches.github.io/Apktool/), внести правки в smali-код в любом текстовом редакторе, собрать с помощью apktool обратно и подписать своим ключом. 89 | 90 | ### **Как подписать пересобранное приложение?** 91 | 92 | ```bash 93 | # Сгенерировать ключ 94 | $ keytool -genkey -v -keystore fake.keystore -storepass fake-fake -alias fake -keypass fake-fake -keyalg RSA -keysize 2048 -validity 10000 95 | 96 | # "Выровнять" и подписать приложение 97 | $ zipalign -c 4 app-release/dist/app-release.apk 98 | $ apksigner sign --ks fake.keystore --ks-key-alias fake --ks-pass pass:fake-fake --key-pass pass:fake-fake app-release/dist/app-release.apk 99 | ``` 100 | 101 | ### **Можно ли изменить приложение с сохранением оригинальной цифровой подписи?** 102 | 103 | Нет 104 | 105 | ### **Код приложения обфусцирован, всюду китайские символы и зашифрованные строки. Что делать?** 106 | 107 | Простые случаи обфускации вполне себе разматывает [Jadx](https://github.com/skylot/jadx), для более сложных можно применить [Simplify](https://github.com/CalebFenton/simplify) или [DeGuard](http://apk-deguard.com/). Но иногда вообще ничего не помогает и придется тратить часы/дни/годы на распутывание поведения приложения. 108 | 109 | ### **Как получить apk файл приложения?** 110 | 111 | Взять с сайта [APKPure](https://apkpure.com/)/[APKMirror](https://www.apkmirror.com/) или [стянуть](https://github.com/Android-Guards/apk-extractor) уже установленное с устройства. 112 | 113 | ### **Где почитать про уязвимости в приложениях и техники их устранения** 114 | 115 | - [OWASP Mobile Top Ten](https://owasp.org/www-project-mobile-top-10/) 116 | - [OWASP Mobile Application Security Verification Standard](https://github.com/OWASP/owasp-masvs) 117 | - [Security Code Smells in Android ICC](https://arxiv.org/pdf/1811.12713.pdf) 118 | - [android-app-vulnerability-benchmarks](https://bitbucket.org/secure-it-i/android-app-vulnerability-benchmarks/src/master/) 119 | - [Oversured(blog)](https://blog.oversecured.com/) 120 | 121 | ### **Меня посадят если я буду реверсить чужие приложения?** 122 | 123 | Может да, а может и нет. Зависит от возможности соблюсти все необходимые условия предусмотренные законодательством. Подробности есть в [этой](https://xakep.ru/2016/09/02/reverse-rights/) статье 124 | --------------------------------------------------------------------------------