Encryption 如何混淆lua代码?
我在谷歌上找不到任何加密/混淆我的lua文件的工具,所以我决定在这里询问。也许有些专业人士知道怎么做?(免费) 我现在用lua做了一个简单的游戏,我不想让人们看到代码,否则他们很容易作弊。如何将.lua文件中的整个文本变成随机的字母和内容 我曾经用C#编程,我有一个名为SmartAssembly的.NET模糊器,它工作得很好。当有人试图检查我的应用程序的代码时,它只是一堆字母和数字,再加上汉字和其他东西 有人知道有什么程序也能为lua做到这一点吗?只需加载要加密的文件,单击encrypt或soemthing,然后bam!它有用 例如:Encryption 如何混淆lua代码?,encryption,lua,obfuscation,Encryption,Lua,Obfuscation,我在谷歌上找不到任何加密/混淆我的lua文件的工具,所以我决定在这里询问。也许有些专业人士知道怎么做?(免费) 我现在用lua做了一个简单的游戏,我不想让人们看到代码,否则他们很容易作弊。如何将.lua文件中的整个文本变成随机的字母和内容 我曾经用C#编程,我有一个名为SmartAssembly的.NET模糊器,它工作得很好。当有人试图检查我的应用程序的代码时,它只是一堆字母和数字,再加上汉字和其他东西 有人知道有什么程序也能为lua做到这一点吗?只需加载要加密的文件,单击encrypt或soe
print('Hello world!')
会变成
sdf9sd@@@&/sdfsdd9fd0f0fsf/&
只需预编译文件(块)并加载二进制块
luac
允许您删除调试信息。如果这还不够,请在已编译的lua上定义您自己的转换,尽可能剥离名称。不过,对lua模糊处理器的需求并不多
此外,您还失去了使用嵌入式脚本语言的一个主要优势:可扩展性。您可以使用
loadstring
获取块,然后string.dump
,然后应用一些转换,如循环字节、交换段等。转换必须是可逆的。然后保存到一个文件
请注意,任何能够访问您的“encryptor”Lua模块的人都知道如何解密您的文件。如果您使用C/C++制作加密模块,任何有权访问源代码或Lua加密模块二进制文件的人也会这样做,他们也可以要求该模块并解开代码。使用解释语言是很难做到的:你可以通过上面的技术稍微提高标准,但提高它需要大量的工作(唯一真正的威慑力)在美国是非常困难的
如果嵌入Lua解释器比从C中嵌入Lua解释器要困难得多(假设发布版本中删除了所有符号),用户必须能够轻松地完成组装,但只需要一个有能力的人就能破解算法,然后他们就可以将代码提供给其他人
你还对做这件事感兴趣吗?:) 最简单的混淆选项是按照其他人的建议编译您的Lua代码,但是它有两个主要问题:(1)字符串在编译的代码中仍然很容易看到,(2)Lua解释器的编译代码不可移植,因此如果您针对不同的体系结构,您需要为它们提供不同的编译块
第一个问题可以通过使用预处理器来解决(例如)将字符串转换为数字序列,然后在运行时将其连接回
第二个问题在不更改解释器的情况下很难解决,但如果您可以选择解释器,那么LuaJIT将生成可移植的字节码,该字节码将在其所有平台上运行(运行相同版本的LuaJIT);请注意,LuaJIT字节码与Lua字节码不同,因此它不能由Lua解释器运行
一个更复杂的选择是加密代码(可能在编译之前),但您需要权衡任何额外的机制(以及您自己的工作),以避免给用户带来任何可能的不便,以及有人破解保护带来的任何损失。我个人会使用一些足够简单的方法来阻止大多数好奇的用户,因为你可能根本就没有机会对付一个专门的黑客。我想我应该添加一些示例代码,因为这里的答案很有帮助,但并没有让我们一直做到这一点。我们想保存一些lua表信息,只是不想让人们非常容易地注入自己的代码。序列化表,然后使用load(str)将其转换为可加载的lua块,并使用string.dump保存。有了“true”参数,调试信息就被剥离了,实际上没有多少。是的,您可以看到字符串键,但这比只保存裸序列化的lua表要好得多
function tftp.SaveToMSI( tbl, msiPath )
assert(type(tbl) == "table")
assert(type(msiPath) == "string")
local localName = _GetFileNameFromPath( msiPath )
local file,err = io.open(localName, "wb")
assert(file, err)
-- convert the table into a string
local str = serializer.Serialize( tbl )
-- create a lua chunk from the string. this allows some amount of
-- obfuscation, because it looks like gobblygook in a text editor
local chunk = string.dump(load(str), true)
file:write(chunk)
file:close()
-- send from /usr to the MSI folder
local sendResult = tftp.SendFile( localName, msiPath )
-- remove from the /usr folder
os.remove(localName)
return sendResult
end
在记事本++中,一个小表的输出如下所示:
卢亚斯У
Vx@w(@АKА└АJБ┴ JА@
&А和名称
库仑计值?С╘ жжў