(2014-07-18 19:43:45 отредактировано fsdb)

guardant API . Общие принципы

Добрый день.  я хотел бы использовать guardant API
программирую на Delphi
нашел исходники  с демо примером. в целом ничего сложного, но некоторые срочки меня в смуту вогнали. ответьте по пунктам пожалуйста.

ключ SIgn
1)получается коды доступа - Public, PrivateRead и так далее (то что нужно в конкретном случае ) вписываются прямо в саму программу.?
2)на против переменных написано на английском -  эти коды должны быть зашифрованы... что этим они имели ввиду... как защитить переменную зашифровать в программе?

в целом позже я нашел примеры на дельфи и часть вопросов снялось. очень большое число вариантов построения защиты..

Re: guardant API . Общие принципы

Здравствуйте.

fsdb пишет:

1)получается коды доступа - Public, PrivateRead и так далее (то что нужно в конкретном случае ) вписываются прямо в саму программу.?

Да, в качестве параметров соответствующей функции (GrdSetAccessCodes).

fsdb пишет:

2)на против переменных написано на английском -  эти коды должны быть зашифрованы... что этим они имели ввиду... как защитить переменную зашифровать в программе?

В наших примерах просто приводится некоторый способ указания (установки) кодов доступа (для функции GrdSetAccessCodes) в не совсем явном виде, а именно:

{ Definitions }
const CryptPU:DWORD=$8566783;       { Random value for access codes security }
         CryptRD:DWORD=$17d49c84;      { Random value for access codes security }
         CryptWR:DWORD=$9843de24;      { Random value for access codes security }
         CryptMS:DWORD=$47832845;      { Random value for access codes security }

Здесь определяются константы, которые будут участвовать в "запутывании" кодов доступа.

{ Data variables }
var  dwPublic:            DWORD;    { Must be encoded }
     dwPrivRD:            DWORD;    { Must be encoded }
     dwPrivWR:            DWORD;    { Must be encoded }
     dwPrivMS:            DWORD;    { Must be encoded }

Тут объявляются переменные для кодов доступа.

  dwPublic:= GrdDC_DEMONVK-CryptPU; { Must be encoded }
  dwPrivRD:= GrdDC_DEMORDO-CryptRD; { Must be encoded }
  dwPrivWR:= GrdDC_DEMOPRF-CryptWR; { Must be encoded }
  dwPrivMS:= GrdDC_DEMOMST-CryptMS; { Must be encoded }

Тут переменным присваиваются соответствующие значения кодов доступа из которых вычитаются значения ранее определенных констант.

  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 }

Здесь устанавливаются необходимые коды доступа с одновременным их "декодированием", путем сложения с ранее вычтенными значениями

Вся эта схема призвана указать на то, что коды доступа лучше хранить в приложении в неявном виде и применять по мере надобности.
Методы сокрытия кодов доступа могут быть разнообразными.

Re: guardant API . Общие принципы

Добрый день!
Использовали Guardant API 6 для Delphi.
Сейчас попытались перейти на Guardant API 7, но столкнулись с проблемой что в файле gnclient.ini поля в секции [SERVER] изменились:

было
PORT = 6001
MESSAGE_PORT = 6002

стало
PORT = 3186
MESSAGE_PORT = 3187

Из-за этого сетевые ключи не находятся. Если в ручную поменять то все начинает работать.
Вопрос: Как, или где, или какую функцию вызвать что автоматическая генерация файла gnclient.ini был с полями PORT = 6001 MESSAGE_PORT = 6002 ???

Re: guardant API . Общие принципы

Здравствуйте!
Через API изменить порты нельзя. Вы можете изменить порты в настройках сервера и затем получать gnclient.ini из веб-интерфейса сервера сетевых ключей Guardant. http://developer.guardant.ru/pages/view … Id=1277980

Re: guardant API . Общие принципы

А почему изменился порт?подмена файла используя не автоматизированные действия как то не правильно. Где мне взять GRDFWBO.OBJ в котором указаны порты  PORT = 6001 MESSAGE_PORT = 6002

Re: guardant API . Общие принципы

Здравствуйте!
gnclient.ini всегда генерируется автоматически. сервер сетевых ключей 6 версии использовал PORT = 6001
MESSAGE_PORT = 6002, в 7 версии из-за того, что часто возникали конфликты с другими приложениями, мы перешли на PORT = 3186 MESSAGE_PORT = 3187. Gnclient.ini генерируется в соответствии с использованным API.
Если Вы использовали именно Guardant API 6, то Ваше защищённое приложение не будет работать с сервером сетевых ключей Guardant 7. Так как у Guardant API 6 и 7 нет обратной совместимости.
Таким образом, если Вы переходите на 7 версию API, то сервер сетевых ключей 7 версии будет использовать порты PORT = 3186 MESSAGE_PORT = 3187 и gnclient.ini будет генерироваться с такими портами.
Файл GrdFWBO.obj находится в папке C:\Program Files (x86)\Guardant\SDK7\Lib\windows\x86

(2015-06-01 18:49:46 отредактировано vladimiromsk)

Re: guardant API . Общие принципы

Server Guardant API 6 и клиент Guardant API 7 работаю превосходно! Единственно надо вручную указать порты.
Файл GrdFWBO.obj находится в папке C:\Program Files (x86)\Guardant\SDK7\Lib\windows\x86 он там есть только у него по умолчанию порты PORT = 3186 MESSAGE_PORT = 3187.
Почему не сделать в API функцию которая будет инициализировать PORT, MESSAGE_PORT. Если для программистов guardant это слишком сложно, то как получить перекомпилированный файл GrdFWBO.obj в которой порты старые. Ведь ездить по всем клиентам и обновлять серверную часть вручную это ((((

Re: guardant API . Общие принципы

Ребят если кому потребуется что бы Guardant API 7 работал на старых портах, то меняем байты в файле GrdFWBO.obj по следующему смещению 4117 с 3187 на 6002  и по смещению 4102 с 3186 на 6001