1 (изменено: belyankin12, 2017-01-12 21:23:35)

Тема: AHK: Проверка подлинности через md5

Здравствуйте. Имеется компилированный скрипт. Нужно узнать его md5 сумму, через этот же скрипт. Цель: проверка исходного кода на подлинность. У меня есть такие юзвери, которые не уважают мой труд и лезут в исходный код моего скрипта, меняя его под себя. Хочу положить этому конец, с помощью сравнения md5 суммы. Помогите, пожалуйста.

P.S. возможно вы сможете предложить более рациональные и надежные способы защиты исходного кода, либо проверки скрипта на подлинность. Буду очень рад этому.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

2

Re: AHK: Проверка подлинности через md5

Если проверять будет сам скрипт, то юзвери и в код проверки залезут. Защита кода, насколько я понимаю, хорошо реализована в AutoHotkey_H. Возможно, вам стоит подумать о переходе на этот вариант АНК. Правда, здесь он непопулярен.

3

Re: AHK: Проверка подлинности через md5

Юзвери эти у меня не слишком продвинуты, синтаксиса не знают, они только могут текст подправлять в msbox'ах . Потому эта защита довольно надежна будет.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

4

Re: AHK: Проверка подлинности через md5

Вот сейчас скачал mpress.exe с сайта ахк. Как пользоваться им я так и не понял, просто закинул в одну папку с ahk2exe. В итоге: через блокнот теперь ни одной функции вообще не видно, а если извлечь RC data через программу, там всего одна строка с повторяющимся Nul, в кодировке ANSI, а если преобразовать в кодировку UTF, то вообще пустота (копирую часть этого кода на форум, вставляется пустота). При этом компилированный скрипт запустился. Учитывая топик о скрытии исходного кода, точнее учитывая сколько там страниц, я понимаю что не все так просто с этим mpress. Можете мне объяснить особенности такой компиляции?

P.S. Насчёт md5 так же не забывайте, если можете помочь.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

5

Re: AHK: Проверка подлинности через md5

Главная особенность — что антивирус может начать ругаться на таким образом сжатый скрипт. С mg5 могу попозже написать, если никто не успеет.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Проверка подлинности через md5

Это единственный минус? У меня скрипт представляет собой программу-биндер. Проблем с передачей русского текста не будет? Кстати, я заметил что два разных скрипта (один на 300 строчек, другой на 7000), после компиляции стали весить примерно 400 кб, в то время как без mpress эти скрипты весили не только намного больше, но и вес их был разным (в зависимости от кол-ва сток). Так и должно быть?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

7

Re: AHK: Проверка подлинности через md5

Насчёт md5 так же не забывайте, если можете помочь.

https://autohotkey.com/board/topic/5957 … 5-and-md5/

8

Re: AHK: Проверка подлинности через md5

Я все ещё не подучил технический английский . Потому, я дождусь пользователя по имени teadrinker, который говорил, что все сделает. Но все равно спасибо.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

9

Re: AHK: Проверка подлинности через md5

belyankin12 пишет:

Проблем с передачей русского текста не будет?

Не должно быть никаких таких проблем. С размером — не оценивал, лишь бы работал.

MsgBox, % HashFile(A_ScriptFullPath)

HashFile(filename, hashType = "MD5")
{
   HASH_ALG := { MD2: CALG_MD2 := 32769
               , MD5: CALG_MD5 := 32771
               , SHA: CALG_SHA := 32772
               , SHA256: CALG_SHA_256 := 32780
               , SHA384: CALG_SHA_384 := 32781
               , SHA512: CALG_SHA_512 := 32782 }[hashType]
   if !f := FileOpen(filename, "r")
      return
   f.pos := 0
   f.rawRead(data, f.length)
   return CalcAddrHash(&data, f.length, HASH_ALG)
}

CalcAddrHash(addr, length, algid, byref hash = 0, byref hashlength = 0)
{
   static PROV_RSA_AES := 24, CRYPT_VERIFYCONTEXT := 0xF0000000, HP_HASHVAL := 0x0002
      
   if (DllCall("advapi32\CryptAcquireContext", PtrP, hProv, Ptr, 0, Ptr, 0, UInt, PROV_RSA_AES, UInt, CRYPT_VERIFYCONTEXT))
   {
      if (DllCall("advapi32\CryptCreateHash", Ptr, hProv, UInt, algid, UInt, 0, UInt, 0, "Ptr*", hHash))
      {
         if (DllCall("advapi32\CryptHashData", Ptr, hHash, Ptr, addr, UInt, length, UInt, 0))
         {
            if (DllCall("advapi32\CryptGetHashParam", Ptr, hHash, UInt, HP_HASHVAL, Ptr, 0, UIntP, hashlength, UInt, 0))
            {
               VarSetCapacity(hash, hashlength, 0)
               if (DllCall("advapi32\CryptGetHashParam", Ptr, hHash, UInt, HP_HASHVAL, Ptr, &hash, UIntP, hashlength, UInt, 0))
                  Loop % hashlength
                     hashstr .= Format( "{:02X}", *(&hash + A_Index - 1) )
            }
         }
         DllCall("advapi32\CryptDestroyHash", Ptr, hHash)
      }
      DllCall("advapi32\CryptReleaseContext", Ptr, hProv, UInt, 0)
   }
   return hashstr
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Проверка подлинности через md5

Спасибо большое.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

11

Re: AHK: Проверка подлинности через md5

belyankin12 пишет:

Можете мне объяснить особенности такой компиляции?

Mpress для визуальной защиты неплох, но если копнуть глубже, то он легко снимается.

Как сказал мой дед - Я твой дед

12

Re: AHK: Проверка подлинности через md5

sergeiplugatyr, как например поглубже? Судя по всему можно будет вскрыть через дамп памяти. Это уже довольно надежная защита: мои пользователи не сильно шарят в подобном. Есть способы попроще? Доступны обычному юзеру, который не знает, что это mpress?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

13

Re: AHK: Проверка подлинности через md5

belyankin12, пробовали скачать старую версию AutoHotkey 1.0.48.05? Вот если ею скомпилируете, то код будет недоступен вообще. Но при этом придётся отказаться от функционала  AutoHotkey_L v1.1.24.04, если он был задействован.

14

Re: AHK: Проверка подлинности через md5

Если бы я ещё знал, какой у меня АХК . Можно ссылку на старую AHK?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

15

Re: AHK: Проверка подлинности через md5

Нажмите ПКМ на файле AutoHotkey.exe и откройте вкладку "Версия".
Вот старая версия: AutoHotkey104805.zip. Там в компиляторе есть опция "установить пароль".

16

Re: AHK: Проверка подлинности через md5

У меня версия 1.1.24.02, хорошо, я попробую это. Спасибо большое.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

17

Re: AHK: Проверка подлинности через md5

teadrinker пишет:

Не должно быть никаких таких проблем. С размером — не оценивал, лишь бы работал.

Запускаю его и msgbox выдаёт строчку символов. А не могли бы подсказать, зачем ваш код и где его можно применить ?

GD

18

Re: AHK: Проверка подлинности через md5

Этот код создаёт md5 хеш файла. Сам по себе код и алгоритм md5 уже устарели. Хеш применяется для проверки целостности и сравнения данных.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19

Re: AHK: Проверка подлинности через md5

teadrinker Т.е. выглядит это так ?:
- В скрипт вставляется алгоритм MD5 или его аналоги, для получения "секретного кода" этого же скрипта.
- Далее в скрипт где-нибудь вставляется проверка на этот "секретный код" и если он не совпадает, то скрипт прекращает работу.
- "секретный код" может не совпасть, только в том случае, если каким-то образом изменить содержание скомпилированного скрипта.

GD

20

Re: AHK: Проверка подлинности через md5

Да, примерно так, за исключением того, что не удастся в скрипт вставить его «секретный код», т. к. после того, что мы что-либо вставим, секретный код изменится.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

21

Re: AHK: Проверка подлинности через md5

teadrinker Значит по максимуму стараешься скрипт сделать функциями и классами, потом выносишь все классы и функции в отдельный файл, потом получаешь "секретный код" файла с функциями и классами, а уже в основном файле делаешь проверку на "секретный код" ? Или я опять че-то напутал.

GD

22

Re: AHK: Проверка подлинности через md5

Можно так. Но обычно хеш считается для скомпилированного файла и заносится в метаданные.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

23

Re: AHK: Проверка подлинности через md5

teadrinker пишет:

Но обычно хеш считается для скомпилированного файла и заносится в метаданные.

Типо:
- полностью скомпилировал скрипт "test"
- потом отдельным скриптом "hash", получил "секретный код" скрипта "test"

А дальше как ? Можете объяснить ?

GD

24

Re: AHK: Проверка подлинности через md5

Так это смотря какая задача у вас. Вообще хеш файла считается не для защиты от изменений злоумышленниками, а просто чтобы проверить, не нарушена ли его целостность, например, при скачивании. Если хотите защитить код, шифруйте с паролем при компиляции (у AHK_H есть такая возможность), но и это не гарантирует от взлома.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

25 (изменено: Botsy, 2020-11-05 15:51:42)

Re: AHK: Проверка подлинности через md5

Так это смотря какая задача у вас.

Пока в мире пандемия и карантин - появилось много свободного времени. Смотрю новые возможности, то тут, то там пригодится. Сейчас появилось хоть какое-то абстрактное представление про хэш сумму файла и для чего это.

Защита кода тоже интересна, хотя глобально это вряд ли осуществимо. Если взламывают новые игры и программы, которые делают многомиллионные компании, то скрипты... Вроде для скриптов можно использовать Mpress, UPX, какие-то настройки компилятора ahk и обфускацию - и это в какой-то степени поможет скрыть код до уровня памяти процессора.

GD

26

Re: AHK: Проверка подлинности через md5

Botsy пишет:

до уровня памяти процессора

Че прям сразу до регистров можно или только до кеша?

0xFFFFFF
0xFF0000
0xFFFFFF

27 (изменено: Botsy, 2020-11-05 16:14:41)

Re: AHK: Проверка подлинности через md5

stealzy пишет:

Че прям сразу до регистров можно или только до кеша?

Понятия не имею. Походу там речь была не о процессоре, а какой-то другой "памяти".

GD

28

Re: AHK: Проверка подлинности через md5

Процесса.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

29

Re: AHK: Проверка подлинности через md5

Botsy, на форуме есть правила, не злоупотребляйте цитированием. У вас только в этой теме 3 сообщения, в которых вы цитируете предыдущие.
Исправьтесь, пожалуйста.

0xFFFFFF
0xFF0000
0xFFFFFF

30

Re: AHK: Проверка подлинности через md5

stealzy Хорошо, откажусь от этого. А почему это написано в правилах, типо что в цитировании плохого, что его так сильно ограничили ?

GD

31

Re: AHK: Проверка подлинности через md5

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

32

Re: AHK: Проверка подлинности через md5

ypppu пишет:

Используйте  цитирование когда это нужно

А нужно это только тогда, когда без цитирования будет непонятно, на что вы отвечаете. В случае же, когда отвечаете на предыдущий пост, чаще всего использование цитирования излишне.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder