AHK源代码加密器 v1.0

来源:互联网 发布:推广淘宝优惠券赚钱 编辑:程序博客网 时间:2024/05/18 16:13

这是AHK源代码加密工具,作为第一层加密,之后可以用Ahk2Exe编译为程序。
由于AHK官方支持开源,结果Ahk2Exe编译的程序(不使用mpress压缩),
在程序末尾明文保存了源代码,不利于发布私有成果。即使压缩、加壳也有
对应的脱壳工具。这个工具可以使Ahk2Exe生成的程序末尾的源代码已加密。

/*;---------------------------------  AHK源代码加密器  v1.0  By FeiYue  脚本说明:  1、实现方式为采用动态运行、内存解码。     用机器码增强了WriteFile函数功能。  2、结合mpress压缩、upx加壳、FileInstall     打包到资源中不释放,直接读取资源数据     等方式,可以较好地隐藏AHK源代码。  3、本工具用途是将AHK脚本转换为加密后的自解压版本。;---------------------------------*/#NoEnv#SingleInstance forceListLines, Offfs=(` %Exec(str, Ahk="", arg="") {  static WriteFile, f1, f2, f3, f4, f5  s:=RegExReplace(str,"\s"), StrReplace(s,"u","",size)  VarSetCapacity(str,(size+1)*4,0), s:=Trim(s,"u")  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%" %arg%  DllCall("ConnectNamedPipe",Ptr,p1,Ptr,0)  DllCall("CloseHandle",Ptr,p1)  DllCall("ConnectNamedPipe",Ptr,p2,Ptr,0)  if !WriteFile  {    x32:="5589E583EC58C744240800000000C744240400100000C70"    . "424000000008B450CFFD08945F08B452483C001C1E00289442"    . "408C7442404000000008B45F08904248B4510FFD08945ECC74"    . "5D407000000C745D80D000000C745DC11000000C745E013000"    . "000C745F400000000EB268B45F483E0038945E88B45E88B448"    . "5D469D0830000008B45F401C28B45E8895485D48345F401837"    . "DF46376D4C745F400000000EB5A8B45F483E0038945E88B45E"    . "88B4485D469D0830000008B45F401C28B45E8895485D48B45F"    . "48D1485000000008B452001D08B108B45E88B4485D431D0894"    . "5E48B45F48D1485000000008B45EC01D08B55E4C1CA0889108"    . "345F4018B45F43B4524729E8B45F48D1485000000008B45EC0"    . "1D0C700000000008B452483C0018D148500000000C74424100"    . "00000008B45288944240C895424088B45EC894424048B451C8"    . "904248B4508FFD08B45EC89442408C7442404000000008B45F"    . "08904248B4514FFD08B45F08904248B4518FFD0B800000000C"    . "9C22400909090"    x64:="554889E54883EC6048894D10488955184C8945204C894D2"    . "8488B451841B800000000BA00100000B900000000FFD048894"    . "5F08B454883C0018D148500000000488B4DF0488B45204189D"    . "0BA00000000FFD0488945E8C745D007000000C745D40D00000"    . "0C745D811000000C745DC13000000C745FC00000000EB268B4"    . "5FC83E0038945E48B45E48B4485D069D0830000008B45FC01C"    . "28B45E4895485D08345FC01837DFC6376D4C745FC00000000E"    . "B608B45FC83E0038945E48B45E48B4485D069D0830000008B4"    . "5FC01C28B45E4895485D08B45FC488D148500000000488B454"    . "04801D08B108B45E48B4485D031D08945E08B45FC488D14850"    . "0000000488B45E84801D08B55E0C1CA0889108345FC018B45F"    . "C3B454872988B45FC488D148500000000488B45E84801D0C70"    . "0000000008B454883C001448D1485000000004C8B4550488B5"    . "5E8488B4D3848C744242000000000488B45104D89C14589D0F"    . "FD0488B55E8488B4DF0488B45284989D0BA00000000FFD0488"    . "B55F0488B45304889D1FFD0B8000000004883C4605DC39090"    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,"char")    DllCall("VirtualProtect",Ptr,&WriteFile,Ptr,len,"uint",0x40,Ptr "*",0)    kernel32:=DllCall("GetModuleHandle", "Str","kernel32", Ptr)    f=WriteFile,HeapCreate,HeapAlloc,HeapFree,HeapDestroy    For i,v in StrSplit(f, ",")      f%i%:=DllCall("GetProcAddress", Ptr,kernel32, "AStr",v, Ptr)  }  DllCall(&WriteFile, Ptr,f1, Ptr,f2, Ptr,f3, Ptr,f4, Ptr,f5  , Ptr,p2, Ptr,&str, "uint",size, "uint*",0)  DllCall("CloseHandle",Ptr,p2)  return, 1})Gui, +AlwaysOnTop +ToolWindowGui, Color, DDEEFFGui, Font, cRed s28Gui, Add, Text,, AHK脚本拖到本窗口即可加密`n`nGui, Show,, AHK源代码加密器 v1.0  -  By FeiYueOnMessage(0x201, "LButton_Down")returnLButton_Down() {  ListLines, Off  if (A_Gui=1 and A_GuiControl="")    SendMessage, 0xA1, 2}GuiClose:ExitAppGuiDropFiles:Gui, +OwnDialogsLoop, parse, A_GuiEvent, `n{  file:=A_LoopField  MsgBox, 4100, Tip, %file% 文件要加密吗?  IfMsgBox, Yes    Gosub, 加密}return加密:FileRead, s, %file%f:=RegExReplace(file,"\.[^.]+$") . "-加密.ahk"s:=RegExReplace(JiaMi(s),".{1,60}","s.=""$0""`n")s:="`n;请自行采用Ahk2Exe.exe压缩编译并设定图标`n"  . "`n;如果不想采用AutoHotkey.exe请修改Ahk=`n`n"  . "`n#NoEnv`n#NoTrayIcon`n#SingleInstance force`ns=`n"  . s . "`nAhk=`nExec(s, Ahk)`nExitApp`n" . fsFileDelete, %f%FileAppend, %s%, %f%returnJiaMi(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,"char")    DllCall("VirtualProtect", Ptr,&MyFunc, Ptr,len, "uint",0x40, Ptr "*",0)  }  s:=(A_IsUnicode ? chr(0xfeff) : chr(0xEF) chr(0xBB) chr(0xBF)) s "`t`t`t"  size:=VarSetCapacity(s,-1)//4, VarSetCapacity(str,size*12)  DllCall(&MyFunc, Ptr,&s, "int",size)  Loop, % size    str.="u" . NumGet(s,(A_Index-1)*4,"uint")  return, str};======== 脚本结束 ========;
原创粉丝点击