所以,针对以上问题,我们就联想到能不能通过类似“Spring XML与Properties”分离解耦的技术来实现,然后通过类似Maven预编译来自动生成相关的配置文件。针对以上想法,我做了“通过Shell脚本来组装Lua配置模板文件与配置属性文件来生成配置文件”的尝试,上苍不负有心人,最终搞定这事了。方案步骤,如下: 定义“Lua配置模板文件...
参数指定了虚拟机中的内存分配策略,例如我们已经在自己的代码中实现了内存池,这时候只需要写一个符合lua_Alloc原型的适配器,然后指定为Lua的内存分配器就可以了,使得内存分配更加灵活。当然,如果不想自定义内存分配策略,也可以使用luaL_newstate,这样Lua会帮你定义默认的内存分配策略。 我们可以先来看一下luaL_newsta...
从Lua的虚拟机源码处可以得知在luaL_loadbuffer函数会加载Lua,因此有安全意识的厂家会对Lua进行加密。修改这个源码,在真正的执行前进行解密;但是由于虚拟机的执行过程是开源的,并且由于cocos工程编译处理需要静态链接对应的引擎库,这样对应的引擎so文件是有符号的,因此对于攻击者来说,在luaL_loadbuffer函数处可以进行...
从Lua的虚拟机源码处可以得知在luaL_loadbuffer函数会加载Lua,因此有安全意识的厂家会对Lua进行加密。修改这个源码,在真正的执行前进行解密; 但是由于虚拟机的执行过程是开源的,并且由于cocos工程编译处理需要静态链接对应的引擎库,这样对应的引擎so文件是有符号的,因此对于攻击者来说,在luaL_loadbuffer函数处可以进行内存...
2.2.1:Luac的加密 从Lua的虚拟机源码处可以得知在luaL_loadbuffer函数会加载Lua,因此有安全意识的厂家会对Lua进行加密。修改这个源码,在真正的执行前进行解密; 但是由于虚拟机的执行过程是开源的,并且由于cocos工程编译处理需要静态链接对应的引擎库,这样对应的引擎so文件是有符号的,因此对于攻击者来说,在luaL_loadbuffe...
I know how to load a Lua file via luaL_loadbuffer. Now I have many Lua files, more than 100. I am thinking about how to speed up the loading process. One way I figured out is: put all files into one, and then load this file using luaL_loadbuffer (I did some tests, but just ...
二、 在luaL_loadbuffer函数处获取 luaL_loadbuffer是一个走得比较频繁的加载点。Cocos引擎的lua加载器为cocos2dx_lua_loader,如图4所示,最终都是调用luaL_loadbuffer函数来加载。一般厂商会在这层上面对lua脚本进行解密,既是在luaL_loadbuffer函数获取buff参数可得到解密后的lua脚本。修改逻辑后可以直接在这个点替换回去。
从Lua的虚拟机源码处可以得知在luaL_loadbuffer函数会加载Lua,因此有安全意识的厂家会对Lua进行加密。修改这个源码,在真正的执行前进行解密; 但是由于虚拟机的执行过程是开源的,并且由于cocos工程编译处理需要静态链接对应的引擎库,这样对应的引擎so文件是有符号的,因此对于攻击者来说,在luaL_loadbuffer函数处可以进行内存...
注意,上图中我们还能观察到luaL_loadbuffer函数的地址,牢记这一点,回头要用到。 识别出这些地址后,我们就可以开始写hook代码了: typedef void* lua_State; typedef int (*_luaL_loadfilex)(lua_State *L, const char *filename, const char *mode); ...
对于用户输入的每一行,C程序首先调用luaL_loadbuffer编译这些Lua代码。如果没有错误,这个调用返回零并把编译之后的chunk压入栈之后,C程序调用lua_pcall,它将会把chunk从栈中弹出并在保护模式下运行它。和luaL_laodbuffer一样,lua_pcall在没有错误的情况下返回零。