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

Тема: 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

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

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

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

3

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

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

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

4

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

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

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

5

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

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

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

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

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

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

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

6

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

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

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

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

7

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

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

8

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

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

Win10: LTSC (v1809); AHK: ANSI (v1.1.34.03)

9

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

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

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

10 (изменено: Clannad5, 2022-08-03 03:52:38)

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 скрипт и он выдаёт нам зашифрованную версию скрипта.
Пример со строчкой кода:

Оригинал:

Msgbox, Hello World!

Шифрованный вариант 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

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

teadrinker пишет:

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

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

12

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

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

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

13 (изменено: Clannad5, 2022-08-03 14:48:58)

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

teadrinker

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

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

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

14

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

Clannad5 пишет:

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

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

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

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

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

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

16

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

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

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

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

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

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

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

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

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

19

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

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

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

20

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

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

21

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
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

22

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

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

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

23

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

teadrinker пишет:

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

Ты на какой?

teadrinker пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

24

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

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

teadrinker пишет:

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

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

CONTINUABLE EXCEPTION_ACCESS_VIOLATION

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

26

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

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

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

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

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

Да. 1.1.33.10.
WINDOWS 10х64

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

28

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

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

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

29 (изменено: serzh82saratov, 2022-08-03 19:17:57)

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

30

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

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

teadrinker пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

32

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

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

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

33

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

serzh82saratov пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

34

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

35

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

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

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

36

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

37

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

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

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

38

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

teadrinker пишет:

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

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

teadrinker пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

39

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

teadrinker пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

40

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

serzh82saratov пишет:

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

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

serzh82saratov пишет:

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

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

serzh82saratov пишет:

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

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

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

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

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

41

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

teadrinker пишет:

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

teadrinker пишет:

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

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

teadrinker пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

42

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

serzh82saratov пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

43

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

serzh82saratov пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

44

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

serzh82saratov пишет:

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

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

serzh82saratov пишет:

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

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

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

45

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

serzh82saratov пишет:

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

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

46 (изменено: Clannad5, 2022-08-04 05:22:25)

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

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

47

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

Malcev пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

48

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

teadrinker пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

49

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

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

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

50

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

teadrinker пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

51

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

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

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

52

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

teadrinker пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

53

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

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

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

54

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

55

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

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

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

56

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

57

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
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

58

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

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

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

59

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

60

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
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

61

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

Malcev пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

62

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

serzh82saratov пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

63

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

serzh82saratov пишет:

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

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

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

64

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
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

65

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

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

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

66

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

teadrinker пишет:

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

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

teadrinker пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

67

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

Так вот же он.

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

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

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

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

69

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

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

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

70

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
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

71

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
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

72

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

serzh82saratov пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

73

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

serzh82saratov пишет:

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

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

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

74

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

75

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

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

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

76

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
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

77

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

teadrinker пишет:

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

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

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

78

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

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

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

79

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
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

80

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

Return StrGet(&outData, lenOutData, textEncoding)

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

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

81

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

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

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

82

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

serzh82saratov пишет:

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

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

83

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
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

84

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

Malcev пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

85

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

serzh82saratov пишет:

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

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

   	If crypt
		Return outData

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

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

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

teadrinker пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

87

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

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

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

88

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

teadrinker пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

89

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

serzh82saratov пишет:

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

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

90

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

Malcev пишет:

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

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

Malcev пишет:

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

91

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
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

92

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

serzh82saratov пишет:

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

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

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

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

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

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui