Lua自定义方式加载模块


    很多人苦于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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值