但是当前的Ahk2Exe不能加密,源代码是明文附加在程序末尾的,起不到保护源代码的作用,
所以我制作了一个简单的AHK源代码加密器,可以防止小白,对高手没有什么作用。
Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus
/*
;-------------------------------
AHK source code Encryptor v1.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.
3. To run the compiled program, you must have a AutoHotkey.exe
in the same directory. If AutoHotkey.exe is renamed abc.exe,
Please modify the "Ahk=" to "Ahk=%A_ScriptDir%\abc.exe".
4. When you want to Reload in your own script,
you can use the Reload() function instead.
;-------------------------------
*/
#NoEnv
#SingleInstance force
ListLines, Off
SetBatchLines, -1
fs=
(` %
Exec(str, Ahk="", arg="") {
static WriteFile, f1, f2
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")
;-----------------------------
Ptr:=A_PtrSize ? "UPtr":"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
}
name:="\\.\pipe\AHK" . A_TickCount
Loop, 2
if (p%A_Index% := DllCall("CreateNamedPipe","str",name,"uint",2
,"uint",0,"uint",255,"uint",0,"uint",0,Ptr,0,Ptr,0))=-1
return, 0
Run, %Ahk% "%name%" "%A_ScriptFullPath%" %arg%
DllCall("ConnectNamedPipe",Ptr,p1,Ptr,0)
DllCall("CloseHandle",Ptr,p1)
DllCall("ConnectNamedPipe",Ptr,p2,Ptr,0)
if !WriteFile
{
x32:="5589E583EC788B45083DFFFFFF6F770AB800000000E9320"
. "200008B550C8B450829C289D08945F0837DF0007809817DF00"
. "00002007E0AB800000000E90C020000C745CF4765744DC745D"
. "36F64756CC745D76548616EC745DB646C6541C645DF00C745C"
. "64B65726EC745CA656C3332C645CE00C745BC57726974C745C"
. "06546696C66C745C465008D45CF894424048B45088904248B4"
. "50CFFD08945EC8D45C68904248B45ECFFD03B4508740AB8000"
. "00000E9970100008D45BC894424048B45088904248B450CFFD"
. "08945E88B55E88B450829C289D08945F0837DF0007809817DF"
. "0000002007E0AB800000000E95C010000C7442410000000008"
. "B451C8944240CC7442408000000008B451489442404C704240"
. "00000008B45E8FFD0C745AC07000000C745B00D000000C745B"
. "411000000C745B813000000C745F400000000EB268B45F483E"
. "0038945E48B45E48B4485AC69D0830000008B45F401C28B45E"
. "4895485AC8345F401837DF46376D4C745F400000000EB5A8B4"
. "5F483E0038945E48B45E48B4485AC69D0830000008B45F401C"
. "28B45E4895485AC8B45F48D1485000000008B451401D08B108"
. "B45E48B4485AC31D08945E08B45F48D1485000000008B45140"
. "1D08B55E0C1CA0889108345F4018B45F43B4518729E8B45F48"
. "D1485000000008B451401D0C700000000008B451883C0018D1"
. "48500000000C7442410000000008B451C8944240C895424088"
. "B4514894424048B45108904248B45E8FFD0C745F400000000E"
. "B198B45F48D1485000000008B451401D0C700000000008345F"
. "4018B45F43B451872DFB800000000C9C21800"
x64:="554889E54881ECA000000048894D10488955184C8945204"
. "C894D28488B45103DFFFFFF6F770AB800000000E93B0200004"
. "88B451889C2488B451029C289D08945F8837DF8007809817DF"
. "8000002007E0AB800000000E91102000048B84765744D6F647"
. "56C488945C048B86548616E646C6541488945C8C645D00048B"
. "84B65726E656C3332488945B0C645B80048B85772697465466"
. "96C488945A066C745A86500488D55C0488B4518488B4D10FFD"
. "0488945F0488D55B0488B45F04889D1FFD0483B4510740AB80"
. "0000000E99C010000488D55A0488B4518488B4D10FFD048894"
. "5E8488B45E889C2488B451029C289D08945F8837DF80078098"
. "17DF8000002007E0AB800000000E960010000488B4D38488B5"
. "52848C744242000000000488B45E84989C941B800000000B90"
. "0000000FFD0C7459007000000C745940D000000C7459811000"
. "000C7459C13000000C745FC00000000EB268B45FC83E003894"
. "5E48B45E48B44859069D0830000008B45FC01C28B45E489548"
. "5908345FC01837DFC6376D4C745FC00000000EB608B45FC83E"
. "0038945E48B45E48B44859069D0830000008B45FC01C28B45E"
. "4895485908B45FC488D148500000000488B45284801D08B108"
. "B45E48B44859031D08945E08B45FC488D148500000000488B4"
. "5284801D08B55E0C1CA0889108345FC018B45FC3B453072988"
. "B45FC488D148500000000488B45284801D0C700000000008B4"
. "53083C001448D1485000000004C8B4538488B5528488B4D204"
. "8C744242000000000488B45E84D89C14589D0FFD0C745FC000"
. "00000EB1C8B45FC488D148500000000488B45284801D0C7000"
. "00000008345FC018B45FC3B453072DCB8000000004881C4A00"
. "000005DC3909090909090909090909090"
hex:=A_PtrSize=8 ? x64:x32
VarSetCapacity(WriteFile, len:=StrLen(hex)//2)
Loop, % len
NumPut("0x" SubStr(hex,2*A_Index-1,2),WriteFile,A_Index-1,"uchar")
DllCall("VirtualProtect",Ptr,&WriteFile,Ptr,len,"uint",0x40,Ptr "*",0)
f1:=DllCall("GetModuleHandle", "Str","Kernel32", Ptr)
f2:=DllCall("GetProcAddress", Ptr,f1, "AStr","GetProcAddress", Ptr)
}
DllCall(&WriteFile,Ptr,f1,Ptr,f2,Ptr,p2,Ptr,&str,"uint",size,"uint*",0)
DllCall("CloseHandle",Ptr,p2)
return, 1
}
)
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 v1.7 - By FeiYue
OnMessage(0x201, "LButton_Down")
return
LButton_Down() {
ListLines, Off
if (A_Gui=1 and A_GuiControl="")
SendMessage, 0xA1, 2
}
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 is renamed abc.exe,"
. " Please modify Ahk=%A_ScriptDir%\abc.exe`n"
. "`n#NoEnv"
. "`n#NoTrayIcon"
. "`n#SingleInstance force"
. "`nSetBatchLines, -1"
. "`nAhk=`n"
. "`ns=`n"
. RegExReplace(Encode(s),".{1,60}","s.=""$0""`n")
. "`nExec(s, Ahk)"
. "`nExitApp`n"
. fs
f:=RegExReplace(file,"\.[^.]+$") . "-encoded.ahk"
FileDelete, %f%
FileAppend, %s%, %f%
return
Encode(s) {
static MyFunc
Ptr:=A_PtrSize ? "UPtr":"UInt"
if !MyFunc
{
x32:="5589E583EC20C745E407000000C745E80D000000C745EC1"
. "1000000C745F013000000C745FC00000000EB268B45FC83E00"
. "38945F88B45F88B4485E469D0830000008B45FC01C28B45F88"
. "95485E48345FC01837DFC6376D4C745FC00000000EB5C8B45F"
. "C83E0038945F88B45F88B4485E469D0830000008B45FC01C28"
. "B45F8895485E48B45FC8D1485000000008B450801D08B00894"
. "5F48B45FC8D1485000000008B450801C28B45F4C1C00889C18"
. "B45F88B4485E431C889028345FC018B450C3945FC729CB8000"
. "00000C9C20800909090"
x64:="554889E54883EC2048894D10895518C745E007000000C74"
. "5E40D000000C745E811000000C745EC13000000C745FC00000"
. "000EB268B45FC83E0038945F88B45F88B4485E069D08300000"
. "08B45FC01C28B45F8895485E08345FC01837DFC6376D4C745F"
. "C00000000EB628B45FC83E0038945F88B45F88B4485E069D08"
. "30000008B45FC01C28B45F8895485E08B45FC488D148500000"
. "000488B45104801D08B008945F48B45FC488D1485000000004"
. "88B45104801C28B45F4C1C00889C18B45F88B4485E031C8890"
. "28345FC018B45183945FC7296B8000000004883C4205DC390"
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
#NoEnv
ParentScript:=%True%
Try Menu, Tray, Icon, %ParentScript%
Gui, SingleInstance_force:Show, Hide, [%ParentScript%]
Gui, SingleInstance_force:+Hwndmyid
DetectHiddenWindows, On
WinGet, list, List, [%ParentScript%] ahk_class AutoHotkeyGUI
Loop, % list {
IfEqual, myid, % id:=list%A_Index%, Continue
WinGet, pid, PID, ahk_id %id%
WinClose, ahk_class AutoHotkey ahk_pid %pid%,, 3
IfWinExist, ahk_id %id%
Process, Close, %pid%
}
DetectHiddenWindows, Off
;-----------------------
Reload() {
static ParentScript:=%True%
Try {
if ParentScript=
return
else if InStr(ParentScript,".exe")
Run, %ParentScript%
else
Run, %A_AhkPath% "%ParentScript%"
ExitApp
}
}
ListLines, On
;-----------------------
)
s:=(A_IsUnicode ? chr(0xfeff) : chr(0xEF) chr(0xBB) chr(0xBF))
. RegExReplace(add "`n" 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)
Loop, % size
str.="u" . NumGet(s,(A_Index-1)*4,"uint")
return, str
}
;======== The End ========
;