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

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

Особенно примечательно то, насколько легко перепроектировать файл .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. Если вы хотите, я могу упомянуть сайт после поиска.