Как стать автором
Обновить

Комментарии 9

Спасибо за статью. Очень познавательно. Но признайтесь, что нижеприведенный метод Вы не тестировали.

std::string SignatureHelper::createSignature(std::string inputString) {
    std::string outputString = std::string();
    for (int i = 0; i < inputString.size(); i++) {
        outputString[i] = inputString[i] + android_get_device_api_level();
    }
    return outputString;
}

Я предлагаю Вам задуматься о трех моментах:

1) Какого размера буффер выделяется под данные, при выполнении

std::string outputString = std::string();

2) Куда Вы записываете очередной символ операцией присваивания

outputString[i] =

3) Насколько безопасна такая операция, причем тут UB и переполнение буффера?

А, Вы про это. Да, есть такое, в проде такой код использовать нельзя. Он тут скорее для иллюстрации логики подмешивания дополнительных данных. У меня в нём ещё и корнер-кейсы, вроде того, что android_get_device_api_level может вернуть -1, не учтены.

Я на C++ давно уже не писал, так что это точно не хороший код)

Статья прекрасна. Когда копал в ту же сторону находил ещё один способ защиты - можно было после проведения покупки через google play запрашивать целостность приложения. Но не помню точно как это работало(( вроде можно было запросить у гугла проверку покупки и там заодно сверить хеш от установленного пакета, чем занимался плеймаркет на пользовательском устройстве. Получалось что для взлома приложения дополнительно требовалось бы ещё и сделать иньекцию в google play, чтобы он обманывал сервера гугла о целостности приложения.

С выводами полностью согласен - после передачи приложения пользователю его уже не защитить никак. Даже на ios с jailbeake можно вытащить ipa в расшифрованном виде для дальнейшей декомпиляции.

Есть такое) В статье это больше для примера того, как усложнить восприятие кода для атакующего.
И насколько я понимаю, при 25 или даже 100 итерациях погрешность из-за чисел с плавающей запятой всё равно будет слишком мала и при округлении "нивелируется".
Это больше актуально когда все вычисления во float (особенно умножение) или когда итераций цикла миллионы или миллиарды.

Если ставить вопрос ребром: «Можно ли защитить мобильное приложение?». На мой взгляд, нет. 

Уже давно всю плешь проклевали: если устройство, на котором крутится защищённое ПО, находится в руках у атакующего, а ключи находятся на нём же, то взлом неизбежен. Чисто потому, что тогда атакующий тупо подключается к схеме тем или иным путём и считывает всё, что ему надо.

наращивать слои защиты нужно до определённого момента, когда вы поймёте, что сейчас достаточно.

Ваистену так. "Чтобы убежать от медведя, достаточно бежать быстрее одного из прочих убегающих." (c)

НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий