Lua自定义方式加载模块
来源:互联网 发布:帝国cms灵动标签大全 编辑:程序博客网 时间:2024/05/22 10:47
很多人苦于lua脚本被别人破解导致整个游戏被他人抄袭而苦恼,现在来说说最近刚研究通的一种修改办法,可以加载自己加密过的脚本,而且又不会导致普通的lua脚本无法执行,这样既可以运行加密脚本也可以运行普通的脚本,这是多么爽的一件事情。
好了接下来我直接给出我们需要修改的地方;打开文件loadlib.c这个文件我们可以看到有几个函数loader_Lua,loader_C等函数;我们可以仿写一个 ,实现自己读取文件数据的方法;由于一直没有什么深入对lua的实现进行解析,所以我一开始和很多人一样干脆将loadfile函数给修改了,后来发现这种做法是错误的;这样让很多别人实现好的IDE不能使用了,当然这也是一种办法;
我们可以在下面的表中加入自己的代码:
static const lua_CFunction loaders[] = {loader_preload, loader_Lua, loader_MYLua, loader_C, loader_Croot, NULL};
如果你熟悉源码你一定非常了解这个表中怎么能有loader_MYLua这么山寨的名字,这个名字是我自己实现的;为了不给大家带来心理压力,表示本菜鸟只好给大家演示下我有多么的菜,这样才可以让读本文的小伙伴们感到这家伙也是个坑爹的程序猿类。好了为了偷懒我几乎什么都没有去改变,只是将脚本的后缀改变了下。
下面看看这个山寨的函数是怎么实现的吧:
static int loader_MYLua (lua_State *L) { const char *filename; const char *name = luaL_checkstring(L, 1); filename = findfile(L, name, "MYDatapath"); if (filename == NULL) return 1; /* library not found in this path */ if (luaL_loadfile(L, filename) != 0) loaderror(L, filename); return 1; /* library loaded successfully */}
当然上面这个函数并不能起到加密的作用;而熟悉lua使用的大神一定知道这不是什么难事,介于读这篇文章的人几乎都会是菜鸟,本菜为了照顾和我一样属于火星来的程序员类,还是决定把这个些需要的函数写下来;这里找到文件后大家需要做的不是直接加载文件,而是一个从文件中读取数据;然后将数据进行解密的一个操作。将解密后的数据调用:
luaL_loadbuffer 或者调用luaL_loadstring
加密函数和这两个函数的用法,由于本菜鸟太懒了决定直接贴出连接地址自己去看吧:
http://www.lua.org/manual/5.1/manual.html#luaL_loadbuffer
好了废话少说,别以为这样你就万事大吉了,细心的小伙伴们会发现这函数中的MYDatapath这个山寨的家伙怎么来的;表示呵呵呵呵;这个啊我们需要在luaopen_package这个函数中加入自己的操作;才可以让lua顺利的加载起我们自己的加密数据。继续简单说一下需要在函数适当的位置加入下面的代码;
setpath(L, "MYDatapath", LUA_MYDATA_PATH, LUA_MYDATA_PATH_DEFAULT);(不用我说,任何菜鸟都知道该加入什么地方。)
#define LUA_MYDATA_PATH_DEFAULT \ ".\\?.MYdata;" LUA_LDIR"?.MYdata;" LUA_LDIR"?\\init.MYdata;" \ LUA_CDIR"?.MYdata;"
好了废话不多说,这个宏定义给出来,添加位置还是说一下好了;这个当然是在luaconf.h 这个文件之中了。坑爹啊,键人你能不能一次性把东西说完,有人开始吐槽了;肯定是有人看到这里以后就开始编译代码了;发现还有个宏没有定义:
#define LUA_MYDATA_PATH "LUA_MYADATA_PATH"
这个宏的位置在loadlib.c 这个的开头加入就好了;一切自己的方式加载自己的加密脚本就这样完成了。不得不说这个lua的作者是位大师级的架构师;能让我这么菜的人轻易的去实现自己想做的事情;整个实现花费大约在两小时之内。
这是我现在最想做的事情!
- Lua自定义方式加载模块
- Lua自定义方式加载模块
- 以自定义方式加载 lua 模块
- 以自定义方式加载 lua 模块
- Lua动态加载模块
- lua 重新加载模块
- Lua动态加载模块
- Lua加载模块
- Lua 调用自定义C模块
- Lua 调用自定义C模块
- modprobe加载自定义模块
- 修改lua的文件加载器,自定义lua文件加载
- 修改lua的文件加载器,自定义lua文件加载
- 修改lua的文件加载器,自定义lua文件加载
- Lua 5.3 动态加载C模块
- 用preload加载Lua导出模块
- Lua 调用自定义C模块(练习)
- lua(9)-模块和自定义loader
- java调用shell命令的两种方法
- ARM Architecture C 语言寻址解析—— 从U-Boot relocation所展开的探索(三)
- LeetCode:Populating Next Right Pointers in Each Node I & II
- mac下配置svn服务器
- Nyoj 456
- Lua自定义方式加载模块
- GIT总结
- [Cocoa]深入浅出 Cocoa 之消息
- 如何学习vc+(vc的用处)
- 广度优先搜索
- 《python自然语言处理》笔记---chap2 获得文本语料和词汇资源
- 关于单点登录中的用户信息存储问题的探讨
- 备战
- 改flash配置