Защита ПО новые подходы и решения Белоконь Андрей Одесса The business of security, is the business of paranoia
Бизнес модель ПроизводительПокупатель распространение оплата код регистрации Ограниченное использование Генерация кода регистрации Зарегистрированная копия
Уязвимости модели Модификация кода (crack) Использование ключа на > 1 компьютере Распространение ключа Создание KeyGen
Последствия атак Модификация кода (crack) модификация кода в новой версии Использование ключа на > 1 компьютере использование HardwareID Распространение ключа блокирование ключа в новой версии Создание KeyGen изменение схемы генерации ключей
Защита кода от модификации EXECryptor AsProtect PELock Armadillo
Шифрование кода AsProtect {$I reg_crypt_begin.inc} Mess := 'Registered version'; {$I reg_crypt_end.inc} EXECryptor {$I crypt_user_start.inc} Mess := 'Registered version'; {$I crypt_user_end.inc} Код исполняется только в зарегистрированной версии
EXECryptor дополнительные средства шифрования кода {$I crypt_start.inc} // Участок зашифрованного кода if TrialMode then ShowMessage(‘Unregistered’); {$I crypt_end.inc} {$I crypt_single_start.inc} // Однократно исполняемый участок. // Код разрушается после исполнения RegName:=SecureRead(‘RegName’); RegCode:=SecureRead(‘RegCode’); {$I crypt_single_end.inc}
EXECryptor Safe API function Safe_GetProcAddr(ModuleName,ProcName: PChar): TFarProc; function Safe_MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; function Safe_LoadLibrary(lpLibFileName: PAnsiChar): HMODULE; stdcall; function Safe_GetModuleHandle(lpModuleName: PAnsiChar): HMODULE; stdcall; function Safe_FreeLibrary(hLibModule: HMODULE): BOOL; stdcall; function Safe_GetProcAddress(hModule: HMODULE; lpProcName: LPCSTR): TFarProc;
Надежные алгоритмы генерации ключей Криптография с открытым ключом M - регистрационная информация K - ключ регистрации F - алгоритм проверки ключа F(M, K) = 0 find K = G(M) is hard
Алгоритмы
Устойчивость алгоритмов
HFE x 1 x 2 + x 2 + x 3 = a 1 x 1 x 2 + x 1 x 3 + x 3 = a 2 x 1 + x 2 x 3 + 1= a 3 x i in 0,1
HFE x 1 x 2 + x 2 + x 3 = a 1 x 1 x 2 + x 1 x 3 + x 3 = a 2 x 1 + x 2 x 3 + 1= a 3 x i in 0,1 hash of registration info
HFE x 1 x 2 + x 2 + x 3 = a 1 x 1 x 2 + x 1 x 3 + x 3 = a 2 x 1 + x 2 x 3 + 1= a 3 x i in 0,1 hash of registration info x 1 x 2 x 3 - registration key
HFE public key x 1 x 2 + x 2 + x 3 = a 1 x 1 x 2 + x 1 x 3 + x 3 = a 2 x 1 + x 2 x 3 + 1= a 3 x i in 0,1 hash of registration info x 1 x 2 x 3 - registration key
HFE: устойчивость EuroCrypt Nessie (New European Schemes for Signatures, Integrity and Encryption) HFE-based: Flash, Sflash, Quartz На практике HFE 80 бит эквивалентна (по стойкости) RSA 512 бит
Сравнение ПО генерации стойких ключей
Короткие ключи AsProtect ZhZShJt8ob4ffXI/Z0e2BQMM cn231YAXFasi1645ScnbB/NC qNlnS2GtPJVCgcsMysPxG6/X v3wXFCgtMdfY90I3mC4hM1d3 nyvP6OETOfbYpkV7PSztvboa YCKck2hwsnbp7aomNcxsdDv9 tUsl2+o1ggag6mobCSqkmesr KXY= HardKey EM6KX-LYHDE-43U8J-KNANS
Короткие ключи Удобство распространения (в печатном виде, по телефону, факсу …) Отсутствие вложений и связанных с этим проблем Не требует особых знаний у пользователя
HardKey System
HardKey System
HardKey System
HardKey System
HardKey System // Проверка ключа регистрации function VerifyRegCode(const RegName, RegCode: string; var LicType: integer; var LicName,LicInfo: string; var Expire: TDateTime): Boolean; // идентификатор оборудования function GetHardwareID: string; // защищенная работа с реестром function SecureRead(const Name: string): string; procedure SecureWrite(const Name,Value: string); // текущая дата function SecureGetDate: TDateTime;
ActivateSoft.net License Management ServerUser PC User enters product key User prompted to activate (up to 14 days of grace period) Choice of activation method: Internet Automatic activation or Browser User manually submits hardware ID “2F75M” and product key 36JJW - XYAZ7 - L4UP7 –ABUJG - TQBAR License server looks up for the product key 36JJW - XYAZ7 - L4UP7 – ABUJG - TQBAR Verifies number of installations allowed by EULA, increases the counter and stores the hardware ID “2F75M” The server returns activation number to the user: 24M4X - NX3SQ - CT3WC-AWL7C - 6AKAH Internet Activation key is automatically applied Browser The user enters activation key into the activation wizard Activation successful An off-line certificate is automatically created; the activation wizard will no longer show up
ActivateSoft.net License Enforcement –License key generation, verification and activation based on strong HFE –All features of HardKey licenses –SDK source code (C/C++/Delphi/VB) –ASProtect & EXECryptor integration for code encryption
ActivateSoft.net Online License Management –Block stolen keys online –Product key reminder –Online key generator for many registration services –Automatically blocks licenses with suspicious activity
The business of security, is the business of paranoia ActivateSoft.net HardKey System EXECryptor Ваши вопросы - наши ответы