Рекомендации Безопасность и дизайн очень подробно описывают различные методы, чтобы злоумышленнику было труднее скомпрометировать реализацию биллинга в приложении.
Особо следует отметить, насколько легко реконструировать файл .apk
, даже если он был запутан через Proguard. Поэтому они даже рекомендуют модифицировать весь пример кода приложения, особенно «известные точки входа и выхода».
Чего мне не хватает, так это любой ссылки на объединение определенных методов проверки в один метод, например статического Security.verify ()
, который возвращает логическое
: Хорошая практика проектирования ( сокращение дублирования кода, возможность повторного использования, упрощение отладки, самодокументирование и т. д.), но все, что нужно сделать злоумышленнику сейчас, - это идентифицировать этот метод и заставить его всегда возвращать true
...Поэтому независимо от того, сколько раз я его использовал, с задержкой или без, случайно или без, это просто не имеет значения.
С другой стороны, в Java нет макросов, как в C / C ++, что позволяет уменьшить дублирование исходного кода, но не имеет единой точки выхода для функции verify ()
.
Итак, мои вопросы:
Существует ли внутреннее противоречие между хорошо известными методами разработки / программирования программного обеспечения и дизайном для так называемой безопасности? (по крайней мере, в контексте Java / Android / безопасных транзакций)
Что можно сделать, чтобы смягчить побочные эффекты «дизайна для обеспечения безопасности», который кажется «выстрелом себе в ногу» с точки зрения чрезмерного усложнения программного обеспечения это могло быть проще, легче в обслуживании и легче отлаживать?
Можете ли вы порекомендовать хорошие источники для дальнейшего изучения этого предмета?