Lua Decode Kits(Lua解码套件)|饥荒联机版

lua解码工具包
感谢@Vyuri的英文(谷歌)翻译
注意! 这本身并不是一个MOD! ! !
注意! 这本身就不是一个MOD! ! !
注意! 这本身就不是一个MOD! ! !
如果你正在学习如何制作MOD,想参考别人写的MOD,但发现这些MOD都是乱七八糟的,那么这篇文章就适合你。
近年来,个别作者参考了开源社区的劳动成果进行创作,但由于各种原因不愿意分享自己的代码,于是用各种编码和伪加密来阻止别人阅读和学习。这种行为违反了社区原有的开源精神,破坏了社区的氛围,也使那些热衷于创作MOD的玩家无法学习,严重阻碍了MOD社区新鲜血液的注入。
(当然,建议直接阅读官方代码来学习制作MOD)。github上也有很多人整理了官方库的文档,非常方便)。
为了应对一些简单的编码或所谓的加密措施,这里提供一些编码案例和解决方案。
建议使用工具[Visual Studio Code]来处理代码和高亮代码。如果代码没有被编码,而是被格式化成一行一行的,可以使用VSCode的lua格式插件将其格式化成标准格式,以便阅读
1. 转义字符串类型
特点。
文件中有很多\"/\"加三位数的字符串,本质上只是将可读字符串编码为转义字符
解决办法。
打开mod文件夹中的1.lua-string-decoder/lua-string-decoder.html,加载需要解码的lua文件,它会自动解码并下载格式化的明文文件
2.loadstring type
特点。
文件中有很多\"/\"加2-3位数字的字符串,但与第一种不同的是,字符串前有一个loadstring函数
解决方案。
这实际上是用第一种方法把所有代码都当成字符串类型的编码,然后调用Lua的loadstring方法把字符串加载到代码中去
一个更方便的方法是
(1). 将loadstring(\"code\")改为print(\"code\"),并将这部分内容复制到一个新的lua文件中,在lua环境中执行,然后输出到文件2。
例如,在2.lua5.1 for-loadstring-decode文件夹下创建一个新文件,如code.lua,复制上面的print(\"code\")并保存
(假设你是一个windows系统)
(2). 然后在2.lua5.1 for-loadstring-decode文件夹中,按住shift+右键,在菜单中选择在这里打开PowerShell窗口,然后输入
.lua5.1 code.lua> decode.lua
实现
(3). 然后在目录中生成的decode.lua中的代码就是原始代码。
注意事项
注意输出文件的编码是否为utf-8,有时输出文件为utf-16,在保存和使用时,必须用utf-8编码保存文件才能使用。
有些人用loadstring进行多次递归编码。例如,解码后的代码仍然是loadstring。在这种情况下,上述操作可以重复多次。如果有很多递归,建议写一个脚本来自动执行,直到出现一些正常的代码。常见的非转义字符串在,如 \"函数 \"之类的。
3.luac预编译类型
[/img
特点是。文件以.lua结尾,但打开的是二进制文件。用vscode打开后,文本中有很多不可读的符号,但在文件的开头可以看到LuaR或LuaQ可读文本
解决方案。
这是用Luac预编译的,它可以加快执行Lua代码的效率,防止文件被读取。
根据LuaR或LuaQ,可以判断出lua的版本。R和Q代表十六进制数字0x51和0x52,它们是lua5.1和lua5.2的版本。
在mod文件中默认提供了lua5.1版本的反编译器unluac.jar。如果是其他版本,你需要在modinfo中找到unluac仓库来下载,或者在github中搜索其他版本的luac反编译工具
以lua5.1版本为例。
(1) 打开mod文件夹中的2.lua5.1 for-loadstring-decode文件夹,并复制需要反编译的lua脚本,如1.lua
(2) 同样地shift+右键点击这里,打开PowerShell窗口,输入java -jar unluac.jar --1.lua> 2.lua
(3) 2.lua是反编译后的文件,但里面的变量名大多会因为编译而失去原来的名字,所以你需要自己识别每个类和函数的功能。
4. 函数名替换类型
特征。
函数和字符串本身没有被编码,但大量的变量名和函数被替换成了难以阅读的形式,如
函数 i1ll11lli11lii = xxx
illl11lliiilliiooii11li = true or something
解决办法。
直接使用编辑器的替换功能,先将文件中难读的字符替换成较短的字符,如大写的A B C。
然后根据代码内容分析它们的用途,自己改名。如果很麻烦,可以写一个脚本来自动替换。
总结
以上只是常见编码方法的解决方案。在很多情况下,作者会结合使用多种编码方法。