GrdSetAccessCodes перехват кодов доступа

Добрый день.

Для GrdSetAccessCodes,  в описании написано:
Рекомендуется хранить коды доступа в приложении в зашифрованном виде и динамически собирать их и проверять их целостность непосредственно перед помещением в хэндл. Не следует хранить коды "в чистом виде".

Но меня волнует возможность перехвата в момент вызова функции GrdSetAccessCodes
Я полагаю, что если при помощи windbg, взломщик доберется до вызова функции GrdSetAccessCodes.
То у него в наличие будет ассемблерный код вычисления кодов и его будет возможно прочитать.

вот пример из демо приложения.

nRet:= GrdSetAccessCodes( hGrd,                   { Handle to Guardant protected container }
                            (dwPublic + CryptPU),     { Must be already specified }
                            (dwPrivRD + CryptRD),     { Must be already specified }
                            (dwPrivWR + CryptWR),     { == 0 if not needed }
                            (dwPrivMS + CryptMS));    { == 0 if not needed }

Существуют ли способы спрятать вызов GrdSetAccessCodes или на стеке создать что-то более сложное?
Или может существуют какой-нибудь другой способ установить коды доступа, более надежно?

Я использую Guardant Code

С уважением, Евгений.

Re: GrdSetAccessCodes перехват кодов доступа

Существуют и другие способы перехвата кодов доступа. Но я бы на счёт этого не волновался: знание кодов не даёт ничего для доступа к существующей информации в ключе. А с учётом того, что коды с правом записи (PrivateWR и PrivateMST) вообще не нужны для работы защищённого приложения - и подавно! Ведь обновления в ключ загружаются зашифрованными, код - тоже.
Если защита построена правильно, то потенциальный взломщик, даже зная все коды доступа, сможет только стереть существующие, и загрузить в ключ свои маску и код. Но если у него будут работающие маска и код, то защита - полностью скомпрометирована, и можно абсолютно спокойно создавать клоны ключей со своими кодами доступа!

Re: GrdSetAccessCodes перехват кодов доступа

romik пишет:

Существуют и другие способы перехвата кодов доступа. Но я бы на счёт этого не волновался: знание кодов не даёт ничего для доступа к существующей информации в ключе. А с учётом того, что коды с правом записи (PrivateWR и PrivateMST) вообще не нужны для работы защищённого приложения - и подавно! Ведь обновления в ключ загружаются зашифрованными, код - тоже.
Если защита построена правильно, то потенциальный взломщик, даже зная все коды доступа, сможет только стереть существующие, и загрузить в ключ свои маску и код. Но если у него будут работающие маска и код, то защита - полностью скомпрометирована, и можно абсолютно спокойно создавать клоны ключей со своими кодами доступа!

Все верно, самые "чувствительные" данные это содержимое маски ключа.

Re: GrdSetAccessCodes перехват кодов доступа

Спасибо за ответы.

Скажите пожалуйста. Он же при помощи функции GrdRead сможет считать все данные с ключа. Т.е. как раз и получить все маску? Потом ее останется только записать в другой ключ.

Re: GrdSetAccessCodes перехват кодов доступа

li.volker пишет:

Он же при помощи функции GrdRead сможет считать все данные с ключа.

Нет конечно, GrdRead позволяет считывать данные только из тех областей памяти, которые не защищены аппаратными запретами.
Защищенные ячейки и их частные случаи — аппаратные алгоритмы, так считать нельзя.

Данные из защищенных ячеек можно считывать при помощи GrdPI_Read и лишь в случае если:

  • известно числовое имя защищенной ячейки

  • для этой ячейки активирован сервис чтения данных

  • введен правильный пароль для чтения именно одной конкретной защищенной ячейки (пароли у каждой ячейки свои и неправильно их можно ввести "по умолчанию" только 10 раз, потом ячейка заблокируется)

Re: GrdSetAccessCodes перехват кодов доступа

Спасибо, за ответ.

Защищенные ячейки - то что нужно