Intereting Posts
Android: невозможно загрузить из магазина воспроизведения File.lastModified () никогда не был установлен с file.setLastModified () Как перенаправить вывод моего журнала с logcat на SD-карту на устройстве Android? Google analytics easytracker вызывает исключение Java-соединения Подключить 2 или более Android-клиентов напрямую Что такое «android.security.MessageDigest»? JNI Android – Преобразование char * в массив байтов и возврат его в java Ошибка: не удается изменить зависимости конфигурации «: приложение: _debugAnnotationProcessor» после того, как оно было разрешено ListFragment OnListItemClick не вызывается Android WebView Javascript из активов Похоже, что Volley не работает после того, как ProGuard запутался Безопасно ли завершить андроидную деятельность из фоновой темы? Как использовать тестовое тестирование Espresso для React Native? GetHttpResponseCode () возвращает -1 в android 2.2 Play_licensing выбрасывает ошибку AIDL с загрузчиком_библиотеки для расширения APK с помощью Gradle

Хорошая разработка программного обеспечения и безопасность

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

Особенно примечательно то, насколько легко перепроектировать файл .apk , даже если он запутан через Proguard. Поэтому они даже рекомендуют модифицировать весь примерный код приложения, особенно «известные точки входа и точки выхода».

То, что я считаю отсутствующим, – это любая ссылка на обертку определенных методов проверки в одном методе, например static Security.verify() которая возвращает boolean : хорошая практика проектирования (сокращение дублирования кода, повторное использование, упрощение отладки, самодокументирование и т. Д.). .), Но все, что нужно сделать злоумышленнику, это определить этот метод и заставить его всегда возвращать true … Поэтому, независимо от того, сколько раз я использовал его, откладывал или не откладывал, случайно или нет, это просто не имеет значения.

С другой стороны, Java не имеет макросов, как в C / C ++, что позволяет уменьшить дублирование исходного кода, но не имеет единственной точки выхода для функции verify() .

Поэтому мои вопросы:

Есть ли противоречие между хорошо известными методами разработки программного обеспечения и кодирования и дизайном для так называемой безопасности? (В контексте Java / Android / безопасных транзакций как минимум)

Что можно сделать для смягчения побочных эффектов «дизайна для безопасности», который кажется «стрельбой в ногу» с точки зрения чрезмерного усложнения программного обеспечения, которое могло бы быть проще, удобнее и легче отлаживать?

Можете ли вы порекомендовать хорошие источники для дальнейшего изучения этого предмета?

Solutions Collecting From Web of "Хорошая разработка программного обеспечения и безопасность"

Как обычно, это компромисс. Чтобы сделать ваш код сложнее для обратного проектирования / трещины, необходимо сделать его менее читаемым и сложнее в обслуживании. Вы решаете, как далеко продвинуться, основываясь на вашей предполагаемой пользовательской базе, ваши собственные навыки в этой области, время / стоимость и т. Д. Это не относится к Android. Наблюдайте за этой презентацией ввода-вывода Google для различных этапов обфускации и обеспечения устойчивости вашего кода. Затем решите, насколько вы готовы пойти на свои собственные приложения.

С другой стороны, вам не нужно обфускать / затвердеть и т. Д. Весь ваш код, только часть, которая имеет дело с лицензированием, и т. Д. Это, как правило, очень небольшая часть всей кодовой базы, и на самом деле не нужно Часто меняйте это, так что вы, вероятно, можете жить с ним, трудно следить / поддерживать и т. Д. Просто запишите несколько заметок о том, как это работает, поэтому вы напоминаете себе через 2 года :).

Производительность счетчика, которую вы описываете, является верхушкой айсберга … Нет программного обеспечения на 100% без ошибок при выпуске, так что вы делаете, когда пользователи начинают сообщать о проблемах?

Как устранить или отладить полевые проблемы после того, как вы отключили ведение журнала, трассировку стека и любую другую информацию, которая помогает реверсированным инженерам, но также помогает законной команде разработчиков?

Как бы ни были сложны методы обфускации, всегда есть способ их перепроектировать. Я имею в виду, если ваше программное обеспечение становится более популярным среди сообщества hakers, в конечном итоге кто-то попытается его перепроектировать.

Обфускация – это всего лишь способ сделать процесс обратного проектирования более жестким.

Так что упаковка. Я думаю, что многие методы упаковки доступны, но так же процесс их реконструировать.

Вы можете проверить http://www.tuts4you.com, чтобы узнать, сколько тонн направляющих доступно.

Я не эксперт, как и многие другие, но это мой опыт в процессе обучения обратному проектированию. Также недавно я увидел множество руководств для обратного проектирования приложений Android. Я видел даже в nullc0n (не уверен) CTF, было приложение в Reversing Android. Если вы хотите, я могу упомянуть сайт после поиска.