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>

Большая часть другого контента - это шестнадцатеричные данные или некоторые общеизвестные символы, так что найти эту строку не так сложно для того, кто знает, что он ищет.

Другие вопросы по тегам