Xamarin Android - защита ключей API с помощью Android NDK
Здесь написана отличная статья
https://medium.com/@abhi007tyagi/storing-api-keys-using-android-ndk-6abb0adcadad
о хранении секретных API-секретов максимально безопасным.
Я работаю с Xamarin.Android. К сожалению, я изо всех сил пытаюсь адаптировать эту концепцию к Visual Studio 2017 и Xamarin.Android и Google также не помогли мне.
Кто-нибудь знает, как я могу добиться этого в Xamarin C#? Большое спасибо за помощь заранее.
1 ответ
Вы можете использовать PInvoke в Xamarin как обычно, если хотите вызывать нативный код из своего кода C#. Подробнее об этом вы можете прочитать в официальной документации.
Но, как указано в комментариях, это не улучшит безопасность вашего приложения, если у вас нет большой встроенной библиотеки с зашифрованными строковыми литералами и принудительно встроенными функциями, которые с ними справляются.
Редактировать: Почему это легко перепроектировать небольшой двоичный файл
Рассмотрим следующий код C++ (test.cpp):
#define GET_KEY(n) \
const char *GetKey##n() \
{ \
const char * key = "mykey" #n; \
return key; \
}
GET_KEY(1)
GET_KEY(2)
GET_KEY(3)
GET_KEY(4)
GET_KEY(5)
GET_KEY(6)
GET_KEY(7)
GET_KEY(8)
GET_KEY(9)
Теперь я собираю это с clang++ -shared -o test.so test.cpp
и просмотрите полученный test.so в шестнадцатеричном редакторе. Среди других шестнадцатеричных данных я могу найти следующую строку:
mykey1<0x00>mykey2<0x00>mykey3<0x00>mykey4<0x00>mykey5<0x00>mykey6<0x00>mykey7<0x00>mykey8<0x00>mykey9<0x00>
Большая часть другого контента - это шестнадцатеричные данные или некоторые общеизвестные символы, так что найти эту строку не так сложно для того, кто знает, что он ищет.