Autohotkey выдает ошибку

Здравствуйте. Помогите исправить данную форму. При попытке запустить ее Autohotkey выдает ошибку:

Code: Select all

#SingleInstance Force
MsgBox, 4, AutoCRM, Вы хотите изменить настройки запуска?, 5
Sleep, 1000
Send, {TAB}{SPACE}
IfMsgBox Yes
{
; Читаем сохранённые настройки из файла AppLauncher.ini
IniRead, viSurname, AppLauncher.ini, Settings, Surname, Фамилия
IniRead, viKeyScreen, AppLauncher.ini, Settings, KeyScreen, Клавиша для скриншотов
IniRead, viKeyCall, AppLauncher.ini, Settings, KeyCall, Клавиша для автозвонка

; Создаём окно с подписями, текстовыми полями и кнопками
Gui, New

Gui, Add, Text  , XM   YM   W60  R1, Фамилия:
Gui, Add, Edit  , X+10 YP   W200 R1 vEd_Surname,  %viSurname%

Gui, Add, Text  , XM   Y+M  W60  R1, Скриншоты:
Gui, Add, Edit  , X+10 YP   W200 R1 vEd_KeyScreen,  %viKeyScreen%

Gui, Add, Text  , XM   Y+M  W60  R1, Автозвонок:
Gui, Add, Edit  , X+10 YP   W200 R1 vEd_KeyCall,  %viKeyCall%

Gui, Show,, App Launcher
Return
}
; При нажатии Esc, закрытии окна или нажатии кнопки Exit скрипт завершается.
GuiEscape:
GuiClose:
OnButtonExit:
	ExitApp

; При нажатии Save значения из текстовых полей сохраняются в файл настроек AppLauncher.ini
OnButtonSave:
	Gui, Submit, NoHide
	IniWrite, %Ed_Surname%, AppLauncher.ini, Settings, Surname
	IniWrite, %Ed_KeyScreen%, AppLauncher.ini, Settings, KeyScreen
	IniWrite, %Ed_KeyCall%, AppLauncher.ini, Settings, KeyCall
	SoundPlay, *64
	ToolTip, Saved!
	Sleep 1000
	ToolTip
	Return

; При нажатии кнопки Start запускаем приложение с указанными в текстовых полях данными
OnButtonRun:

:*:пз::
FormatTime, CurrentDateTime,, dd.MM H:mm
SetKeyDelay 0 
Send %CurrentDateTime% перезвонить %viSurname%
Return

%viKeyScreen%::
Send, #{PrintScreen}

%viKeyCall%::
MouseMove, 150, 129
Click 158, 159
Sleep 1000
Click 617, 207
Return


}
else
{
    IniRead, viSurname, AppLauncher.ini, Settings, Surname, Фамилия
    IniRead, viKeyScreen, AppLauncher.ini, Settings, KeyScreen, Клавиша для скриншотов
    IniRead, viKeyCall , AppLauncher.ini, Settings, KeyCall, Клавиша для автозвонка

:*:пз::
FormatTime, CurrentDateTime,, dd.MM H:mm
SetKeyDelay 0 
Send %CurrentDateTime% прз %viSurname% (тут - что озвучили)
Return

%viKeyScreen%::
Send, #{PrintScreen}

%viKeyCall%::
MouseMove, 150, 129
Click 158, 159
Sleep 1000
Click 617, 207
Return
}

AutoHotkey — это приложение для автоматизации клавиатурных и мышинных действий на компьютере, которое позволяет создавать макросы и скрипты для управления приложениями. Однако, как и любое другое приложение, AutoHotkey иногда может вызывать проблемы. В этой статье мы рассмотрим несколько действенных способов исправления ошибок в AutoHotkey.

1. Обновление AutoHotkey

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

2. Проверка кода

Если ваш скрипт AutoHotkey не работает должным образом, проблема может быть в коде. Проверьте весь код на наличие опечаток, неправильных функций и переменных. Также нужно проверить, не нарушает ли ваш код синтаксис AutoHotkey.

3. Исправление ошибок в реестре

Если AutoHotkey все еще вызывает проблемы после обновления и проверки кода, то может быть проблема в реестре. Иногда установка приложений может изменить реестр и привести к ошибкам в AutoHotkey. Чтобы исправить это, нужно отредактировать реестр и удалить записи, связанные с AutoHotkey. Для этого следуйте инструкциям от Microsoft здесь.

4. Использование средства отладки

AutoHotkey поставляется с средством отладки, которое может помочь вам определить, почему ваш код не работает. Чтобы использовать средство отладки AutoHotkey, нужно запустить приложение с параметром /debug, например, «AutoHotkey.exe /debug script.ahk». После того, как ваш скрипт будет запущен, откроется окно отладки, где вы сможете увидеть, какие функции и переменные используются в вашем скрипте.

5. Использование сообщества AutoHotkey

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

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

1 2022-08-01 15:32:19 (изменено: Clannad5, 2022-08-03 10:54:49)

  • Clannad5
  • Участник
  • Неактивен

Тема: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

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

В папке по пути: «C:\Program Files\AutoHotkey»
есть файл «AutoHotkey.exe».
С помощью него можно запускать скрипты.ahk.

Но если ему убрать название скрипта, с таким же названием файла.exe, то вылезает подобная ошибка:
https://i.imgur.com/KtfpgYD.png

Чтобы не вылезала ошибка, файл AutoHotkey.exe должен называться так же как скрипт, то есть Autohotkey.ahk.
Я хочу найти решение, чтобы убрать эту ошибку.

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

Нужно мне это для того, чтобы файл можно было запускать только с другой программы.

Run, AutoHotkey.exe Script.ahk

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

Но хотелось бы обойтись без костылей и отключить эти надоедающие сообщения с диалоговыми окнами.
Условие такое, что изначально файла Script.ahk нету в разделе, он скачивается через UrlDownloadFile и потом запускается.

UPD: Пришлось брать исходники AHK и вырезать окно с ошибкой.
Теперь Интерпретатор просто закрывается, если отсутствует скрипт.

2 Ответ от teadrinker 2022-08-01 18:27:18

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

А зачем вообще запускать AutoHotkey.exe, если файла нет? Просто не запускайте его.

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

3 Ответ от Clannad5 2022-08-01 22:35:24

  • Clannad5
  • Участник
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

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

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

4 Ответ от teadrinker 2022-08-02 00:10:31

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

А разве эстетично совершать какое-либо действие, не проверив, есть ли условия для него? Хорошее программирование как раз и строится на таких принципах.
А в исходниках, конечно, всё можно поменять, можно даже сделать так, чтобы при старте котиков показывало.

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

5 Ответ от Clannad5 2022-08-02 12:55:43

  • Clannad5
  • Участник
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker
Жаль я не силён в компилирование таких исходников…
Если бы хотя бы видеопример какой-нибудь найти на этот случай.
Нужно будет попробовать конечно в этом разобраться.

Кстати, как вы говорите «Можно хоть котиков показывать», следовательно можно все названия команд поменять на свои?
Чтобы мои скрипты читались только моим интерпретатором? Или всё не так просто как кажется?

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

То есть:
1. Программа берет список всех команд исходника и шифрует каждую команду или только часть на выбор.
2. При шифровке сравнивает ahk скрипт на наличие схожих команд.
3. Шифрует все эти команды в ahk и в исходники, чтобы в дальнейшем они совпадали.
4. применяется некая обфускация кода .
5. Ahk скрипт компилируется исходя из готового .exe интерпретатора.

На выходе получаем скрипт, который шифрует все команды, функции, переменные.
В голове это всё звучит здорово.

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

6 Ответ от teadrinker 2022-08-02 13:49:33

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

если бы кто-то взялся бы за подобное

то не стал бы выкладывать результат в открытый доступ.

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

7 Ответ от Clannad5 2022-08-02 14:22:24

  • Clannad5
  • Участник
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker
ну тоже верно.
Хотя можно просто продавать способ, либо упаковывать на заказ.

8 Ответ от Phoenixxx_Czar 2022-08-02 19:30:38

  • Phoenixxx_Czar
  • Участник
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

AG был хорошим компилятором, пока автор не слил декомплиятор на него же.. Хотя там был шифр цезаря для кода.

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

9 Ответ от teadrinker 2022-08-02 23:28:51

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Если кому надо, я продаю свой вариант компилятора с защитой и шифрованием исходного кода, обращайтесь в телеграм.

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

10 Ответ от Clannad5 2022-08-03 02:17:27 (изменено: Clannad5, 2022-08-03 03:52:38)

  • Clannad5
  • Участник
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Phoenixxx_Czar

Недавно наткнулся на данный вид шифрования:


/*
;-------------------------------
  AHK source code Encryptor v2.7  By FeiYue

  1. This tool can encrypt the AHK script into a self decode script.

  2. Then you can use ahk2exe to compile the script into a program,
     combined with mpress.exe or upx.exe packers.
     Note: To compile the script, you must have a AutoHotkey.exe
     in the script directory.

  3. When you want to use the directory relative to the script(eg 001.jpg),
     Don't use A_ScriptDir, but use A_WorkingDir. It is recommended to backup
     the working directory to a variable at the beginning of the script,
     Then change the path to absolute path based on the variable (eg %dir%\001.jpg).

  4. When you want to Reload your own script, the built-in Reload command will fail,
     You can use Reload() function instead (it's added when encrypted).

;-------------------------------
*/

#NoEnv
#SingleInstance force
ListLines, Off
SetBatchLines, -1
Version = 2.7

fs=
(` %

Exec(str, Ahk="", arg="") {
  static MyFunc, base, ScriptName:=%True%
  s:=RegExReplace(str,"\s"), StrReplace(s,"u","",size)
  VarSetCapacity(str,(size+1)*4,0), s:=SubStr(s,InStr(s,"u")+1)
  Loop, Parse, s, u
    NumPut(A_LoopField, str, (A_Index-1)*4, "uint")
  ;-----------------------------
  Ahk:=Ahk ? Ahk : A_IsCompiled
    ? A_ScriptDir "\AutoHotkey.exe" : A_AhkPath
  IfNotExist, %Ahk%
  {
    MsgBox, 4096, Error!, `n`nCan't Find: %Ahk% !`n`n
    return, 0
  }
  if !MyFunc
  {
    x32:="5557565381EC4C0100008B9C24680100008BBC246C01000"
    . "08BAC24700100008B433C01D88038500F85380500008078014"
    . "50F852E0500008B706085F60F84FF04000031C9837864010F9"
    . "2C119D283E210894C245083C2788B341001DE8B4E188974243"
    . "C8B562085C90F84E504000031C08D3413EB0B83C00139C10F8"
    . "4D30400008B1486813C134765745075E9817C1304726F63417"
    . "5DF8B74243C8D04430346240FB7008D048303461C8B3085F60"
    . "F84A0040000B86500000001DE891C2466894424688D442460C"
    . "744246057726974C74424646546696C89442404FFD683EC088"
    . "944243C8D442475891C24C7442475476C6F62C7442479616C4"
    . "16CC744247D6C6F630089442404FFD683EC08BA65650000894"
    . "424548D44246A6689542472891C24C744246A476C6F62C7442"
    . "46E616C4672C64424740089442404FFD683EC08B9734100008"
    . "94424488D84248D00000066898C2499000000891C24C784248"
    . "D00000043726561C784249100000074655072C784249500000"
    . "06F636573C684249B0000000089442404FFD683EC088944245"
    . "C8D8424BE000000891C24C78424BE00000043726561C78424C"
    . "200000074654E61C78424C60000006D656450C78424CA00000"
    . "069706541C68424CE0000000089442404FFD683EC088944245"
    . "88D8424CF000000891C24C78424CF000000436F6E6EC78424D"
    . "30000006563744EC78424D7000000616D6564C78424DB00000"
    . "050697065C68424DF0000000089442404FFD683EC088944244"
    . "08D842481000000891C24C7842481000000436C6F73C784248"
    . "50000006548616EC7842489000000646C650089442404FFD68"
    . "3EC088D5C24608944244CC744241000000000C744240800000"
    . "000897C2404895C240CC7042400000000FF54243C83EC14807"
    . "C2460000F85E50200008D34AD04000000C7042400000000897"
    . "4244489742404FF54245483EC0885C089C30F841703000031C"
    . "085ED7415908B148789148383C00139C575F38B44244483E80"
    . "4C7040300000000C784249C0000000B000000BA0B000000C78"
    . "424A00000000D000000C78424A40000001100000031C0C7842"
    . "4A800000013000000EB0C89C283E2038B94949C00000069D28"
    . "300000089C183E10301C283C00183F86489948C9C00000075D"
    . "831D285ED742D669089D183E10369848C9C000000830000000"
    . "1D089848C9C000000330493D1C083C00189049383C20139D57"
    . "5D58B8424640100008B742458C744241C00000000C74424180"
    . "0000000C744241400000000C744241000000000C744240CFF0"
    . "00000C744240800000000C744240402000000890424FFD683E"
    . "C2089C78B842464010000C744241C00000000C744241800000"
    . "000C744241400000000C744241000000000C744240CFF00000"
    . "0C744240800000000C744240402000000890424FFD683EC208"
    . "3FFFF89C60F849D01000083F8FF0F84940100008D8C24E0000"
    . "0008D94244001000089C8C7000000000083C00439C275F3837"
    . "C245001894C2420C744241C00000000C744241800000000C74"
    . "4241400000000C744241000000000C744240C00000000C7442"
    . "4080000000019C0C704240000000083E0E483C060898424E00"
    . "000008D8424AC000000894424248B84246001000089442404F"
    . "F54245C83EC2885C00F84DA0000008B6C244C8B8424AC00000"
    . "089042489E8FFD083EC048B8424B000000089042489E8FFD08"
    . "3EC04893C24C744240400000000FF54244083EC0889E8893C2"
    . "4FFD083EC04893424C744240400000000FF54244083EC088D4"
    . "42460895C2404893424C7442410000000008944240C8B44244"
    . "489442408FF54243C83EC1489E8893424FFD083EC04891C24F"
    . "F54244883EC0431C081C44C0100005B5E5F5DC21400C744245"
    . "001000000BA88000000E904FBFFFFB8FEFFFFFF81C44C01000"
    . "05B5E5F5DC2140081C44C010000B8FFFFFFFF5B5E5F5DC2140"
    . "0B8FDFFFFFFEBDA893C248B7C244C89F8FFD083EC0489F8893"
    . "424FFD083EC04891C24FF542448B8FAFFFFFF83EC04EBB1893"
    . "C248B7C244C89F8FFD083EC0489F8893424FFD083EC04891C2"
    . "4FF542448B8FBFFFFFF83EC04EB88B8FCFFFFFFEB8190"
    x64:="4157415641554154555756534881EC98010000B8FFFFFFF"
    . "F8BB4240002000048899424E8010000418B503C4D89C748898"
    . "C24E00100004D89CC4C01C2803A500F858C040000807A01450"
    . "F8582040000448B42604585C00F8489040000837A64014819C"
    . "031FF83E0104883C078837A6401400F92C7897C245C448B0C0"
    . "2B8FEFFFFFF4D01F9418B4918418B512085C90F843D0400003"
    . "1C04D8D0417EB100F1F40004883C00139C10F864B040000418"
    . "B148041813C174765745075E641817C1704726F634175DB418"
    . "B5124498D04470FB71410418B411C498D14978B3C0285FF0F8"
    . "41304000048B8577269746546696C488D6C24704C01FF48894"
    . "42470B8650000004C89F94889EA6689442478FFD74989C548B"
    . "8476C6F62616C416C488D9424900000004C89F948898424900"
    . "00000C78424980000006C6F6300FFD7BA656500004889C348B"
    . "8476C6F62616C467266899424880000004C89F9488D9424800"
    . "000004889842480000000C684248A00000000FFD7B97341000"
    . "0488944245048B8437265617465507266898C24BC000000488"
    . "D9424B00000004C89F948898424B0000000C78424B80000006"
    . "F636573C68424BE00000000FFD7488944246048B8437265617"
    . "4654E61488D9424D000000048898424D000000048B86D65645"
    . "0697065414C89F948898424D8000000C68424E000000000FFD"
    . "74989C648B8436F6E6E6563744E488D9424F00000004889842"
    . "4F000000048B8616D6564506970654C89F948898424F800000"
    . "0C684240001000000FFD7488944246848B8436C6F736548616"
    . "E488D9424A00000004C89F948898424A0000000C78424A8000"
    . "000646C6500FFD74531C031C94889C748C7442420000000004"
    . "989E94C89E241FFD5807C247000B8FDFFFFFF0F85490200008"
    . "D14B50400000031C94989D7FFD34885C04889C30F849202000"
    . "031C085F6741D0F1F840000000000418B14848914834883C00"
    . "139C677F189F048C1E002C7040300000000C78424C00000000"
    . "B000000BA0B000000C78424C40000000D000000C78424C8000"
    . "0001100000031C0C78424CC00000013000000EB0C89C283E20"
    . "38B9494C000000069D28300000089C183E10301C283C00183F"
    . "86489948CC000000075D831D285F6742E904889D183E103698"
    . "48CC00000008300000001D089848CC0000000330493D1C083C"
    . "0018904934883C20139D677D34531C041B9FF000000BA02000"
    . "000488B8C24E801000048C744243800000000C744243000000"
    . "000C744242800000000C74424200000000041FFD64889C6453"
    . "1C048C744243800000000C744243000000000C744242800000"
    . "00041B9FF000000C744242000000000BA02000000488B8C24E"
    . "801000041FFD64883FEFF4989C40F84380100004883F8FF0F8"
    . "42E010000488D8C2430010000488D9424900100004889C8669"
    . "0C700000000004883C0044839C275F1837C245C0148894C244"
    . "048C74424380000000048C744243000000000C744242800000"
    . "000C744242000000000488B9424E001000019C04531C94531C"
    . "083E0E431C983C06089842430010000488D842410010000488"
    . "9442448488B442460FFD085C00F8488000000488B8C2410010"
    . "000FFD7488B8C2418010000FFD74C8B74246831D24889F14C8"
    . "9F0FFD04889F1FFD731D24C89E14C89F0FFD04989E94589F84"
    . "889DA4C89E148C74424200000000041FFD54C89E1FFD74889D"
    . "9488B442450FFD031C04881C4980100005B5E5F5D415C415D4"
    . "15E415FC3B888000000C744245C01000000E981FBFFFFB8FEF"
    . "FFFFFEBD34889F1FFD74C89E1FFD74889D9488B442450FFD0B"
    . "8FAFFFFFFEBB84889F1FFD74C89E1FFD74889D9488B442450F"
    . "FD0B8FBFFFFFFEB9DB8FCFFFFFFEB969090909090"
    hex:=A_PtrSize=8 ? x64:x32
    VarSetCapacity(MyFunc, len:=StrLen(hex)//2)
    Loop, % len
      NumPut("0x" SubStr(hex,2*A_Index-1,2),MyFunc,A_Index-1,"uchar")
    DllCall("VirtualProtect","ptr",&MyFunc,"ptr",len,"uint",0x40,"ptr*",0)
    base:=DllCall("GetModuleHandle", "Str","Kernel32", "ptr")
    ScriptName:=ScriptName ? ScriptName : A_ScriptFullPath
  }
  ; Random, n, 1, 1000000
  pipe_name:="\\.\pipe\" . A_ScriptName
  ; n
  cmdline="%Ahk%" "%pipe_name%" "%ScriptName%" %arg%
  DllCall(&MyFunc, "AStr",cmdline, "AStr",pipe_name
  , "ptr",base, "ptr",&str, "uint",size)
  return, 1
}

)

if 0>0
{
  file:=%True%
  IfExist, %file%
    Gosub, Encrypt
  ExitApp
}
Gui, +AlwaysOnTop +ToolWindow
Gui, Color, DDEEFF
Gui, Font, cRed s28
Gui, Add, Text,, Drag the AHK script here to Encrypt`n`n
Gui, Show,, AHK source code Encryptor v%Version%  -  By FeiYue
OnMessage(0x201, "LButton_Down")
LButton_Down() {
  SendMessage, 0xA1, 2
}
return

GuiClose:
ExitApp

GuiDropFiles:
Gui, +OwnDialogs
Loop, parse, A_GuiEvent, `n
{
  file:=A_LoopField
  MsgBox, 4100, Tip, Do you want to encrypt this file ?`n`n%file%
  IfMsgBox, Yes
  {
    Gosub, Encrypt
    MsgBox, 4096, Tip, Encryption is completed !
  }
}
return

Encrypt:
FileRead, s, %file%
s:= "`n;You can compile and set icons by using Ahk2Exe.exe`n"
  . "`n;If AutoHotkey.exe wants to change its name to abc.exe,"
  . " Please modify Ahk=%A_ScriptDir%\abc.exe`n"
  . "`n #NoEnv"
  . "`n #NoTrayIcon"
  . "`n #SingleInstance off"
  . "`n SetBatchLines, -1"
  . "`n if A_IsCompiled"
  . "`n {"
  . "`n   Ahk=%A_ScriptDir%\AutoHotkey.exe"
  . "`n   FileInstall, AutoHotkey.exe, %Ahk%"
  . "`n }"
  . "`n else Ahk="
  . "`n`ns=`n"
  . RegExReplace(Encode(s),".{1,60}","s.=""$0""`n")
  . "`n Exec(s, Ahk)"
  . "`n ExitApp`n"
  . fs
f:=RegExReplace(file,"\.[^.]+$") . "-Encoded.ahk"
FileDelete, %f%
FileAppend, %s%, %f%
return

Encode(s) {
  static MyFunc
  if !MyFunc
  {
    x32:="5653BA0B00000031C083EC108B5C241C8B742420C704240"
    . "B000000C74424040D000000C744240811000000C744240C130"
    . "00000EB0889C283E2038B149469D28300000089C183E10301C"
    . "283C00183F86489148C75E031C085F6742A908D74260089C18"
    . "3E10369148C8300000001C289148C8B0C8383E901D1C931CA8"
    . "9148383C00139C675DB83C41031C05B5EC3909090"
    x64:="4883EC1841B80B00000031C0C704240B000000C74424040"
    . "D000000C744240811000000C744240C13000000EB0E0F1F004"
    . "189C04183E003468B04844569C0830000004189C14183E1034"
    . "101C083C00183F8644689048C75D831C085D2743266904989C"
    . "1448B14814183E1034669048C830000004101C04689048C458"
    . "D4AFF41D1C94531C8448904814883C00139C277D031C04883C"
    . "418C3909090909090909090"
    hex:=A_PtrSize=8 ? x64:x32
    VarSetCapacity(MyFunc, len:=StrLen(hex)//2)
    Loop, % len
      NumPut("0x" SubStr(hex,2*A_Index-1,2),MyFunc,A_Index-1,"uchar")
    DllCall("VirtualProtect","ptr",&MyFunc,"ptr",len,"uint",0x40,"ptr*",0)
  }
  add=
  (%
;-----------------------
ListLines, Off
My_ScriptName:=%True%
Try Menu, Tray, Icon, %My_ScriptName%
Gui, SingleInstance_force:Show, Hide, [%My_ScriptName%]
Gui, SingleInstance_force:+HwndMy_guiid
DetectHiddenWindows, On
WinGet, My_list, List, [%My_ScriptName%] ahk_class AutoHotkeyGUI
Loop, % My_list {
  IfEqual, My_guiid, % My_id:=My_list%A_Index%, Continue
  WinGet, My_pid, PID, ahk_id %My_id%
  WinClose, ahk_class AutoHotkey ahk_pid %My_pid%
  WinWaitClose, ahk_id %My_id%
}
DetectHiddenWindows, Off
SetWorkingDir, % RegExReplace(My_ScriptName,"\\[^\\]*$")
;-----------------------
Reload() {
  static My_ScriptName:=%True%
  Try {
    if My_ScriptName=
      return
    else if InStr(My_ScriptName,".exe")
      Run, "%My_ScriptName%"
    else
      Run, "%A_AhkPath%" "%My_ScriptName%"
    ExitApp
  }
}
ListLines, On
;-----------------------
  )
  s:=add "`n" s "`nExitApp`n#SingleInstance off`n"
  ;  . togetcode(s)
  s:=(A_IsUnicode ? chr(0xfeff) : chr(0xEF) chr(0xBB) chr(0xBF))
    . RegExReplace(s,"\R","`r`n") . "`t`t`t"
  size:=VarSetCapacity(s,-1)//4
  VarSetCapacity(str, size*11*(!!A_IsUnicode+1))
  DllCall(&MyFunc, "ptr",&s, "int",size, "Cdecl")
  Loop, % size
    str.="u" . NumGet(s,(A_Index-1)*4,"uint")
  return, str
}

; If you need to read the script itself, you need it
togetcode(s) {
  s:=StrReplace(s,"#","#0")
  For k,v in StrSplit("`r`n;""``")
    s:=StrReplace(s,v,"#" k)
  s:="`ngetcode(k) {`nListLines, Off`n"
    . "IfNotEqual,k,abc@123.com,return`ns=`n"
    . RegExReplace(s,".{1,60}","s.=""$0""`n")
    . "For k,v in StrSplit(""``r``n;""""````"")`n"
    . "  s:=StrReplace(s,""#"" k,v)`n"
    . "s:=StrReplace(s,""#0"",""#"")`n"
    . "return, s`n}`n"
  return, s
}

;======== The End ========

;

/******** The C source code ********

#include <windows.h>

typedef HANDLE (WINAPI * _GetProcAddress)(
  HMODULE hModule,
  LPCSTR  lpProcName
);

typedef BOOL (WINAPI * _CreateProcessA)(
  LPCSTR                lpApplicationName,
  LPSTR                 lpCommandLine,
  LPSECURITY_ATTRIBUTES lpProcessAttributes,
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  BOOL                  bInheritHandles,
  DWORD                 dwCreationFlags,
  LPVOID                lpEnvironment,
  LPCSTR                lpCurrentDirectory,
  LPSTARTUPINFOA        lpStartupInfo,
  LPPROCESS_INFORMATION lpProcessInformation
);

typedef HGLOBAL (WINAPI * _GlobalAlloc)(
  UINT   uFlags,
  SIZE_T dwBytes
);

typedef HGLOBAL (WINAPI * _GlobalFree)(
  HGLOBAL hMem
);

typedef BOOL (WINAPI * _WriteFile)(
  HANDLE       hFile,
  LPCVOID      lpBuffer,
  DWORD        nNumberOfBytesToWrite,
  LPDWORD      lpNumberOfBytesWritten,
  LPOVERLAPPED lpOverlapped
);

typedef HANDLE (WINAPI * _CreateNamedPipeA)(
  LPCSTR                lpName,
  DWORD                 dwOpenMode,
  DWORD                 dwPipeMode,
  DWORD                 nMaxInstances,
  DWORD                 nOutBufferSize,
  DWORD                 nInBufferSize,
  DWORD                 nDefaultTimeOut,
  LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

typedef BOOL (WINAPI * _ConnectNamedPipe)(
  HANDLE       hNamedPipe,
  LPOVERLAPPED lpOverlapped
);

typedef BOOL (WINAPI * _CloseHandle)(
  HANDLE hObject
);

int WINAPI DecodeAndRun(
  LPCSTR cmdline, LPCSTR pipe_name,
  PUCHAR base, LPDWORD str, DWORD size )
{
  DWORD index, name_num, name, win64, func=0;
  LPDWORD Addr_func, Addr_name, hMen;
  PUSHORT Addr_ord;
  PUCHAR tou, biao;
  HANDLE p1, p2;
  //-----------------------------
  tou=(PUCHAR)(base+(*(LPDWORD)(base+0x3C)));
  if (tou[0]!='P' || tou[1]!='E')
    return -1;
  if ((*(LPDWORD)(tou+0x60))==0||(*(LPDWORD)(tou+0x64))==0)
    { win64=1; index=0x88; }
  else
    { win64=0; index=0x78; }
  biao = (PUCHAR)(base+(*(LPDWORD)(tou+index)));
  name_num  = *(LPDWORD)(biao+0x18);
  Addr_func = (LPDWORD)(base+(*(LPDWORD)(biao+0x1C)));
  Addr_name = (LPDWORD)(base+(*(LPDWORD)(biao+0x20)));
  Addr_ord  = (PUSHORT)(base+(*(LPDWORD)(biao+0x24)));
  for (index=0; index<name_num; index++)
  {
    name=Addr_name[index];  // 'PteG'+'Acor'
    if ( (*(LPDWORD)(base+name))   == 0x50746547
      && (*(LPDWORD)(base+name+4)) == 0x41636F72 )
    {
      func=Addr_func[Addr_ord[index]];
      break;
    }
  }
  if (func==0)
    return -2;
  //-----------------------------
  _GetProcAddress GetProcAddress = (_GetProcAddress)(base+func);

  char str1[]="WriteFile";
  _WriteFile WriteFile = (_WriteFile)GetProcAddress(base,str1);

  char str2[]="GlobalAlloc";
  _GlobalAlloc GlobalAlloc = (_GlobalAlloc)GetProcAddress(base,str2);

  char str3[]="GlobalFree";
  _GlobalFree GlobalFree = (_GlobalFree)GetProcAddress(base,str3);

  char str4[]="CreateProcessA";
  _CreateProcessA CreateProcessA = (_CreateProcessA)GetProcAddress(base,str4);

  char str5[]="CreateNamedPipeA";
  _CreateNamedPipeA CreateNamedPipeA = (_CreateNamedPipeA)GetProcAddress(base,str5);

  char str6[]="ConnectNamedPipe";
  _ConnectNamedPipe ConnectNamedPipe = (_ConnectNamedPipe)GetProcAddress(base,str6);

  char str7[]="CloseHandle";
  _CloseHandle CloseHandle = (_CloseHandle)GetProcAddress(base,str7);
  //-----------------------------
  WriteFile(0, str, 0, (LPDWORD)str1, 0);
  if (str1[0]!=0)
    return -3;
  hMen=(LPDWORD)GlobalAlloc(0, (size+1)*4);
  if (hMen==0)
    return -4;
  for (index=0; index<size; index++)
    hMen[index]=str[index];
  hMen[index]=0;
  //-----------------------------
  // Copy the contents of Decode()
  //-----------------------------

  // My private encryption algorithm is not published here.
  // You can write your own encryption algorithm. Such as:
  for (int i=0; i<size; i++)
    hMen[i]=(hMen[i]^(666+i))-1;

  //-----------------------------
  p1=CreateNamedPipeA(pipe_name, 2, 0, 255, 0, 0, 0, 0);
  p2=CreateNamedPipeA(pipe_name, 2, 0, 255, 0, 0, 0, 0);
  if ((HANDLE)-1==p1 || (HANDLE)-1==p2)
  {
    CloseHandle(p1);
    CloseHandle(p2);
    GlobalFree(hMen);
    return -5;
  }
  HANDLE pi[4];
  DWORD si[24];
  for (index=0; index<24; index++)
    si[index]=0;
  si[0]=win64 ? 96 : 68;
  if (!CreateProcessA(0, cmdline, 0,0,0, 0,0,0, si,pi))
  {
    CloseHandle(p1);
    CloseHandle(p2);
    GlobalFree(hMen);
    return -6;
  }
  CloseHandle(pi[0]);
  CloseHandle(pi[1]);
  ConnectNamedPipe(p1, 0);
  CloseHandle(p1);
  ConnectNamedPipe(p2, 0);
  WriteFile(p2, hMen, (size+1)*4, (LPDWORD)str1, 0);
  CloseHandle(p2);
  GlobalFree(hMen);
  return 0;
}

//******** Encode() ********

int Encode(unsigned int * hMen, int size)
{
  // My private encryption algorithm is not published here.
  // You can write your own encryption algorithm. Such as:
  for (int i=0; i<size; i++)
    hMen[i]=(hMen[i]+1)^(666+i);
}

//******** Decode() ********

int Decode(unsigned int * hMen, int size)
{
  // My private encryption algorithm is not published here.
  // You can write your own encryption algorithm. Such as:
  for (int i=0; i<size; i++)
    hMen[i]=(hMen[i]^(666+i))-1;
}

*/

Запускаем этот файл, переносим туда свой AHK скрипт и он выдаёт нам зашифрованную версию скрипта.
Пример со строчкой кода:

Оригинал:

Шифрованный вариант Encryptor By FeiYue:



;You can compile and set icons by using Ahk2Exe.exe

;If AutoHotkey.exe wants to change its name to abc.exe, Please modify Ahk=%A_ScriptDir%\abc.exe

 #NoEnv
 #NoTrayIcon
 #SingleInstance off
 SetBatchLines, -1
 if A_IsCompiled
 {
   Ahk=%A_ScriptDir%\AutoHotkey.exe
   FileInstall, AutoHotkey.exe, %Ahk%
 }
 else Ahk=

s=
s.="u3615544364u640425871u1678942631u2998343137u1434168171u24144"
s.="22854u772521359u1756970362u3066806505u2948737519u2564818243u"
s.="2449174105u2470363807u2046098044u1176484537u753332805u144264"
s.="7071u3603934027u1704982060u1720653216u1717746215u2145304324u"
s.="2022014845u2450424837u1702705391u2083667246u1068506747u35912"
s.="17833u3567719997u4162667514u2129365389u2723952462u1525863173"
s.="u2222899184u1692923901u242574513u216693403u2963745829u718981"
s.="056u1324710236u2397062842u3985251485u1924680786u3511329402u2"
s.="765269931u2804855524u2674235380u559259332u3905445868u4121789"
s.="599u2285549183u2494847797u874810689u795732698u472106884u3975"
s.="83621u2678606513u3136499948u3997704009u161416582u747610977u2"
s.="88358265u188618026u4014534859u3796439682u1110548997u66311011"
s.="4u2270712076u1696076242u1382773540u3487575563u3174960995u130"
s.="2045773u602562885u1791502172u3241600183u1207147742u346363523"
s.="0u3186766107u1142420846u1009666957u198000602u428649069u17667"
s.="60136u3390089281u535903475u436317139u4026351642u4068193294u3"
s.="267729071u1630205007u2979649261u4232722617u1123717274u278387"
s.="8208u1812034631u862579282u1011910245u3600252882u1609112547u1"
s.="101394236u1965178868u3677614267u240598878u2525420086u1595062"
s.="285u2518980276u3736630425u2506266157u764003753u1299449414u38"
s.="52875241u1794952988u3898121535u2392805954u2350784593u2792426"
s.="391u1744270517u30419991u1136596227u408909267u728149600u20841"
s.="83426u2400998859u4240037256u981776391u38117303u1081278912u34"
s.="52688954u77802657u3095605702u1868956753u1731106827u365244077"
s.="0u2264141526u4184885599u3276924816u3685867724u1991023020u239"
s.="2232640u4201584499u3541082063u2926974970u2266570825u43053333"
s.="5u331963475u821374591u2875498530u305018594u2997342869u184010"
s.="899u733340682u1097338808u4096342061u344693412u1195950882u408"
s.="0138981u1688909159u2340593351u2100746564u3931464179u19601379"
s.="32u4073936935u4251077432u4042229591u1086876548u3500902716u26"
s.="97653630u1076383049u1074895766u3488231572u1344405233u3398082"
s.="629u1388949613u3947357476u4092949742u2992316084u2008923535u2"
s.="169519803u3328859573u3614419466u2931365463u3125838056u295267"
s.="610u2901999989u3534058461u1627909026u2262130187u2257430578u3"
s.="536603377u3114113610u100252352u1944387908u3852812072u1776317"
s.="74u4236390291u1143291528u177031840u4284211020u1170893656u387"
s.="8521616u2095949919u3099089818u1309440318u3578245551u15953896"
s.="23u1881206342u4193841994u2702666366u549454016u3664020108u151"
s.="7427063u4093142272u3694002289u1235703057u835645461u334291221"
s.="5u545235360u745574558u86075238u329833843u2228859431u28253925"
s.="50u428500563u81377559u54930262u2816278535u645034616u22259788"
s.="73u877997922u1752469965u405996387u3716751611u3336718098u3947"
s.="666161u3569172750u2020821742u3184390954u4253135794u113192852"
s.="7u2389790164u2812110344u1368128187u3940192987u3448399953u102"
s.="9558322u1274758517u997043498u3312446598u3850928480u117532518"
s.="0u3869515356u4277967424u236564922u3969221838u4231207882u3816"
s.="982756u1106434464u2520908350u4104278725u2276099323u308975064"
s.="9u4124712992u2791601499u1860537930u3050092495u3666898420u271"
s.="4048375u887680006u565224823u1649816895u1329131102u471320963u"
s.="833203534u1513760393u1871841973u3878171571u3835446831u332354"
s.="032u296707096u3216041582u154325801u924702447u2153137039u1776"
s.="92556u488146630u2871030808u3180895080u2109010067u1927416287u"
s.="145782876u2113606017u3373208635u3425471270u1835502207u188789"
s.="5930u3892335673u2175089327u13554931u2590227321u3283621167u15"
s.="92659406u1857450587u2312104660u2724322670u2567083657u6338004"
s.="10u2626699304u2452932291u3821871599u3674733096u2899531036u34"
s.="77682227u2584663766u815364049u2069304982u2868030697u38020348"
s.="15u1838178211u625845450u1668706351u2047638539u426304105u8072"
s.="35077u1589111643u27361823u4111552656u2553734992u1971909090u3"
s.="720712061u1941000186u1541205376u2817803867u74771486u28795482"
s.="90u2278101325u1776814399u2972213696u3366918889u2412147701u62"
s.="8204019u2597266383u646594158u471121955u2862375311u1075170464"
s.="u3235572933u3597359065u1466794510u3626251175u972441319u31250"
s.="49413u3305965548u2728816747u2371043397u1792747774u3966012085"
s.="u3278372566u1516598054u2970543965u2108614587u2012673536u8948"
s.="85685u2945281437u3291447177u3494707370u1346478287u3700400616"
s.="u1761168575u700665654u2572313318u1510303080u794117407u173130"
s.="0277u1827282593u2760598794u1063314248u1175680104u1124152889u"
s.="3393013446u1656446721u3886746426u3862964789u1801606648u40019"
s.="70076u331392662u3591410244u2072281413u410481081u888783327u25"
s.="34699350u3014639971u4242027781u328085228u1196720645u15746651"
s.="99u1851539689u2312768205u4176024189u2488163407u4282984571u38"
s.="2279273u1413406431u1806521640u715567204u844765620u2098305848"
s.="u80708636u3483745573u1211469321u316756761u192750608u34041211"
s.="98u4061444179u2975664460u3638656331u1114373957u3865894614u13"
s.="96431039u4151687187u4274626795u4057107093u2556316560u2336830"
s.="793u3800357593u1218541952u2071279914u1632983001u55380477u905"
s.="300814u2604810123u1307640042u840965133u2472087471u2085130015"
s.="u3714155185u2984731539u1637879158u2755081031u1408294202u2475"
s.="90609u2152520157u4245505044u1859530511u270250410u3058695111u"
s.="2536006903u3175821001u925523708u3648575790u3569324708u199301"
s.="8535u634886169u2894502315u3293741504u1259799387u3966654617u3"
s.="742013032u106955777u4181246524u4207598363u2932670862u3199707"
s.="348u4072460106u1743300601u120414926u2133816107u508243523u876"
s.="175025"

 Exec(s, Ahk)
 ExitApp

Exec(str, Ahk="", arg="") {
  static MyFunc, base, ScriptName:=%True%
  s:=RegExReplace(str,"\s"), StrReplace(s,"u","",size)
  VarSetCapacity(str,(size+1)*4,0), s:=SubStr(s,InStr(s,"u")+1)
  Loop, Parse, s, u
    NumPut(A_LoopField, str, (A_Index-1)*4, "uint")
  ;-----------------------------
  Ahk:=Ahk ? Ahk : A_IsCompiled
    ? A_ScriptDir "\AutoHotkey.exe" : A_AhkPath
  IfNotExist, %Ahk%
  {
    MsgBox, 4096, Error!, `n`nCan't Find: %Ahk% !`n`n
    return, 0
  }
  if !MyFunc
  {
    x32:="5557565381EC4C0100008B9C24680100008BBC246C01000"
    . "08BAC24700100008B433C01D88038500F85380500008078014"
    . "50F852E0500008B706085F60F84FF04000031C9837864010F9"
    . "2C119D283E210894C245083C2788B341001DE8B4E188974243"
    . "C8B562085C90F84E504000031C08D3413EB0B83C00139C10F8"
    . "4D30400008B1486813C134765745075E9817C1304726F63417"
    . "5DF8B74243C8D04430346240FB7008D048303461C8B3085F60"
    . "F84A0040000B86500000001DE891C2466894424688D442460C"
    . "744246057726974C74424646546696C89442404FFD683EC088"
    . "944243C8D442475891C24C7442475476C6F62C7442479616C4"
    . "16CC744247D6C6F630089442404FFD683EC08BA65650000894"
    . "424548D44246A6689542472891C24C744246A476C6F62C7442"
    . "46E616C4672C64424740089442404FFD683EC08B9734100008"
    . "94424488D84248D00000066898C2499000000891C24C784248"
    . "D00000043726561C784249100000074655072C784249500000"
    . "06F636573C684249B0000000089442404FFD683EC088944245"
    . "C8D8424BE000000891C24C78424BE00000043726561C78424C"
    . "200000074654E61C78424C60000006D656450C78424CA00000"
    . "069706541C68424CE0000000089442404FFD683EC088944245"
    . "88D8424CF000000891C24C78424CF000000436F6E6EC78424D"
    . "30000006563744EC78424D7000000616D6564C78424DB00000"
    . "050697065C68424DF0000000089442404FFD683EC088944244"
    . "08D842481000000891C24C7842481000000436C6F73C784248"
    . "50000006548616EC7842489000000646C650089442404FFD68"
    . "3EC088D5C24608944244CC744241000000000C744240800000"
    . "000897C2404895C240CC7042400000000FF54243C83EC14807"
    . "C2460000F85E50200008D34AD04000000C7042400000000897"
    . "4244489742404FF54245483EC0885C089C30F841703000031C"
    . "085ED7415908B148789148383C00139C575F38B44244483E80"
    . "4C7040300000000C784249C0000000B000000BA0B000000C78"
    . "424A00000000D000000C78424A40000001100000031C0C7842"
    . "4A800000013000000EB0C89C283E2038B94949C00000069D28"
    . "300000089C183E10301C283C00183F86489948C9C00000075D"
    . "831D285ED742D669089D183E10369848C9C000000830000000"
    . "1D089848C9C000000330493D1C083C00189049383C20139D57"
    . "5D58B8424640100008B742458C744241C00000000C74424180"
    . "0000000C744241400000000C744241000000000C744240CFF0"
    . "00000C744240800000000C744240402000000890424FFD683E"
    . "C2089C78B842464010000C744241C00000000C744241800000"
    . "000C744241400000000C744241000000000C744240CFF00000"
    . "0C744240800000000C744240402000000890424FFD683EC208"
    . "3FFFF89C60F849D01000083F8FF0F84940100008D8C24E0000"
    . "0008D94244001000089C8C7000000000083C00439C275F3837"
    . "C245001894C2420C744241C00000000C744241800000000C74"
    . "4241400000000C744241000000000C744240C00000000C7442"
    . "4080000000019C0C704240000000083E0E483C060898424E00"
    . "000008D8424AC000000894424248B84246001000089442404F"
    . "F54245C83EC2885C00F84DA0000008B6C244C8B8424AC00000"
    . "089042489E8FFD083EC048B8424B000000089042489E8FFD08"
    . "3EC04893C24C744240400000000FF54244083EC0889E8893C2"
    . "4FFD083EC04893424C744240400000000FF54244083EC088D4"
    . "42460895C2404893424C7442410000000008944240C8B44244"
    . "489442408FF54243C83EC1489E8893424FFD083EC04891C24F"
    . "F54244883EC0431C081C44C0100005B5E5F5DC21400C744245"
    . "001000000BA88000000E904FBFFFFB8FEFFFFFF81C44C01000"
    . "05B5E5F5DC2140081C44C010000B8FFFFFFFF5B5E5F5DC2140"
    . "0B8FDFFFFFFEBDA893C248B7C244C89F8FFD083EC0489F8893"
    . "424FFD083EC04891C24FF542448B8FAFFFFFF83EC04EBB1893"
    . "C248B7C244C89F8FFD083EC0489F8893424FFD083EC04891C2"
    . "4FF542448B8FBFFFFFF83EC04EB88B8FCFFFFFFEB8190"
    x64:="4157415641554154555756534881EC98010000B8FFFFFFF"
    . "F8BB4240002000048899424E8010000418B503C4D89C748898"
    . "C24E00100004D89CC4C01C2803A500F858C040000807A01450"
    . "F8582040000448B42604585C00F8489040000837A64014819C"
    . "031FF83E0104883C078837A6401400F92C7897C245C448B0C0"
    . "2B8FEFFFFFF4D01F9418B4918418B512085C90F843D0400003"
    . "1C04D8D0417EB100F1F40004883C00139C10F864B040000418"
    . "B148041813C174765745075E641817C1704726F634175DB418"
    . "B5124498D04470FB71410418B411C498D14978B3C0285FF0F8"
    . "41304000048B8577269746546696C488D6C24704C01FF48894"
    . "42470B8650000004C89F94889EA6689442478FFD74989C548B"
    . "8476C6F62616C416C488D9424900000004C89F948898424900"
    . "00000C78424980000006C6F6300FFD7BA656500004889C348B"
    . "8476C6F62616C467266899424880000004C89F9488D9424800"
    . "000004889842480000000C684248A00000000FFD7B97341000"
    . "0488944245048B8437265617465507266898C24BC000000488"
    . "D9424B00000004C89F948898424B0000000C78424B80000006"
    . "F636573C68424BE00000000FFD7488944246048B8437265617"
    . "4654E61488D9424D000000048898424D000000048B86D65645"
    . "0697065414C89F948898424D8000000C68424E000000000FFD"
    . "74989C648B8436F6E6E6563744E488D9424F00000004889842"
    . "4F000000048B8616D6564506970654C89F948898424F800000"
    . "0C684240001000000FFD7488944246848B8436C6F736548616"
    . "E488D9424A00000004C89F948898424A0000000C78424A8000"
    . "000646C6500FFD74531C031C94889C748C7442420000000004"
    . "989E94C89E241FFD5807C247000B8FDFFFFFF0F85490200008"
    . "D14B50400000031C94989D7FFD34885C04889C30F849202000"
    . "031C085F6741D0F1F840000000000418B14848914834883C00"
    . "139C677F189F048C1E002C7040300000000C78424C00000000"
    . "B000000BA0B000000C78424C40000000D000000C78424C8000"
    . "0001100000031C0C78424CC00000013000000EB0C89C283E20"
    . "38B9494C000000069D28300000089C183E10301C283C00183F"
    . "86489948CC000000075D831D285F6742E904889D183E103698"
    . "48CC00000008300000001D089848CC0000000330493D1C083C"
    . "0018904934883C20139D677D34531C041B9FF000000BA02000"
    . "000488B8C24E801000048C744243800000000C744243000000"
    . "000C744242800000000C74424200000000041FFD64889C6453"
    . "1C048C744243800000000C744243000000000C744242800000"
    . "00041B9FF000000C744242000000000BA02000000488B8C24E"
    . "801000041FFD64883FEFF4989C40F84380100004883F8FF0F8"
    . "42E010000488D8C2430010000488D9424900100004889C8669"
    . "0C700000000004883C0044839C275F1837C245C0148894C244"
    . "048C74424380000000048C744243000000000C744242800000"
    . "000C744242000000000488B9424E001000019C04531C94531C"
    . "083E0E431C983C06089842430010000488D842410010000488"
    . "9442448488B442460FFD085C00F8488000000488B8C2410010"
    . "000FFD7488B8C2418010000FFD74C8B74246831D24889F14C8"
    . "9F0FFD04889F1FFD731D24C89E14C89F0FFD04989E94589F84"
    . "889DA4C89E148C74424200000000041FFD54C89E1FFD74889D"
    . "9488B442450FFD031C04881C4980100005B5E5F5D415C415D4"
    . "15E415FC3B888000000C744245C01000000E981FBFFFFB8FEF"
    . "FFFFFEBD34889F1FFD74C89E1FFD74889D9488B442450FFD0B"
    . "8FAFFFFFFEBB84889F1FFD74C89E1FFD74889D9488B442450F"
    . "FD0B8FBFFFFFFEB9DB8FCFFFFFFEB969090909090"
    hex:=A_PtrSize=8 ? x64:x32
    VarSetCapacity(MyFunc, len:=StrLen(hex)//2)
    Loop, % len
      NumPut("0x" SubStr(hex,2*A_Index-1,2),MyFunc,A_Index-1,"uchar")
    DllCall("VirtualProtect","ptr",&MyFunc,"ptr",len,"uint",0x40,"ptr*",0)
    base:=DllCall("GetModuleHandle", "Str","Kernel32", "ptr")
    ScriptName:=ScriptName ? ScriptName : A_ScriptFullPath
  }
  ; Random, n, 1, 1000000
  pipe_name:="\\.\pipe\" . A_ScriptName
  ; n
  cmdline="%Ahk%" "%pipe_name%" "%ScriptName%" %arg%
  DllCall(&MyFunc, "AStr",cmdline, "AStr",pipe_name
  , "ptr",base, "ptr",&str, "uint",size)
  return, 1
}

Как пишет сам автор, данный способ сливать для декомпиляции не собирается, но уверен есть метод.
Метод «Reload» будет вызывать ошибку, поэтому советуют использовать «Reload()», она уже встроена в шифрование.

11 Ответ от Malcev 2022-08-03 10:59:14

  • Malcev
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

Если кому надо, я продаю свой вариант компилятора с защитой и шифрованием исходного кода, обращайтесь в телеграм.

Какова стоимость и надо ли как-то причесывать исходники? Какова, на твой взгляд, степень защиты? А то некоторые клиенты интересуются.

12 Ответ от teadrinker 2022-08-03 14:02:17

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Продаю в двух вариантах: более дешёвый — компилятор с постоянным паролем (нет возможности менять), более дорогой — с возможностью менять пароль (нужна перекомпиляция, объясняю как, и даю вспомогательные скрипты). За точными цифрами в личку. Но не очень дёшево, я не заинтересован продавать много.
Степень защиты оценить точно не могу, мне взломать не удалось. За время его использования (несколько лет) не было жалоб. Но думаю, что взлом всё же возможен при определённом уровне подготовки.

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

13 Ответ от Clannad5 2022-08-03 14:47:05 (изменено: Clannad5, 2022-08-03 14:48:58)

  • Clannad5
  • Участник
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker

Постоянный пароль это не из этой темы?
https://www.autohotkey.com/boards/viewtopic.php?t=62308

И что значит постоянный пароль?Защита происходит на уровне самого скрипта или интерпретатора?

И вообще, зачем нужны эти пароли, если они никак исходный код не шифруют или я ошибаюсь?

14 Ответ от teadrinker 2022-08-03 15:48:44

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Clannad5 пишет:

Постоянный пароль это не из этой темы?

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

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

15 Ответ от Вася_01 2022-08-03 16:28:33 (изменено: Вася_01, 2022-08-03 16:41:59)

  • Вася_01
  • Участник
  • Неактивен
  • Рейтинг : [1|0]

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Вариант от Encryptor By FeiYue уже давно взломан. В каждую строку заносишь случайное число/байт, ахк будет выдавать ошибку с куском кода, пройтись по всем строкам, вот и исходник есть.
https://reverseengineering.stackexchang … ource-data.

16 Ответ от teadrinker 2022-08-03 16:58:14

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Вася_01, а если код убран из сообщения об ошибке (в исходнике AHK), тогда как?

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

17 Ответ от Вася_01 2022-08-03 17:03:11 (изменено: Вася_01, 2022-08-03 17:29:45)

  • Вася_01
  • Участник
  • Неактивен
  • Рейтинг : [1|0]

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Может можно перенаправлять ошибку в txt файл через ком строку.

18 Ответ от Malcev 2022-08-03 17:30:47 (изменено: Malcev, 2022-08-03 17:30:55)

  • Malcev
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker, не хочешь запостить защищенный тобой код, а Вася_01 попробует его вытащить, если ему это интересно, конечно?

19 Ответ от teadrinker 2022-08-03 17:37:08

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Можно, но потом придётся эту тему грохнуть. Вася_01, хотите попробовать?

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

20 Ответ от Вася_01 2022-08-03 17:46:09

  • Вася_01
  • Участник
  • Неактивен
  • Рейтинг : [1|0]

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Да не вы что . Я просто знаю, что через парсеры на питоне уже взломан шифровальщик от Encryptor By FeiYue.

21 Ответ от serzh82saratov 2022-08-03 18:18:22

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

Использую AHK_H

https://www.autohotkey.com/boards/viewt … p;t=106957
Есть у кого проблемы с CryptAES и UnZipRawMemory?
UnZipRawMemory у меня не работает с паролем, CryptAES как то непонятно, работает как то через раз. Запускал на 64 и 32.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

22 Ответ от teadrinker 2022-08-03 18:23:26

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Я вроде пробовал использовать UnZipRawMemory, работало нормально, попозже могу посмотреть. Что касается собственной реализации шифрования AES, я применяю её в том числе и в AHK_H, проблем не было. Впрочем, последние версии интерпретатора пока не проверял.

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

23 Ответ от serzh82saratov 2022-08-03 18:38:16

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

Впрочем, последние версии интерпретатора пока не проверял.

Ты на какой?

teadrinker пишет:

попозже могу посмотреть

По AES сможешь пример по ссылке проверить?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

24 Ответ от teadrinker 2022-08-03 18:56:38

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

У меня так работает на версии 1.1.33.10:

string:="This is a message from AutoHotkey."
sz := ZipRawMemory(string, StrLen(string) * 2 + 2, var, "password") ; подразумевается UTF-16
UnZipRawMemory(&var, sz, text, "password")
MsgBox % text

string := "Hello, World"
size := StrPutBuff(string, buf)
size := CryptAES(&buf, size, "sdfKIop", true, 128)
MsgBox, % StrGet(&buf, size, "UTF-8")
size := CryptAES(&buf, size, "sdfKIop", false, 128)
MsgBox, % StrGet(&buf, size, "UTF-8")

StrPutBuff(str, ByRef buff, encoding := "UTF-8") {
   VarSetCapacity(buff, len := (StrPut(str, encoding) - 1) << (encoding ~= "i)^(UTF-16|cp1200)$"))
   StrPut(str, &buff, encoding)
   Return len
}

В первом примере + 2 не обязательно, но желательно.

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

25 Ответ от serzh82saratov 2022-08-03 19:01:39

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

У меня так работает на версии 1.1.33.10:

Не знаю что у меня может быть не так:

CONTINUABLE EXCEPTION_ACCESS_VIOLATION

на обоих битностях.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

26 Ответ от teadrinker 2022-08-03 19:02:51

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

С моим примером? На какой версии?

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

27 Ответ от serzh82saratov 2022-08-03 19:10:33 (изменено: serzh82saratov, 2022-08-03 19:10:52)

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Да. 1.1.33.10.
WINDOWS 10х64

AHK_H у тебя установлен?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

28 Ответ от teadrinker 2022-08-03 19:12:41

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Не установлен.

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

29 Ответ от serzh82saratov 2022-08-03 19:16:22 (изменено: serzh82saratov, 2022-08-03 19:17:57)

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Спасибо, обнадёжил, я думал AHK_H совсем глючный, буду смотреть на чистой системе.
Да, у тебя какой WINDOWS?
Библиотечку не подскажешь, чтобы AES в AHK_L юзать?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

30 Ответ от teadrinker 2022-08-03 19:23:05

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Проверил на 7 и на 10.

#NoEnv
SetBatchLines, -1

password := "password"
iv := "ку-ку"
; encrypt file
CryptFile(A_AHKPath, A_ScriptDir . "\encrypted.txt", password, iv)
; decrypt file
CryptFile(A_ScriptDir . "\encrypted.txt", A_ScriptDir . "\decrypted.exe", password, iv, false)

CryptFile(inFilePath, outFilePath, password, iv := "", crypt := true, algorithm := "AES", textEncoding := "UTF-8") {
; crypt: true — encrypt, false — decrypt
   File := FileOpen(inFilePath, "r")
   File.Pos := 0
   lenInData := File.RawRead(inData, File.Length)
   File.Close()
   
   hLib := DllCall("LoadLibrary", "Str", "Bcrypt.dll", "Ptr")
   lenPasswordData := StrPutBuff(password, passwordData, textEncoding)
   lenHashPassword := CreateHash(&passwordData, lenPasswordData, hashPassword)
   pHashIv := lenIv := 0
   if (iv != "") {
      lenIvData := StrPutBuff(iv, ivData, textEncoding)
      lenHashIv := CreateHash(&ivData, lenIvData, hashIv)
      VarSetCapacity(iv16, 16, 0)
      DllCall("RtlMoveMemory", "Ptr", pHashIv := &iv16, "Ptr", &hashIv + lenHashIv - 16, "Ptr", lenIv := 16)
   }
   crypt := (crypt ? "En" : "De") . "crypt"
   lenOutData := Bcrypt(&inData, lenInData, outData, &hashPassword, lenHashPassword, pHashIv, lenIv, algorithm, crypt)
   DllCall("FreeLibrary", "Ptr", hLib)
   
   File := FileOpen(outFilePath, "w", "cp0")
   File.RawWrite(outData, lenOutData)
   File.Close()
}

Bcrypt(pData, dataSize, ByRef outData, pKey, keySize, pIv := 0, ivSize := 0, AlgId := "AES", crypt := "Decrypt", chainingMode := "ChainingModeCBC") {
; crypt: Encrypt/Decrypt
   static padding := BCRYPT_BLOCK_PADDING := 1, chainingModeSize := StrLen(chainingMode)*2
   pLocalIv := 0
   if pIv {
      VarSetCapacity(localIv, ivSize, 0)
      DllCall("RtlMoveMemory", "Ptr", pLocalIv := &localIv, "Ptr", pIv, "Ptr", ivSize)
   }
   DllCall("Bcrypt\BCryptOpenAlgorithmProvider", "PtrP", hAlgorithm, "WStr", AlgId, "Ptr", 0, "UInt", 0)
   DllCall("Bcrypt\BCryptSetProperty", "Ptr", hAlgorithm, "WStr", "ChainingMode"
                                                        , "WStr", chainingMode, "UInt", chainingModeSize, "UInt", 0)
   DllCall("Bcrypt\BCryptGenerateSymmetricKey", "Ptr", hAlgorithm, "PtrP", hKey, "Ptr", 0, "UInt", 0
                                                                 , "Ptr" , pKey, "UInt", keySize, "UInt", 0, "UInt")
   res := DllCall("Bcrypt\BCrypt" . crypt, "Ptr", hKey, "Ptr", pData, "UInt", dataSize, "Ptr", 0
                                                      , "Ptr", pLocalIv, "UInt", ivSize, "Ptr", 0
                                                      , "UInt", 0, "UIntP", outSize, "UInt", padding, "UInt")
   if (res != 0)
      throw "Crypt error! BCrypt" . crypt . "1 result: " . Format("{:#x}", res)
   VarSetCapacity(outData, outSize, 0)
   res := DllCall("Bcrypt\BCrypt" . crypt, "Ptr", hKey, "Ptr", pData, "UInt", dataSize, "Ptr", 0
                                                      , "Ptr", pLocalIv, "UInt", ivSize, "Ptr", &outData
                                                      , "UInt", outSize, "UIntP", outSize, "UInt", padding, "UInt")
   if (res != 0)
      throw "Crypt error! BCrypt" . crypt . "2 result: " . Format("{:#x}", res)
   DllCall("Bcrypt\BCryptDestroyKey", "Ptr", hKey)
   DllCall("Bcrypt\BCryptCloseAlgorithmProvider", "Ptr", hAlgorithm, "UInt", 0)
   Return outSize
}

CreateHash(pData, size, ByRef hashData, pSecretKey := 0, keySize := 0, AlgId := "SHA256") {
   ; CNG Algorithm Identifiers
   ; https://docs.microsoft.com/en-us/windows/win32/seccng/cng-algorithm-identifiers
   static HMAC := BCRYPT_ALG_HANDLE_HMAC_FLAG := 0x00000008
   DllCall("Bcrypt\BCryptOpenAlgorithmProvider", "PtrP", hAlgorithm, "WStr",  AlgId, "Ptr", 0, "UInt", keySize ? HMAC : 0)
   DllCall("Bcrypt\BCryptCreateHash", "Ptr", hAlgorithm, "PtrP", hHash, "Ptr", 0, "UInt", 0, "Ptr", pSecretKey, "UInt", keySize, "UInt", 0)
   DllCall("Bcrypt\BCryptHashData", "Ptr", hHash, "Ptr", pData, "UInt", size, "UInt", 0)
   DllCall("Bcrypt\BCryptGetProperty", "Ptr", hAlgorithm, "WStr", "HashDigestLength", "UIntP", hashLen, "UInt", 4, "UIntP", cbResult, "UInt", 0)
   VarSetCapacity(hashData, hashLen, 0)
   DllCall("Bcrypt\BCryptFinishHash", "Ptr", hHash, "Ptr", &hashData, "UInt", hashLen, "UInt", 0)
   DllCall("Bcrypt\BCryptDestroyHash", "Ptr", hHash)
   DllCall("Bcrypt\BCryptCloseAlgorithmProvider", "Ptr", hAlgorithm, "UInt", 0)
   Return hashLen
}

StrPutBuff(string, ByRef data, encoding := "UTF-8")  {
   VarSetCapacity( data, len := (StrPut(string, encoding) - 1) << (encoding ~= "i)^(UTF-16|cp1200)$") )
   StrPut(string, &data, encoding)
   Return len
}

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

31 Ответ от serzh82saratov 2022-08-03 19:28:13

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

Проверил на 7 и на 10.

А что в encrypted.txt должно быть?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

32 Ответ от teadrinker 2022-08-03 19:31:38

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

У меня иероглифы.

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

33 Ответ от serzh82saratov 2022-08-03 19:31:58

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

serzh82saratov пишет:

А что в encrypted.txt должно быть?

А, понял, ожидал текст увидеть. Заменил A_AHKPath на A_ScriptFullPath, в encrypted.txt текст, всё норм!

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

34 Ответ от serzh82saratov 2022-08-03 19:33:14

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

А там битность можно изменять, 128, 192, 256?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

35 Ответ от teadrinker 2022-08-03 19:39:18

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Напрямую нет, здесь идентификаторы алгоритма используются.

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

36 Ответ от serzh82saratov 2022-08-03 19:42:51

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Ясно, спасибо за помощь, позабыл уже всё, оказалось использовал уже когда то.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

37 Ответ от teadrinker 2022-08-03 19:47:41

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Собственно, битность в данном случае — это длина ключа в битах. Пароль хешируется по разным алгоритмам, которые на выходе дают разную длину ключа. У меня BCRYPT_SHA256_ALGORITHM = «SHA256», можно другие попробовать.

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

38 Ответ от serzh82saratov 2022-08-03 19:49:47

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

Исходный код шифруется этим паролем и в ресурсах не виден.

А если шифруется, есть смысл скрывать? У меня мысль наоборот даже не ресурсами а файлами код хранить, чтобы обновлять без перекомпиляции.

teadrinker пишет:

Так же проблематично вытащить его из памяти.

Зачистка памяти сразу после передачи в интерпретатор? Или ты про пароль.
И что с защитой от отладки?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

39 Ответ от serzh82saratov 2022-08-03 19:51:14

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

выходе дают разную длину ключа

Чё то вспоминаю, что под каждый нужна определённая длинна пароля нужна…

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

40 Ответ от teadrinker 2022-08-03 19:54:37

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

serzh82saratov пишет:

И что с защитой от отладки?

Защита от отладки там уже встроенная есть, как я понял.

serzh82saratov пишет:

Зачистка памяти сразу после передачи в интерпретатор?

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

serzh82saratov пишет:

А если шифруется, есть смысл скрывать?

Не виден — в смысле зашифрован.

Чё то вспоминаю, что под каждый нужна определённая длинна пароля нужна…

Длина пароля без разницы, всё равно хеш будет той длины, которая определена алгоритмом хеширования, в моём случае всегда 256 бит.

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

41 Ответ от serzh82saratov 2022-08-03 20:05:16

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

Нет, этого не требуется, уже сразу там в памяти код размывается

teadrinker пишет:

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

Типа в AHK_H это из коробки?
А смысл менять пароль, если и стандартный не взломан?

teadrinker пишет:

в моём случае всегда 256 бит

То есть если пароль длиннее, то он будет урезан? Не больше 16 символов юникод.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

42 Ответ от serzh82saratov 2022-08-03 20:11:09

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

serzh82saratov пишет:

То есть если пароль длиннее, то он будет урезан?

А если короче, то добивается нулями.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

43 Ответ от serzh82saratov 2022-08-03 20:14:10

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

serzh82saratov пишет:

А смысл менять пароль, если и стандартный не взломан?

Стандартным паролем шифруется ресурс с исходником? Получается код легко извлечь.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

44 Ответ от teadrinker 2022-08-03 20:15:03

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

serzh82saratov пишет:

А смысл менять пароль, если и стандартный не взломан?

Его и взламывать не надо, он прямо в скомпилированном файле текстом виден, даже если сам пароль поменять. Я придумал как сделать, чтобы этого не было.

serzh82saratov пишет:

То есть если пароль длиннее, то он будет урезан?

Какой пароль не имеет значения. Используется не сам пароль, а его хеш. Погугли хеширование.

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

45 Ответ от Malcev 2022-08-04 01:54:08

  • Malcev
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

serzh82saratov пишет:

Спасибо, обнадёжил, я думал AHK_H совсем глючный, буду смотреть на чистой системе.

А он и есть совсем глючный и автор, к сожалению, частенько забивает на вопросы.
У меня тоже не работает.

46 Ответ от Clannad5 2022-08-04 05:02:14 (изменено: Clannad5, 2022-08-04 05:22:25)

  • Clannad5
  • Участник
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Вася_01
А вы уверены что там речь идёт о 2.7 и вообще про данный способ?
Просто есть разные версии 2.6, 2.7 и 3.2.

47 Ответ от serzh82saratov 2022-08-04 09:50:36

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Malcev пишет:

У меня тоже не работает

teadrinker чё то колдует.)

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

48 Ответ от serzh82saratov 2022-08-04 10:15:55

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

в AHK_H, проблем не было. Впрочем, последние версии интерпретатора пока не проверял.

Ты же AES тестил на 1.1.33.10, или обычно другой пользуешься?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

49 Ответ от teadrinker 2022-08-04 16:22:46

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Я сам вообще AHK_H не пользуюсь, кроме случаев, когда заказывают сделать защиту. Тогда просто компилирую своим компилятором. А всякие фичи из AHK_H обычно не использую, т. к. тестирую код на обычном AHK.
Последняя версия AHK_H, которую я скачивал, была 1.1.33.10.

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

50 Ответ от serzh82saratov 2022-08-04 20:45:38

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

Последняя версия AHK_H, которую я скачивал, была 1.1.33.10.

А, я подумал новее есть.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

51 Ответ от teadrinker 2022-08-04 22:25:50

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Так это уже давно было, я с тех пор не проверял.

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

52 Ответ от serzh82saratov 2022-08-04 22:48:47

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

Так это уже давно было, я с тех пор не проверял.

Ну значит версия проверенная и стабильная.)

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

53 Ответ от teadrinker 2022-08-04 22:52:34

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Тоже нет, мой постоянный заказчик пока что использует 1.1.33.2, вот она можно считать в целом проверенная.

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

54 Ответ от serzh82saratov 2022-08-04 23:59:38

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

На нём тоже пробовал шифрование запускать, такая же картина. Почему так…

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

55 Ответ от teadrinker 2022-08-05 00:01:22

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Если что, я запускал перетаскиванием файла скрипта на файл интерпретатора.

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

56 Ответ от serzh82saratov 2022-08-05 01:34:47

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Так тоже пробовал.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

57 Ответ от serzh82saratov 2022-08-10 19:15:58

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker
Пытаюсь твой код из #30 переделать на строки, подскажи что поправить.



password := "password"
iv := "ку-ку"
string = Пытаюсь твой код из #30 переделать на строки, подскажи что поправить

encstring := CryptString(string, password, iv)
MsgBox % encstring  

deccstring := CryptString(encstring, password, iv, false)
MsgBox % deccstring 

CryptString(string, password, iv := "", crypt := true, algorithm := "AES", textEncoding := "UTF-8") {
; crypt: true — encrypt, false — decrypt 
   lenInData := StrPutBuff(string, inData, textEncoding) 
   hLib := DllCall("LoadLibrary", "Str", "Bcrypt.dll", "Ptr")
   lenPasswordData := StrPutBuff(password, passwordData, textEncoding)
   lenHashPassword := CreateHash(&passwordData, lenPasswordData, hashPassword)
   pHashIv := lenIv := 0
   if (iv != "") {
      lenIvData := StrPutBuff(iv, ivData, textEncoding)
      lenHashIv := CreateHash(&ivData, lenIvData, hashIv)
      VarSetCapacity(iv16, 16, 0)
      DllCall("RtlMoveMemory", "Ptr", pHashIv := &iv16, "Ptr", &hashIv + lenHashIv - 16, "Ptr", lenIv := 16)
   }
   crypt := (crypt ? "En" : "De") . "crypt"
   lenOutData := Bcrypt(&inData, lenInData, outData, &hashPassword, lenHashPassword, pHashIv, lenIv, algorithm, crypt)
   DllCall("FreeLibrary", "Ptr", hLib) 
   Return StrGet(&outData, lenOutData, textEncoding)
}

Bcrypt(pData, dataSize, ByRef outData, pKey, keySize, pIv := 0, ivSize := 0, AlgId := "AES", crypt := "Decrypt", chainingMode := "ChainingModeCBC") {
; crypt: Encrypt/Decrypt
   static padding := BCRYPT_BLOCK_PADDING := 1, chainingModeSize := StrLen(chainingMode)*2
   pLocalIv := 0
   if pIv {
      VarSetCapacity(localIv, ivSize, 0)
      DllCall("RtlMoveMemory", "Ptr", pLocalIv := &localIv, "Ptr", pIv, "Ptr", ivSize)
   }
   DllCall("Bcrypt\BCryptOpenAlgorithmProvider", "PtrP", hAlgorithm, "WStr", AlgId, "Ptr", 0, "UInt", 0)
   DllCall("Bcrypt\BCryptSetProperty", "Ptr", hAlgorithm, "WStr", "ChainingMode"
                                                        , "WStr", chainingMode, "UInt", chainingModeSize, "UInt", 0)
   DllCall("Bcrypt\BCryptGenerateSymmetricKey", "Ptr", hAlgorithm, "PtrP", hKey, "Ptr", 0, "UInt", 0
                                                                 , "Ptr" , pKey, "UInt", keySize, "UInt", 0, "UInt")
   res := DllCall("Bcrypt\BCrypt" . crypt, "Ptr", hKey, "Ptr", pData, "UInt", dataSize, "Ptr", 0
                                                      , "Ptr", pLocalIv, "UInt", ivSize, "Ptr", 0
                                                      , "UInt", 0, "UIntP", outSize, "UInt", padding, "UInt")
   if (res != 0)
      throw "Crypt error! BCrypt" . crypt . "1 result: " . Format("{:#x}", res)
   VarSetCapacity(outData, outSize, 0)
   res := DllCall("Bcrypt\BCrypt" . crypt, "Ptr", hKey, "Ptr", pData, "UInt", dataSize, "Ptr", 0
                                                      , "Ptr", pLocalIv, "UInt", ivSize, "Ptr", &outData
                                                      , "UInt", outSize, "UIntP", outSize, "UInt", padding, "UInt")
   if (res != 0)
      throw "Crypt error! BCrypt" . crypt . "2 result: " . Format("{:#x}", res)
   DllCall("Bcrypt\BCryptDestroyKey", "Ptr", hKey)
   DllCall("Bcrypt\BCryptCloseAlgorithmProvider", "Ptr", hAlgorithm, "UInt", 0)
   Return outSize
}

CreateHash(pData, size, ByRef hashData, pSecretKey := 0, keySize := 0, AlgId := "SHA256") {
   ; CNG Algorithm Identifiers
   ; https://docs.microsoft.com/en-us/windows/win32/seccng/cng-algorithm-identifiers
   static HMAC := BCRYPT_ALG_HANDLE_HMAC_FLAG := 0x00000008
   DllCall("Bcrypt\BCryptOpenAlgorithmProvider", "PtrP", hAlgorithm, "WStr",  AlgId, "Ptr", 0, "UInt", keySize ? HMAC : 0)
   DllCall("Bcrypt\BCryptCreateHash", "Ptr", hAlgorithm, "PtrP", hHash, "Ptr", 0, "UInt", 0, "Ptr", pSecretKey, "UInt", keySize, "UInt", 0)
   DllCall("Bcrypt\BCryptHashData", "Ptr", hHash, "Ptr", pData, "UInt", size, "UInt", 0)
   DllCall("Bcrypt\BCryptGetProperty", "Ptr", hAlgorithm, "WStr", "HashDigestLength", "UIntP", hashLen, "UInt", 4, "UIntP", cbResult, "UInt", 0)
   VarSetCapacity(hashData, hashLen, 0)
   DllCall("Bcrypt\BCryptFinishHash", "Ptr", hHash, "Ptr", &hashData, "UInt", hashLen, "UInt", 0)
   DllCall("Bcrypt\BCryptDestroyHash", "Ptr", hHash)
   DllCall("Bcrypt\BCryptCloseAlgorithmProvider", "Ptr", hAlgorithm, "UInt", 0)
   Return hashLen
}

StrPutBuff(string, ByRef data, encoding := "UTF-8")  {
   VarSetCapacity( data, len := (StrPut(string, encoding) - 1) << (encoding ~= "i)^(UTF-16|cp1200)$") )
   StrPut(string, &data, encoding)
   Return len
}

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

58 Ответ от teadrinker 2022-08-10 20:46:58

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

В зашифрованном виде нельзя сохранять, как строку. Это просто набор байтов, в том числе и нулевых (которые, как ты помнишь, прерывают строку).

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

59 Ответ от serzh82saratov 2022-08-10 21:14:12

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Получается в AHK_H байты как то конвертируются в строку?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

60 Ответ от serzh82saratov 2022-08-10 21:17:58

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Или он буфер преобразует. А буфер никак нельзя сохранить как строку?


string := "Hello, World"
size := StrPutBuff(string, buf)
size := CryptAES(&buf, size, "sdfKIop", true, 128)

MsgBox, % StrGet(&buf, size, "UTF-8")
size := CryptAES(&buf, size, "sdfKIop", false, 128)
MsgBox, % StrGet(&buf, size, "UTF-8")

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

61 Ответ от serzh82saratov 2022-08-10 21:26:38

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Malcev пишет:

У меня тоже не работает.

Попробовал на виртуалке, работает. Что за ерунда может мешать работе этих функций…

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

62 Ответ от serzh82saratov 2022-08-10 21:28:43

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

serzh82saratov пишет:

А буфер никак нельзя сохранить как строку?

Вроде как то в BASE64 переводили байты, ну и после в буфер восстанавливали.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

63 Ответ от teadrinker 2022-08-10 21:44:15

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

serzh82saratov пишет:

Получается в AHK_H байты как то конвертируются в строку?

Строка — это и есть байты, ничего конвертировать не нужно. Но чтобы из байтов могла получиться строка, все байты должны соответствовать коду видимых символов в определённой кодировке, и не должно быть нулевых символов посередине.
Буфер с байтами можно сохранить как base64 или hex.

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

64 Ответ от serzh82saratov 2022-08-10 21:59:14

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

Буфер с байтами можно сохранить как base64 или hex.

Тут также работает?

https://www.autohotkey.com/boards/viewtopic.php?t=23413

Но только на анк х64.


MsgBox % Crypt.Encrypt.String("AES", "CBC", "abcdefghijklmnop", "1234567890123456", "1234567890123456")
; -> Nn9CFFuC+/O84cV1NiwLYoyd25Z9nmWv16dIFKzf2b4=
MsgBox % Crypt.Decrypt.String("AES", "CBC", "Nn9CFFuC+/O84cV1NiwLYoyd25Z9nmWv16dIFKzf2b4=", "1234567890123456", "1234567890123456")
; -> abcdefghijklmnop

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

65 Ответ от teadrinker 2022-08-10 22:02:02

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Наверно так же, у меня должно работать в любой версии AHK.

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

66 Ответ от serzh82saratov 2022-08-10 22:05:00

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

Наверно так же

Чё то там заморочено. А ты пробовал свой вариант со строкой?

teadrinker пишет:

Буфер с байтами можно сохранить как base64

У тебя есть код для base64?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

67 Ответ от teadrinker 2022-08-10 22:54:23

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Так вот же он.

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

68 Ответ от serzh82saratov 2022-08-10 23:01:06 (изменено: serzh82saratov, 2022-08-10 23:01:36)

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

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

Починил то что по ссылке приводил под х32.
Там даются 3 метода шифрования AES это EBC / CBC / CFB, а в AHK_H 128, 192 и 256 бит. Почитал вроде это разные вещи, не в курсе за это?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

69 Ответ от teadrinker 2022-08-10 23:22:08

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Функция CryptBinaryToStringBASE64() принимает указатель на буфер и его размер, и возвращает строку base64.
Когда код шифрования писал, разбирался довольно подробно, но это давно уже было, сейчас уже не помню.

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

70 Ответ от serzh82saratov 2022-08-10 23:28:35

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

но это давно уже было

У меня с АНК типа того.

teadrinker пишет:

возвращает строку base64

Строку возвращает, а что с ней потом делать, не пойму.

encstring := CryptString(string, password, iv)
MsgBox % encstring := String2BASE64(encstring, 1)  

deccstring := CryptString(BASE642String(encstring), password, iv, false)
MsgBox % deccstring 

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

71 Ответ от serzh82saratov 2022-08-10 23:41:42

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Попробовал ещё так передать на дешифровку BASE64.


CryptString(string, password, iv := "", crypt := true, algorithm := "AES", textEncoding := "UTF-8") {
; crypt: true — encrypt, false — decrypt
	If crypt
   lenInData := StrPutBuff(string, inData, textEncoding) 
   Else 
   lenInData := StringBase64ToData(string, inData)

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

72 Ответ от serzh82saratov 2022-08-10 23:51:54

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

serzh82saratov пишет:

Там даются 3 метода шифрования AES это EBC / CBC / CFB, а в AHK_H 128, 192 и 256 бит. Почитал вроде это разные вещи, не в курсе за это?

Насколько понял в AHK_H метод предустановлен, а биты это длинна хеша пароля.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

73 Ответ от teadrinker 2022-08-11 01:05:58

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

serzh82saratov пишет:

Строку возвращает, а что с ней потом делать, не пойму

А зачем с ней что-то делать? Это зашифрованные байты изначальной строки, сохранённые, как base64. Можно просто сохранить в таком виде до расшифровки.

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

74 Ответ от serzh82saratov 2022-08-11 01:10:29

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Так вопрос в том как расшифровать этот base64.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

75 Ответ от teadrinker 2022-08-11 01:20:47

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

StringBase64ToData() переводит base64 в буфер и возвращает его размер, этот буфер нужно подать на расшифровку.

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

76 Ответ от serzh82saratov 2022-08-11 01:23:52

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

этот буфер нужно подать на расшифровку.

Это у меня и не получается.



#NoEnv
SetBatchLines, -1


password := "password"
iv := "ку-ку"
string = Строку возвращает, а что с ней потом делать, не пойму. 

encstring := CryptString(string, password, iv)
MsgBox % encstring := String2BASE64(encstring, 1)  

deccstring := CryptString(encstring, password, iv, false)
MsgBox % deccstring  

 

String2BASE64(str, NOCRLF)
{
   Return CryptBinaryToStringBASE64(&str, StrLen(str) * (A_IsUnicode ? 2 : 1), NOCRLF)
}

BASE642String(StringBASE64)
{
   size := StringBase64ToData(StringBase64, Data)
   Return StrGet(&Data, size >> !!A_IsUnicode, A_IsUnicode ? "UTF-16" : "cp0")
}
   
CryptBinaryToStringBASE64(pData, Bytes, NOCRLF = "")
{
   static CRYPT_STRING_BASE64 := 1, CRYPT_STRING_NOCRLF := 0x40000000
   Crypt := CRYPT_STRING_BASE64 | (NOCRLF ? CRYPT_STRING_NOCRLF : 0)
   
   DllCall("Crypt32.dll\CryptBinaryToString", Ptr, pData, UInt, Bytes, UInt, Crypt, Ptr, 0, UIntP, Chars)
   VarSetCapacity(OutData, Chars * (A_IsUnicode ? 2 : 1))
   DllCall("Crypt32.dll\CryptBinaryToString", Ptr, pData, UInt, Bytes, UInt, Crypt, Str, OutData, UIntP, Chars)
   Return OutData
}

StringBase64ToData(StringBase64, ByRef OutData)
{
   static CRYPT := CRYPT_STRING_BASE64 := 1
   
   DllCall("Crypt32.dll\CryptStringToBinary", Ptr, &StringBase64
      , UInt, StrLen(StringBase64), UInt, CRYPT, UInt, 0, UIntP, Bytes, UIntP, 0, UIntP, 0)
   VarSetCapacity(OutData, Bytes) 
   DllCall("Crypt32.dll\CryptStringToBinary", Ptr, &StringBase64
      , UInt, StrLen(StringBase64), UInt, CRYPT, Str, OutData, UIntP, Bytes, UIntP, 0, UIntP, 0)
   Return Bytes
}


CryptString(string, password, iv := "", crypt := true, algorithm := "AES", textEncoding := "UTF-8") {
; crypt: true — encrypt, false — decrypt
	If crypt
		lenInData := StrPutBuff(string, inData, textEncoding) 
	Else 
		lenInData := StringBase64ToData(string, inData)
    
   hLib := DllCall("LoadLibrary", "Str", "Bcrypt.dll", "Ptr")
   lenPasswordData := StrPutBuff(password, passwordData, textEncoding)
   lenHashPassword := CreateHash(&passwordData, lenPasswordData, hashPassword)
   pHashIv := lenIv := 0
   if (iv != "") {
      lenIvData := StrPutBuff(iv, ivData, textEncoding)
      lenHashIv := CreateHash(&ivData, lenIvData, hashIv)
      VarSetCapacity(iv16, 16, 0)
      DllCall("RtlMoveMemory", "Ptr", pHashIv := &iv16, "Ptr", &hashIv + lenHashIv - 16, "Ptr", lenIv := 16)
   }
   crypt := (crypt ? "En" : "De") . "crypt"
   lenOutData := Bcrypt(&inData, lenInData, outData, &hashPassword, lenHashPassword, pHashIv, lenIv, algorithm, crypt)
   DllCall("FreeLibrary", "Ptr", hLib)    
   Return StrGet(&outData, lenOutData, textEncoding)
}

Bcrypt(pData, dataSize, ByRef outData, pKey, keySize, pIv := 0, ivSize := 0, AlgId := "AES", crypt := "Decrypt", chainingMode := "ChainingModeCBC") {
; crypt: Encrypt/Decrypt
   static padding := BCRYPT_BLOCK_PADDING := 1, chainingModeSize := StrLen(chainingMode)*2
   pLocalIv := 0
   if pIv {
      VarSetCapacity(localIv, ivSize, 0)
      DllCall("RtlMoveMemory", "Ptr", pLocalIv := &localIv, "Ptr", pIv, "Ptr", ivSize)
   }
   DllCall("Bcrypt\BCryptOpenAlgorithmProvider", "PtrP", hAlgorithm, "WStr", AlgId, "Ptr", 0, "UInt", 0)
   DllCall("Bcrypt\BCryptSetProperty", "Ptr", hAlgorithm, "WStr", "ChainingMode"
                                                        , "WStr", chainingMode, "UInt", chainingModeSize, "UInt", 0)
   DllCall("Bcrypt\BCryptGenerateSymmetricKey", "Ptr", hAlgorithm, "PtrP", hKey, "Ptr", 0, "UInt", 0
                                                                 , "Ptr" , pKey, "UInt", keySize, "UInt", 0, "UInt")
   res := DllCall("Bcrypt\BCrypt" . crypt, "Ptr", hKey, "Ptr", pData, "UInt", dataSize, "Ptr", 0
                                                      , "Ptr", pLocalIv, "UInt", ivSize, "Ptr", 0
                                                      , "UInt", 0, "UIntP", outSize, "UInt", padding, "UInt")
   if (res != 0)
      throw "Crypt error! BCrypt" . crypt . "1 result: " . Format("{:#x}", res)
   VarSetCapacity(outData, outSize, 0)
   res := DllCall("Bcrypt\BCrypt" . crypt, "Ptr", hKey, "Ptr", pData, "UInt", dataSize, "Ptr", 0
                                                      , "Ptr", pLocalIv, "UInt", ivSize, "Ptr", &outData
                                                      , "UInt", outSize, "UIntP", outSize, "UInt", padding, "UInt")
   if (res != 0)
      throw "Crypt error! BCrypt" . crypt . "2 result: " . Format("{:#x}", res)
   DllCall("Bcrypt\BCryptDestroyKey", "Ptr", hKey)
   DllCall("Bcrypt\BCryptCloseAlgorithmProvider", "Ptr", hAlgorithm, "UInt", 0)
   Return outSize
}

CreateHash(pData, size, ByRef hashData, pSecretKey := 0, keySize := 0, AlgId := "SHA256") {
   ; CNG Algorithm Identifiers
   ; https://docs.microsoft.com/en-us/windows/win32/seccng/cng-algorithm-identifiers
   static HMAC := BCRYPT_ALG_HANDLE_HMAC_FLAG := 0x00000008
   DllCall("Bcrypt\BCryptOpenAlgorithmProvider", "PtrP", hAlgorithm, "WStr",  AlgId, "Ptr", 0, "UInt", keySize ? HMAC : 0)
   DllCall("Bcrypt\BCryptCreateHash", "Ptr", hAlgorithm, "PtrP", hHash, "Ptr", 0, "UInt", 0, "Ptr", pSecretKey, "UInt", keySize, "UInt", 0)
   DllCall("Bcrypt\BCryptHashData", "Ptr", hHash, "Ptr", pData, "UInt", size, "UInt", 0)
   DllCall("Bcrypt\BCryptGetProperty", "Ptr", hAlgorithm, "WStr", "HashDigestLength", "UIntP", hashLen, "UInt", 4, "UIntP", cbResult, "UInt", 0)
   VarSetCapacity(hashData, hashLen, 0)
   DllCall("Bcrypt\BCryptFinishHash", "Ptr", hHash, "Ptr", &hashData, "UInt", hashLen, "UInt", 0)
   DllCall("Bcrypt\BCryptDestroyHash", "Ptr", hHash)
   DllCall("Bcrypt\BCryptCloseAlgorithmProvider", "Ptr", hAlgorithm, "UInt", 0)
   Return hashLen
}

StrPutBuff(string, ByRef data, encoding := "UTF-8")  {
   VarSetCapacity( data, len := (StrPut(string, encoding) - 1) << (encoding ~= "i)^(UTF-16|cp1200)$") )
   StrPut(string, &data, encoding)
   Return len
}

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

77 Ответ от teadrinker 2022-08-11 01:27:52

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

В зашифрованном виде нельзя сохранять, как строку.

А у тебя CryptString() пытается вернуть строку.

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

78 Ответ от teadrinker 2022-08-11 01:30:22

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Нужно понять концепцию: шифруются и расшифровываются не строки и не файлы, а просто массивы байтов. Чем были эти массивы до зашифровки и чем будут после расшифровки не имеет значения. В любом случае функция шифрования принимает массив байтов и возвращает тоже массив байтов.

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

79 Ответ от serzh82saratov 2022-08-11 01:32:09

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

А у тебя CryptString() пытается вернуть строку.


CryptString(string, password, iv := "", crypt := true, algorithm := "AES", textEncoding := "UTF-8") {
; crypt: true — encrypt, false — decrypt
	If crypt
		lenInData := StrPutBuff(string, inData, textEncoding) 
	Else 
		lenInData := StringBase64ToData(string, inData)
    
   hLib := DllCall("LoadLibrary", "Str", "Bcrypt.dll", "Ptr")
   lenPasswordData := StrPutBuff(password, passwordData, textEncoding)
   lenHashPassword := CreateHash(&passwordData, lenPasswordData, hashPassword)
   pHashIv := lenIv := 0
   if (iv != "") {
      lenIvData := StrPutBuff(iv, ivData, textEncoding)
      lenHashIv := CreateHash(&ivData, lenIvData, hashIv)
      VarSetCapacity(iv16, 16, 0)
      DllCall("RtlMoveMemory", "Ptr", pHashIv := &iv16, "Ptr", &hashIv + lenHashIv - 16, "Ptr", lenIv := 16)
   }
   crypt := (crypt ? "En" : "De") . "crypt"
   lenOutData := Bcrypt(&inData, lenInData, outData, &hashPassword, lenHashPassword, pHashIv, lenIv, algorithm, crypt)
   DllCall("FreeLibrary", "Ptr", hLib)  
   	If crypt
		Return outData
   Return StrGet(&outData, lenOutData, textEncoding)
}

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

80 Ответ от teadrinker 2022-08-11 01:34:49

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Return StrGet(&outData, lenOutData, textEncoding)

Ну да, это строка и это неправильно. Функция должна вернуть буфер и его длину.

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

81 Ответ от teadrinker 2022-08-11 02:35:36

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Либо, если уж хочется иметь одну и ту же функцию для шифрования и расшифровки строки, то в случае шифрования возвращать сразу base64, а в случае расшифровки строку.

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

82 Ответ от Malcev 2022-08-11 06:49:16

  • Malcev
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

serzh82saratov пишет:

Попробовал на виртуалке, работает. Что за ерунда может мешать работе этих функций…

А смысл возиться и плясать с бубном с AHK_H?

83 Ответ от serzh82saratov 2022-08-11 09:56:39

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

Ну да, это строка и это неправильно

Вроде верно, так, с ней же заработало.


CryptString(string, password, iv := "", crypt := true, algorithm := "AES", textEncoding := "UTF-8") {
; crypt: true — encrypt, false — decrypt
	If crypt
		lenInData := StrPutBuff(string, inData, textEncoding) 
	Else 
		lenInData := StringBase64ToData(string, inData)
    
   hLib := DllCall("LoadLibrary", "Str", "Bcrypt.dll", "Ptr")
   lenPasswordData := StrPutBuff(password, passwordData, textEncoding)
   lenHashPassword := CreateHash(&passwordData, lenPasswordData, hashPassword)
   pHashIv := lenIv := 0
   
   if (iv != "") {
      lenIvData := StrPutBuff(iv, ivData, textEncoding)
      lenHashIv := CreateHash(&ivData, lenIvData, hashIv)
      VarSetCapacity(iv16, 16, 0)
      DllCall("RtlMoveMemory", "Ptr", pHashIv := &iv16, "Ptr", &hashIv + lenHashIv - 16, "Ptr", lenIv := 16)
   } 
   crypt := (crypt ? "En" : "De") . "crypt"
   lenOutData := Bcrypt(&inData, lenInData, outData, &hashPassword, lenHashPassword, pHashIv, lenIv, algorithm, crypt)
   DllCall("FreeLibrary", "Ptr", hLib)  
   	If (crypt = "Encrypt")
		Return CryptBinaryToStringBASE64(&outData, lenOutData, 1) 
   Return StrGet(&outData, lenOutData, textEncoding) 
}

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

84 Ответ от serzh82saratov 2022-08-11 10:01:31

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Malcev пишет:

А смысл возиться и плясать с бубном с AHK_H?

Ну он с шифрованием кода, с антиотладчиком, в памяти вроде части кода затирает чтобы в дампе памяти не видно было. AHK_L, школьник взломает, а тут вроде всё по взрослому.
И многопоточность без танцев с бубнами.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

85 Ответ от teadrinker 2022-08-11 10:55:08

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

serzh82saratov пишет:

с ней же заработало

А, не очень внимательно посмотрел. Там было

Но так тоже как строку возвращает, пример:

data := CryptString()
MsgBox, % data
MsgBox, % Format("{:#x}", NumGet(data, "Int64"))

CryptString() {
   VarSetCapacity(outData, 8, 0)
   NumPut(0x6100000061, outData, "Int64")
   VarSetCapacity(outData, -1)
   MsgBox, % outData
   MsgBox, % Format("{:#x}", NumGet(outData, "Int64"))
   Return outData
}

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

86 Ответ от serzh82saratov 2022-08-11 13:05:38

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

Но так тоже как строку возвращает, пример:

А к чему этот пример, что то не понял.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

87 Ответ от teadrinker 2022-08-11 15:31:03

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

К тому, что если в переменной бинарные данные, её нельзя возвращать через return.

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

88 Ответ от serzh82saratov 2022-08-11 15:45:06

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

если в переменной бинарные данные, её нельзя возвращать через return

Это да, косяк. Надо указатель передавать когда это требуется.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

89 Ответ от Malcev 2022-08-15 13:55:06

  • Malcev
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

serzh82saratov пишет:

AHK_L, школьник взломает, а тут вроде всё по взрослому.

Вопрос конечно интересный, насколько тут по-взрослому.
Я с хакерами не знаком, виртуально знаю только одного — очень серьезного, но он точно заниматься подобными глупостями не будет.
Если есть интерес, то можно скинуться и на кворке заказать взлом и проверить насколько крепка защита.

90 Ответ от serzh82saratov 2022-08-17 18:07:42

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Malcev пишет:

насколько тут по-взрослому.

Ну видимо на сколько-то. От школьника есть защита, уже хорошо. Насколько я слышал, питон и ява тоже не защищены достойно, хотя на счёт ява может и ошибаюсь.

Malcev пишет:

можно скинуться и на кворке заказать взлом и проверить насколько крепка защита

А вот это не надо, так и появляются в итоге публичные методы взлома.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

91 Ответ от serzh82saratov 2022-08-31 19:34:48

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

teadrinker пишет:

У меня так работает на версии 1.1.33.10:

string:="This is a message from AutoHotkey."
sz := ZipRawMemory(string, StrLen(string) * 2 + 2, var, "password") ; подразумевается UTF-16
UnZipRawMemory(&var, sz, text, "password")
MsgBox % text

string := "Hello, World"
size := StrPutBuff(string, buf)
size := CryptAES(&buf, size, "sdfKIop", true, 128)
MsgBox, % StrGet(&buf, size, "UTF-8")
size := CryptAES(&buf, size, "sdfKIop", false, 128)
MsgBox, % StrGet(&buf, size, "UTF-8")

StrPutBuff(str, ByRef buff, encoding := "UTF-8") {
   VarSetCapacity(buff, len := (StrPut(str, encoding) - 1) << (encoding ~= "i)^(UTF-16|cp1200)$"))
   StrPut(str, &buff, encoding)
   Return len
}

В первом примере + 2 не обязательно, но желательно.

То ли я всегда пробовал этот код целиком, но CryptAES заработал, ошибка была в ZipRawMemory.
Чё то всё равно не доходит, как зашифровать ей строку в обычную строку, и после эту строку дешифровать.

#SingleInstance Force
#NoEnv
SetBatchLines, -1

decstring := "Hello, World"
size := StrPutBuff(decstring, decbuf)
size := CryptAES(&decbuf, size, "sdfKIop", true, 128)
encstring := StrGet(&decbuf, size, "UTF-8")
MsgBox, % encstring

size := StrPutBuff(encstring, encbuf)
size := CryptAES(&encbuf, size, "sdfKIop", false, 128)
MsgBox, % StrGet(&encbuf, size, "UTF-8")

StrPutBuff(str, ByRef buff, encoding := "UTF-8") {
   VarSetCapacity(buff, len := (StrPut(str, encoding) - 1) << (encoding ~= "i)^(UTF-16|cp1200)$"))
   StrPut(str, &buff, encoding)
   Return len
}

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

92 Ответ от teadrinker 2022-08-31 20:29:26

  • teadrinker
  • Администратор
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

serzh82saratov пишет:

как зашифровать ей строку в обычную строку

Так я же объяснял уже.

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

93 Ответ от serzh82saratov 2022-08-31 20:50:24 (изменено: serzh82saratov, 2022-08-31 20:50:38)

  • serzh82saratov
  • Разработчик
  • Неактивен

Re: AHK: Убрать всплывающую ошибку у файла AutoHotkey.exe

Что то с памятью моей стало…
Всё получилось, прилепил BASE64.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

Script won’t compile do to the brackets being incorrect after adding the Else statement. Compiler says that line 67 is the culprit and I’m not sure why.

#NoEnv
SetWorkingDir %A_ScriptDir%
CoordMode, Mouse, Pixel
SendMode Input
#SingleInstance Force
SetControlDelay 1
SetWinDelay 0
SetKeyDelay -1
SetMouseDelay -1
SetBatchLines -1

^!6::
CoordMode, Pixel, Screen
CoordMode, ToolTip, Screen
CoordMode, Mouse, Screen

Click, 830, 393
Sleep 2000
Click, 678, 538
Sleep 500

Click, 840, 800
Sleep 2000
Click, 671, 974
Sleep 500


Click, 1775, 300
Sleep 2000
Click, 1643, 487
Sleep 2000

var = 0
Loop {
    ImageSearch, FoundX, FoundY, 0, 0, %A_ScreenWidth%, %A_ScreenHeight%, *100 C:\Users\USER\Desktop\Folder\ImageAssets\storage4x4\image%var%.jpg

    If (ErrorLevel = 0) {
        If %var% = 0 {
            Click, %FoundX%, %FoundY%
            Sleep 50
            Click, %FoundX%, %FoundY%
            Sleep 100
            ToolTip, Refreshing Store..., %FoundX%, %FoundY%
        }

        Else {
            SoundPlay, C:\Users\USER\Desktop\Folder\SoundAssets\found.wav
            Click, %FoundX%, %FoundY%
            Sleep 50
            Click, %FoundX%, %FoundY%
            ToolTip, image%var%.jpg, %FoundX% + 10, %FoundY% + 10
            ErrorLevel := -1
            FoundX := ""
            FoundY := ""
            SearchAndPurchase()
        }
    }

    If ErrorLevel 
        ToolTip, Didn't find image%var%.jpg, 0, 25

    If var >= 10 
        var = 


     var += 1
}
Return

SearchAndPurchase(){
    Sleep 5000
    var = 0 
    Loop, 5 {
        var += 1
        Sleep 5000
        ImageSearch, FoundX, FoundY, 0, 0, %A_ScreenWidth%, %A_ScreenHeight%, *100 C:\Users\USER\Desktop\Folder\ImageAssets\storage4x4\Storage4x4Store\image%var%.jpg

        If (ErrorLevel = 0) {
            SoundPlay, C:\Users\USER\Desktop\Folder\SoundAssets\chaching.wav
            Click, %FoundX%, %FoundY%
            ToolTip, $$$ image%var%.jpg $$$, %FoundX% + 10, %FoundY% + 10
            Sleep 50
            Click, %FoundX%, %FoundY%
            FoundX := ""
            FoundY := ""
        }
        If (ErrorLevel) 
            ToolTip, Couldn't purchase... 0, 75
        If (var >= 10) 
            var = 0
    }

    ToolTip, Leaving Store and refreshing market..., 0, 25
    Click, 678, 538
    Click, 678, 1043
    Click, 1643, 538
    Sleep 2000
    Click, 678, 538
    Click, 678, 1043
    Click, 1643, 538
    Sleep 2000
}


Esc:: ExitApp

I counted all the brackets and there are 7 of each direction in the code. I also deleted all brackets and re-added them a couple of times to try and catch mistake but with no luck. What’s going on here?

Search code, repositories, users, issues, pull requests…

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

Понравилась статья? Поделить с друзьями:
  • Autogg xbox 360 ошибка чтения nand
  • Autocad уже установлен ошибка
  • Autoexpert bc 48 ошибка er2
  • Autodesk ошибка удаления
  • Autocad ошибка 5100 при установке