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