Как рассчитать контрольную сумму .exe файла программы

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Как рассчитать контрольную сумму .exe файла программы

Сообщение Admin »

AlesDales писал(а): Кстати ссылка битая.
Не любит народ пользоваться тегами. Хитрые ссылки криво определяются phpbb3.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Как рассчитать контрольную сумму .exe файла программы

Сообщение Игорь Столяров »

AlesDales писал(а): Или ты думаешь, что человек скачавший взломанную программу будет заглядывать в ее сертификат и с ужасом обнаружит, что “подпись слетела”?
Нет ! Это всего лишь говорит о том, информация о внесении изменений в код программы есть.
Средства Windows - дают об этом информацию. Они достаточны для запрета запуска таких программ на "своих" компьютерах через права пользователя. Далее, если мы хотим использовать информацию о модификации кода для защиты программы от пиратского копирования, то должны анализировать ее в коде программы и уже принимать какие-то решения (запрещать запуск и т.д.). Разве я не прав ?
Вот ссылка в виде текста.

Код: Выделить всё

https://technet.microsoft.com/ru-ru/library/dd835564(v=ws.10).aspx
За теми кто отстал - не возвращаться. (С) Кодекс
AlesDales
Активист
Сообщения: 198
Зарегистрирован: 14 Июль 2005, 15:42

Как рассчитать контрольную сумму .exe файла программы

Сообщение AlesDales »

Игорь Столяров писал(а): Нет ! Это всего лишь говорит о том, информация о внесении изменений в код программы есть.
Так для этого достаточно проверять его контрольную сумму, с чего и началась эта дискуссия.

Один будет проверять контрольную сумму файла, другой считывать серийный номер процессора, ты будешь проверять достоверность сертификата во всех этих случаях достаточно отключить процедуру проверки.
Clarion начиная с 7 версии защищен платной системой защиты с ключами и жуткой криптоматематикой в суть которой я даже не стал вникать (что то из области векторных вычислений) – отключается изменением 3 байт.
в стране слепых правит одноглазый король (c) ...
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Как рассчитать контрольную сумму .exe файла программы

Сообщение Игорь Столяров »

Ну это классика. :)
Слабое место в любой навороченной системе защиты - это пистолет к голове человека, который знает пароль. :idied:

Безусловно речь не идет о том, что проверка целостности файла даст какую-либо защиту от нелегального копирования.
Мы можем самостоятельно изобретать расчет и проверку хеша файла, или можем воспользоваться подписью сертификатом.
Далее уже вопрос использования этой информации - если она явно проверятся в одном месте, то просто отключается и все
(при наличии соответствующих навыков и знаний). Если она будет проверяться в 20 местах программы и не приводить к
явным сообщения и отказу в запуске - отключение такой примитивной защиты долгий процесс, и как ты правильно заметил,
имеет смысл только для дорогих и востребованных приложений.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Как рассчитать контрольную сумму .exe файла программы

Сообщение Игорь Столяров »

Оставлю здесь, вдруг пригодится. ;)

Вот такой гибрид варианта Юрия и описания на ClarionHub выполняет расчёт
CRC32 полностью совместимый со стороними программами и сервисами:

Код: Выделить всё

    Module('ClarionRTL')
      TSC::CRC32(UNSIGNED pBuffer, ULong cbBuffer, ULong InitalCRC=0),ULong,Name('CLA$CRC32')
    end

! --- Расчёт CRC32 by Internal Clarion

TSC::IntCRC32        Procedure(String pStr)  !,ULONG
uCRC   ULong(0FFFFFFFFh)
  Code
  uCRC = TSC::CRC32(Address(pStr), Size(pStr), uCRC)
  Return BXOR(uCRC,0FFFFFFFFh)
Ну или напрямую (медленней, цикл в цикле):

Код: Выделить всё

! --- Расчёт CRC32 by Geoff Robinson -> https://clarionhub.com/t/crc32-document/4485/8

TSC::RobCRC32        Procedure(String pStr)  !,ULONG
lCount Long,Auto
uCRC   ULong(0FFFFFFFFh)
  Code
  Loop lCount = 1 to Size(pStr)
    uCRC = BXOR(uCRC,Val(pStr[lCount]))
    Loop 8 Times
      uCRC = BXOR(BSHIFT(uCRC, -1), BAND(0EDB88320h, -(BAND(uCRC,1))))
    end
  end
  Return BXOR(uCRC,0FFFFFFFFh)
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить