https://blog.csdn.net/yhx956058885/article/details/109066527
xlua的加固
准备hello.lua.txt文件:
function f(a, b)
print("hello world")
print('a', a, 'b', b)
return 1, {f1 = 1024}, 999, "hello,world"
end
print("hello world")
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using XLua;
using System;
using System.IO;
namespace Tutorial
{
public class CSCallLua : MonoBehaviour
{
LuaEnv luaenv = null;
public class DClass
{
public int f1;
public int f2;
}
[CSharpCallLua]
public delegate int FDelegate(int a, string b, out DClass c, ref int x, ref string y);
void Start()
{
luaenv = new LuaEnv();
//TextAsset luaScript = Resources.Load<TextAsset>("hello");
//luaenv.DoString(luaScript.text);
luaenv.AddLoader(SelfDefineLoader);
luaenv.DoString("require 'hello'");
FDelegate f = luaenv.Global.Get<FDelegate>("f");
DClass d_ret;
int x = 0;
string y = string.Empty;
int f_ret = f(100, "John", out d_ret, ref x, ref y);
}
/// <summary>
/// 自定义的路径的加载器
/// </summary>
/// <param name="filepath"></param>
/// <returns></returns>
public byte[] SelfDefineLoader(ref string filepath)
{
filepath = Application.dataPath + "/XLua/Tutorial/CSharpCallLua/Resources/" + filepath + ".bytes";
if (File.Exists(filepath))
{
return File.ReadAllBytes(filepath);
}
else
{
return null;
}
}
void OnDestroy()
{
luaenv.Dispose();
}
}
}
直接执行是没有问题的。
下面是将hello.lua.txt文件编译成helloxxx.lua.txt的字节码,然后执行:
mkdir build64 & pushd build64
cmake -DLUAC_COMPATIBLE_FORMAT=ON -G "Visual Studio 15 2017 Win64" ..
popd
cmake --build build64 --config Release
md plugin_lua53\Plugins\x86_64
copy /Y build64\Release\xlua.dll plugin_lua53\Plugins\x86_64\xlua.dll
pause
生成luac的工具:
找到:E:\OGL5\xlua\xLua\build\luac下的make_win64.bat文件,将-G的参数改为对应自己的vs的版本,我的是:vs2017,故改为:
双击之后:
命令:
C:\Users\user>E:\OGL5\xlua\xLua\build\luac\build64\Release\luac.exe -o E:\OGL5\xlua\xLua\Assets\XLua\Tutorial\CSharpCallLua\Resources\helloxxx.lua.txt E:\OGL5\xlua\xLua\Assets\XLua\Tutorial\CSharpCallLua\Resources\hello.lua.txt
修改cs文件这里换成使用helloxxx然后,再次运行unity,得到:
报错了。
此时我们需要生成lua的dll文件:
找到文件:E:\OGL5\xlua\xLua\build\make_win64_lua53.bat
这里需要改动编译参数:
-DLUAC_COMPATIBLE_FORMAT=ON
双击之后:
将我们的unity关闭,将xlua.dll拷贝到:
运行unity得到:
ok,这样就完成了lua文件的加密。
此时这个dll同样可以支持明文的lua文件。
但是ios的我试了下,为啥不行呢????
原因是我的路径写错了。哈哈哈哈哈哈哈哈