Как обеспечить безопасность мобильного SDK при передаче третьим лицам?
Есть задача, предоставить партнерам SDK для мобильный разработок. Но при этом очень бы не хотелось, чтобы исходный код самого SDK был доступен, т.е. необходимо отдать blackbox c документацией к нему.
Прошу поделится опытом реализации, плюсами и минусами такого подхода.
Вполне логично использовать обфускацию кода, но есть ли возможность отдавать SDK в уже собранном формате, а не в исходниках, даже обфусцированных?
На чем написано СДК? Вообще можете собрать его в библиотеку целевой платформы (jar для андроида, например) и отдавать уже ее. Возможность декомпиляции все равно будет, но строго говоря она есть всегда.
SDK будет как для Android так и для iOS, но острее стоит вопрос по Android.
Я прекрасно понимаю, что декомпиляция и деобфускация возможны, цель повысить планку вхождения кракеров.
Т.е. можно собрать библиотеку в JAR, предварительно обфусцировав... А можно ли ее еще залочить, так чтобы она инициализировалась только по ключу?
Нужно собрать SDK в библиотеку. Для андроида это - jar. Для IOS не знаю, но то что там такое есть - 100%. Можете код конечно обфусцировать, ради бога. А вот залочить - это уже внутренняя реализация, как сделаете - так и будет. Хоть с сервером пусть общается и ключ спрашивает, хоть просто криптографией строку проверяет. Но это - внутренний ваш механизм, и все. И естественно при декомпиляции этот код злоумышленник может вырезать и использовать без ключа.
учитывая что в IntelliJ Studio (и в новых Android Studio) вполне себе рабочий встроенный декомпилятор - то либо обфускация либо...отдавать библиотеку в native code + обертка - реверсить нативный код на C++ все же сложнее чем деобфусцировать java-код. в отношении iOS: если возможно - НЕ отдавать версию библиотеки для симулятора (раз уж эта библиотека такая сверхценная) поскольку она x86 а достать HexRays для x86 проще чем для ARM.
Разумеется так можно сделать если в самой библиотеке есть какая то ценность, если это просто обертка серверного API - что мешает тупо перехватывать трафик и написать аналог клиентской библиотеки (SSL pinning в данном случае вряд ли спасет)