精华内容
下载资源
问答
  • Lua代码加密

    2018-03-26 07:08:23
    Lua代码加密 并且方便使用 ,适合不太会的人用. Lua代码加密 并且方便使用 ,适合不太会的人用.
  • 1 、 lua代码加密。在下载安装lua后,找到 luac 这个可执行文件,可在当前目录下使用 tocuh test.lua 新建一个lua格式的文件,在里面简单写一行代码: local str = 'hello world' print(str) 保存该文件,然后通过...

    Lua支持源码加载和二进制加载,一些项目发布时需要做代码加密,现在简单写一下把lua代码转为二进制进行加密的方法。

    1 、 lua代码加密。在下载安装lua后,找到 luac 这个可执行文件,可在当前目录下使用 tocuh test.lua 新建一个lua格式的文件,在里面简单写一行代码:

    local str = 'hello world'
    print(str)
    
    

    保存该文件,然后通过下面的命令将 test.lua 编译成二进制文件,达到简单的加密目的。

    ./luac -o test_new.lua test.lua

    2、LuaJit代码加密。下载安装LuaJit,然后找到 luajit 这个可执行文件,可在当前目录下使用 tocuh test.lua 新建一个lua格式的文件,在里面简单写一行代码:

    local str = 'hello world'
    print(str)
    

    保存该文件,然后通过下面的命令将 test.lua 编译成二进制文件,达到简单的加密目的。

    ./luajit -b test.lua test_new.lua

    加密后的格式是二进制格式:
    test11111111.lua 是源文件 test333333333.lua是加密后的输出文件
    在这里插入图片描述

    最近在使用skynet网络框架,只要使用的是 lua 语言编写,那就以skynet实际项目来举一个例子。

    在代码所在的目录下面,编写shell 脚本。
    在这里插入图片描述
    上半部分就是将代码加密的shell脚本,下半部分是将加密好的文件执行

    展开全文
  • lua脚本加密,lua代码加密使用说明

    千次阅读 2019-04-17 15:04:23
    配置好xLua环境后,用几维提供的libluajit.a替换对应的默认文件,来实现对Lua文件的加密加密后的Lua文件只能由几维提供的lua bytecode解释器解析,从而避免Lua文件被逆向分析,达到保护Lua核心代码的目的。...

    概述

    xLua加密工具主要是一款Lua安全编译器,配置好xLua环境后,用几维提供的libluajit.a替换对应的默认文件,来实现对Lua文件的加密,加密后的Lua文件只能由几维提供的lua bytecode解释器解析,从而避免Lua文件被逆向分析,达到保护Lua核心代码的目的。

    集成

    1、获取xLua

    从官方下载对应的xLua版本, 默认是master分支

    1)这个步骤是属于开发环节,请自行下载并部署好【xLua是开源项目,请自行检测环境变量、Lua和Luajit的版本,以便顺利编译通过】

    2)Luajit-2.1.0-beta2以上版本支持64位,几维编译器版本的luajit加密方案基于Luajit-2.1.0-beta2

    2、Android快速集成加密版静态库

    1)执行build目录下的make_android_luajit.sh(根据自己的平台选择编译脚本),确保原始的编译成功

    2)编译成功之后查看luajit源码目录下src/libluajit.a文件

    3)用几维提供的libluajit.a进行替换,x86对应x86,armeabi-v7a对应armeabi-v7a

    4)修改make_android_luajit.sh文件,编译armeabi-v7a版本的libxlua.so,如下图

    5)同理修改编译出x86版本的libxlua.so

    6)复制编译好的libxlua.so替换项目中原来的libxlua.so(替换之前最好先做好备份),推荐先使用源码测试,然后换成几维提供的luajit编译器编译出二进制bytecode文件进行测试

    3、iOS快速集成加密版静态库

    1)执行make_ios_luajit.sh将原始版本的libxlua.a编译出来

    注意:xlua默认是armv7、armv7s、arm64三种架构,如果使用xcode版本过高,比如9.3.x以后的不再支持armv7 armv7s,那么生成的只会有arm64这种架构

    2)同android一样注释掉生成libluajit.a的过程如图

    注意:这里区别在于如果需要arm64架构那么需要使用lipo -create arm64/libluajit.a -output libluajit.a,需要armv7和arm64使用lipo -create arm64/libluajit.a armv7/libluajit.a -output libluajit.a

    3)再次执行make_ios_luajit.sh生成libxlua.a

    4)替换项目中原来的libxlua.a编译对应平台的bytecode文件,32位对应32位,64位对应64位的,生成项目,使用xcode编译测试(几维luajit安全解释器支持armv7,armv7s,arm64所以支持真机)

    友情告知地址,lua脚本加密:https://www.kiwisec.com/product/compiler-lua.html

    展开全文
  • lua 代码加密方案

    千次阅读 2015-03-14 16:13:34
    lua 代码加密方案,直接修改源码和外部修改加载器

    require 实现

    • require函数在实现上是依次调用package.searchers(lua51中是package.loaders)中的加载函数,成功后返回。在loadlib.c文件中有四个加载函数的实现,分别为searcher_preload, searcher_Lua, searcher_C, searcher_Croot。
    • searcher_preload是从读取LUA_REGISTRYINDEX的_PRELOAD字段,已经require过的文件会写入到该表中
    • searcher_Lua是根据文件名查找package.path中的所有路径的lua文件,存在文件则返回
    • searcher_C是搜索package.cpath中的所有路径下的库文件
    • searcher_Croot是对require(“a.b.c”)的情况,读取a库,然后查找函数名为lua_a_b_c的lua_CFunction函数
    static void findloader (lua_State *L, const char *name) {
      int i;
      luaL_Buffer msg;  /* to build error message */
      luaL_buffinit(L, &msg);
      lua_getfield(L, lua_upvalueindex(1), "searchers");  /* will be at index 3 */
      if (!lua_istable(L, 3))
        luaL_error(L, LUA_QL("package.searchers") " must be a table");
      /*  iterate over available searchers to find a loader */
      for (i = 1; ; i++) {
        lua_rawgeti(L, 3, i);  /* get a searcher */
        if (lua_isnil(L, -1)) {  /* no more searchers? */
          lua_pop(L, 1);  /* remove nil */
          luaL_pushresult(&msg);  /* create error message */
          luaL_error(L, "module " LUA_QS " not found:%s",
                        name, lua_tostring(L, -1));
        }
        lua_pushstring(L, name);
        lua_call(L, 1, 2);  /* call it */
        if (lua_isfunction(L, -2))  /* did it find a loader? */
          return;  /* module loader found */
        else if (lua_isstring(L, -2)) {  /* searcher returned error message? */
          lua_pop(L, 1);  /* remove extra return */
          luaL_addvalue(&msg);  /* concatenate error message */
        }
        else
          lua_pop(L, 2);  /* remove both returns */
      }
    }
    • 现在要实现在require时能读取加密文件,有两种办法,一种是直接修改源代码,即修改第二个加载函数,重新实现其中读取文件内容的函数,第二种办法是在lua中修改package.searchers表,在加载器的第一和第二种之间添加一个加载器函数,该加载器模拟searcher_Lua函数,搜索path路径,然后逐个匹配文件,然后读取文件内容,解密,然后调用load加载并返回(c中为luaL_loadbufferx),这里在加载时最好传入文件名作为来源参数,方便在调试信息中定位.
    • 加密方案可使用类似xxtea轻量级的加密算法
    • 在对lua文件进行加密打包时,可以在文件头写入指定的签名内容,以方便在解密前预先判断是否为有效的加密文件

    修改lua源代码方案

    • 在searcher_Lua中最终是调用lua_load(L, getF, &lf, lua_tostring(L, -1), mode)加载源文件,该函数的第二个参数getF是一个lua_Reader函数,所以这里可以重写该函数以实现解密,也可以向外部暴露一个接口用来将自定义的文件读取函数作为参数传给lua_load。下面是原版的getF实现
    static const char *getF (lua_State *L, void *ud, size_t *size) {
      LoadF *lf = (LoadF *)ud;
      (void)L;  /* not used */
      if (lf->n > 0) {  /* are there pre-read characters to be read? */
        *size = lf->n;  /* return them (chars already in buffer) */
        lf->n = 0;  /* no more pre-read characters */
      }
      else {  /* read a block from file */
        /* 'fread' can return > 0 *and* set the EOF flag. If next call to
           'getF' called 'fread', it might still wait for user input.
           The next check avoids this problem. */
        if (feof(lf->f)) return NULL;
        *size = fread(lf->buff, 1, sizeof(lf->buff), lf->f);  /* read block */
      }
      return lf->buff;
    }

    外部修改加载器方案

    • 直接修改package.searchers表,向其中添加加载器,c版实现如下
    void addLuaSearcher(lua_CFunction func)
    {
        if (!func) return;
    
        // stack content after the invoking of the function
        // get loader table
        lua_getglobal(m_state, "package");          /* L: package */
        lua_getfield(m_state, -1, "loaders");       /* L: package, loaders */
        // insert loader into index 2
        lua_pushcfunction(m_state, func);           /* L: package, loaders, func */
        for (int i = lua_objlen(m_state, -2) + 1; i > 2; --i)
        {
            lua_rawgeti(m_state, -2, i - 1);        /* L: package, loaders, func, function */
            // we call lua_rawgeti, so the loader table now is at -3
            lua_rawseti(m_state, -3, i);            /* L: package, loaders, func */
        }
        lua_rawseti(m_state, -2, 2);                /* L: package, loaders */
        // set loaders into package
        lua_setfield(m_state, -2, "loaders");       /* L: package */
        lua_pop(m_state, 1);
    }
    • 加载器函数实现根据传入的文件名,逐个匹配的package.path中的内容,存在文件后,然后读取文件内容,解密,最后再将解出的内容调用load加载并返回(c中为luaL_loadbufferx),实现可以参照lua源码中的searcher_Lua实现
    展开全文
  • Cocos2d-lua中lua代码加密成luac

    千次阅读 2019-04-11 01:17:49
    lua代码加密成luac,主要使用Cocos2d中的luacompile。来了解一下luacompile相关用法,使用命令 cocos luacompile -h即可查看(我使用的是3.16版本的cocos2d-x,放在D盘的cocos目录下)。如下图 创建一个Cocos2d-...

    概述

    lua代码加密成luac,主要使用cocos2d-x中的luacompile,是使用XXTEA加密算法实现的。

    luacompile

    首先来了解一下luacompile相关用法,使用命令 cocos luacompile -h即可查看(我使用的是3.16版本的cocos2d-x,放在D盘的cocos目录下)。如下图

    流程

    1.创建一个Cocos2d-lua项目,取名为demo。

    2.在demo项目的根目录下,创建一个文件夹src_luac(随便什么名字都可以),用来存放加密好的luac文件。

    3.在demo项目的AppDelegate.cpp文件的applicationDidFinishLaunching()方法中,有以下两行代码,其作用是设置加密使用的key和sign。

    LuaStack* stack = engine->getLuaStack();
    stack->setXXTEAKeyAndSign("demoKey", strlen("demoKey"), "demoSign", strlen("demoSign"));

    4.运行命令D:\cocos\cocos2d-x-3.16\tools\cocos2d-console\bin\cocos luacompile -s src -d src_luac -e -k demoKey -b demoSign --disable-compile即可在src_luac文件夹中看到加密好的luac文件。
    -s src为项目中lua代码所在的目录,
    -d src_luac表示的是加密后的luac文件的输出存储路径,
    -k demoKey -b demoSign与AppDelegate.cpp中设置的key和sign保持一致,
    --disable-compile使其只是进行简单的XXTEA加密,而不编译为64bit字节码(有些机器不支持)。

    5.为了方便使用,我们在demo项目根目录创建一个luacEncrypt.bat文件,将上述命令代码放入该bat文件中,双击即可执行其中的命令。

    展开全文
  • 配置好xLua环境后,用几维提供的libluajit.a替换对应的默认文件,来实现对Lua文件的加密加密后的Lua文件只能由几维提供的lua bytecode解释器解析,从而避免Lua文件被逆向分析,达到保护Lua核心代码的目的。...
  • lua 代码加密方式很很多种,这里只讲最简单的一种,就是把代码编译成二进制字节码。lua 是一门脚本语言,不需要经过编译就可以使用 lua 解释器来执行;但我们也可以把 lua 代码事先编译成二进制文件,这样就达到了...
  • lua代码加密策略

    千次阅读 2018-10-28 03:20:31
    1、使用类似cocos的加密方式,对文件打上加密...2、luac编译后使用,luac编译后的代码,采用工具能够恢复一部分,可读性不强,可以作为一般应用的加密方式 3、将加密解密的函数,由服务端传入。客户端执行这个函数...
  • cocos对lua代码加密

    2019-01-25 00:16:09
    我用的普通的cocos2d lua,没用quick,quick好像可以对整个资源包括图像和音频都加密,打包成zip。但我没用quick.看了下luacompile 的 help,比较简单啊。 先在项目根目录下建立了一个out的文件夹,然后...
  • Lua代码加密,防止代码反编译

    千次阅读 2018-06-11 11:19:37
    在程序发布前一般会对脚本进行加密,防止代码泄漏。加密工具:Virbox ProtectorDS Protector优点:便捷,一键加壳,无需编写代码。安全,混淆、虚拟化、碎片代码、反黑、定制SDK等最新加密安全技术。...
  • cocos2d 3.3 lua 代码加密 luac

    万次阅读 2014-12-22 09:46:48
    1.0 cocos luacompile 用法我用的普通的cocos2d lua,没用quick,quick好像可以对整个资源包括图像和音频都加密,打包成zip。我看了下luacompile 的 help,比较简单啊。先在项目根目录下建立了一个out的文件夹,然后...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 198
精华内容 79
关键字:

lua代码加密