您的位置:首页 > 编程语言 > Lua

Lua自定义方式加载模块

2015-04-23 12:44 323 查看
    很多人苦于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的作者是位大师级的架构师;能让我这么菜的人轻易的去实现自己想做的事情;整个实现花费大约在两小时之内。

     原文地址:http://blog.csdn.net/cparent/article/details/22316083
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: