Эффективность защиты только средствами API.
Здравствуйте.
Посмотрел примеры защиты программ с помощью Guardant API. У меня сложилось мнение (возможно ошибочное), что защита программ только средствами Guardant API (без применения автоматической защиты) очень мало эффективна, поскольку ее можно легко снять, как вы говорите, «бит-хаком». В частности, Вы пишите:
«6. Усложните логику обработки кодов возврата функций API. Если вы будете проверять код возврата функции API простым сравнением, хакеру не составит труда уничтожить это сравнение прямо в теле приложения – и таким образом снять защиту.»
Однако в уроке 3.3 приводите код:
// Проверяем подлинность подписи
nRet = GrdVerifySignSource( GrdECC160_PUBLIC_KEY_SIZE, abyPublicKey ,
sizeof(szMessage), szMessage,
sizeof(szDigitalSign), szDigitalSign, NULL );
if(nRet)
cout << "G rdVerifySign() failed!" << endl;
else
{
// Алгоритм принятия решения о выборе напитка
random_shuffle(ans.begin(),ans.end(),p_random);
cout << "T oday your drink is ";
if (q=="t")
cout<<ans [0];
else
cout<<ans [1];
cout << " !!!" << endl;
}
cout << "= =========================================="<< endl;
Здесь опять же обычное сравнение. Как можно обойтись без сравнения, я никак не могу понять. Можете привести хотя бы простенький пример, чтобы можно было по аналогии развивать защиту своего приложения?
В общем, у меня сложилось впечатление, что эффективная защита может быть только в том случае, если она установлена в комплексе с автоматической защитой, исключающей возможность дизассемблирования. В этом случае, использование Guardant API позволяет свести к минимуму возможность эмулировать ключ
Однако автоматическая защита, судя по всему, уменьшает быстродействие программы, поскольку использует механизм виртуальной машины. Что делать, если для меня важно быстродействие программы, так как в ней заложены расчетные алгоритмы?? Подскажите, пожалуйста, прав ли я, что без автоматической защиты программа очень легко взламывается?