简介
ScriptGuard是保护反编译的脚本的新方法。与其他一些方法不同,它不使用任何嵌入式密码,并且ScriptGuard始终可以100%有效地发挥作用。
ScriptGuard包含以下两个安全措施:
- ScriptGuard1-编译后的脚本开始执行后,立即从内存中删除脚本源代码。
- ScriptGuard2-为ScriptGuard1提供额外的安全性。
ScriptGuard1
ScriptGuard1依赖于以下事实:已编译的AutoHotkey脚本分两个阶段处理(所有脚本也是如此):
- 首先,对源脚本进行语法检查,将其加载到内存结构中并进行优化。
- 然后从内存中的优化副本执行加载的脚本。
正常的Ahk2Exe编译过程将创建一个可执行文件,其中包含AutoHotkey解释器,脚本及其包含的任何文件。运行编译的可执行文件时,它会在执行优化结果之前以上述方式读取和分析所包含的脚本。执行开始后,可执行文件中包含的原始脚本现在不再需要,可以安全地从内存中删除。
这就是ScriptGuard1所做的。在优化副本开始执行的同时,它会从内存中擦除原始脚本。由于脚本此时不在内存中,因此内存检查方法将不再能够找到原始脚本。
此外,如果编译可执行文件分发之前MPRESS或UPX压缩,嵌入可执行脚本将不可见之前执行。因此,只有一个很小的时间窗口,其中包含的脚本是可见的。在可执行文件已解压缩之后以及嵌入式脚本执行之前。由于这是一个连续的过程,因此几乎没有机会以任何方式从可执行文件中提取源脚本。
现在是代码(在脚本中包含#Include):
代码:
; ------------------------------ ScriptGuard1 --------------------------------
ScriptGuard1() ; Hides AutoHotkey source in compiled scripts
{ ; By TAC109, Edition: 23Aug2020 ; To use just include this code in your script
static _ := ScriptGuard1() ; Is automatically actioned when script starts
local ahk:=">AUTOHOTKEY SCRIPT<", pt:=rc:=sz:=0
if A_IsCompiled ; See bit.ly/ScriptGuard for more details
{ if (rc:=DllCall("FindResource", "Ptr",0, "Str",ahk, "Ptr",10, "Ptr"))
&& (sz:=DllCall("SizeofResource","Ptr",0, "Ptr",rc, "Uint"))
&& (pt:=DllCall("LoadResource", "Ptr",0, "Ptr",rc, "Ptr"))
&& (pt:=DllCall("LockResource", "Ptr",pt,"Ptr"))
&& (DllCall("VirtualProtect", "Ptr",pt, "Ptr",sz, "UInt",0x40, "UInt*",rc))
DllCall("RtlZeroMemory", "UInt",pt, "Int",sz) ; Wipe script from memory
else MsgBox 64,,% "Warning: ScriptGuard1 not active!`n`nError = "
. (A_LastError=1814 ? ("Resource Name '" ahk "' not found.`nTo fix, see "
. "the 'Example 1' comments at http://bit.ly/BinMod.") : A_LastError)
} } ; For additional security, see bit.ly/BinMod
; ------------------------------------------------------------------------------
该代码应被复制或下载,并存储在一个名为 ScriptGuard1.ahk。可以使用#include语句将其并入您的脚本中(在开始处或附近)。另外,此ScriptGuard1代码可以直接复制到您的脚本中。
当直接运行包含ScriptGuard1的脚本(无需先编译)时,此代码将无效。但是,在已编译的脚本中,当脚本开始运行时,该代码将自动执行。(不需要用户的脚本直接调用ScriptGuard1()函数。)
ScriptGuard1可以与任何版本的AutoHotkey 1.1一起使用,但不能与AutoHotkey_H一起使用。(如果将MsgBox代码更改为有效的v2语法,它也将与版本2一起使用。)BinMod的用户应检查该文档的示例1,以获取更多信息。
ScriptGuard2
ScriptGuard2通过对编译脚本时生成的AutoHotkey解释器进行少量更改,为ScriptGuard1提供了额外的安全性。使用此功能完全是可选的,但可以为ScriptGuard1提供一些额外的安全性。ScriptGuard2仅适用于使用32位* .bin文件的编译。
ScriptGuard2随AutoHotkey v1.1.33.00或更高版本附带的Ahk2Exe版本一起提供。对于早期版本的AutoHotkey,请从此处获取最新的Ahk2Exe beta。
此外,必须使用版本日期为2020年8月23日或更晚的BinMod,并且需要在脚本中由; @ Ahk2Exe-PostExec编译器指令调用。
通过提供特定的 / ScriptGuard2BinMod的参数。BinMod文档的示例3提供了更多详细信息。
那么问题来了,这加密后能破解吗? 如果能的话是怎么破的,破解的原理是什么
暂时没有测试成功
已经测试成功