lua 反编译_lua反编译 - CSDN
精华内容
参与话题
  • 最近开始学习对于lua代码的保护,先对基本的概念加以理解并进行记录; 一、编译lua 1.1 lua源码编译 这些在Linux下的支持比较好,直接make就可以; 第一种:下载mingw 在Windows下面可以通过下载mingw,通过...

    最近开始学习对于lua代码的保护,先对基本的概念加以理解并进行记录;

    一、编译lua

    1.1 lua源码编译

    这些在Linux下的支持比较好,直接make就可以;

    第一种:下载mingw

    在Windows下面可以通过下载mingw,通过mingw软件,我们可以在windows上模拟出linux的环境;

    第二种:通过VS

     

    lualib工程:1)添加除了lua.c 和 luac.c 之外的所有“.c”文件。2)在属性中设置头文件的路径,也就是include文件夹的路径。3)在属性中设置“配置类型”->“静态库(.lib)”。工程的编译结果为:lualib.lib。

    lua工程:1)添加lua.c。2)在属性中包含include的路径以及lualib.lib的路径。3)在属性的“连接器”->“输入”中写入lualib.lib。4)在“解决方案”的属性中,设置项目项目依赖关系lua依赖于lualib。编译的结果为:lua.exe

    luac工程:1)添加luac.c。后面的设置和lua工程相同。编译的结果为:luac.exe

    这下就可以对一个lua文件进行编译了:

    lua是一个脚本语言,像python一样,这里lua.exe可以对其进行解释执行,同时也可以使用luac.exe对lua进行编译为luac字节码。

    接下来实验一下:

     luac.exe -o HelloWorld.out HelloWorld.lua

    对luac文件进行简单的分析一下:通过使用非虫大大的bt脚本对lua格式进行了解一下:

    虫大这个已经写的很详细了,可以参考了解:https://zhuanlan.zhihu.com/p/30094117

    1.2 luaJIT源码编译

    在了解luaJIT之前对产生的背景进行简单的了解:由于lua为传统性的解释脚本语言,这个时候最然可以完美的跨不同的平台,但是性能比较差,这个时候JIT出现,动态运行的即时编译,在编译的过程中对于一些热路径进行记录,编译处理为机器码,在Dalvik虚拟机早期的编译中也是这样的,但是要处理好热路径和去寻找过程之间的性能平衡。

    可以参考这个帖子https://my.oschina.net/u/2539854/blog/1480238进行初步的了解,后面有机会会详细的介绍这一块,毕竟设计到编译就比较好玩。

    这给比较简单,下载 LuaJIT 源码,使用VS中命令行工具,prompt,到对应源码的src目录下进行编译:

    luajit.exe -b HelloWorld.lua HelloWorldJit.out

    接下来使用luajit对lua进行使用:

    通过对于字节码的对比上也可以明显的看出JIT编译出来的字节码比较少,运行起来的性能就比较快。

    接下来对于luajit的格式进行分析,详情参考虫大的文章:https://github.com/feicong/lua_re/blob/master/lua/lua_re3.md

    二、反编译lua字节码

    2.1反编译luac字节码:

    目前对于luac的反编译普遍使用的是luadec这个工具:

    GitHub:https://github.com/viruscamp/luadec

    编译过程为:

    git clone https://github.com/viruscamp/luadec cd luadec git submodule update --init lua-5.1 cd lua-5.1 make linux cd ../luadec make LUAVER=5.1

    采用不同的版本进行编译。

    注意:解决编译错误:“readline/readline.h: No such file or directory”

    /usr/bin/ld: cannot find -lncurses

    2.2反编译luaJIT字节码:

    下载 https://github.com/bobsayshilol/luajit-decomp

    1. 确定luajit版本(如何确定不是本文重点),这里下载对应版本
    2. 编译luajit然后将生成的luajit.exe、lua51.dll和jit文件夹覆盖到lua-decomp
    3. 复制要反编译的文件到luajit-decomp
    4. 将反编译文件重命名为test.lua
    5. 运行decoder_new.exe
    6. 最终生成test.asm out.lua out2.lua,out2.lua就是我们要的文件

    对于HelloWorldjit.out 反编译可以看到:

    反汇编的结果为:

    反编译的结果为:

    当然网上也有人说这个工具对于复杂的反编译有问题,可以借助于这个工具:后面破解逆向用到的时候再具体进行阐述。

    https://github.com/franko/luajit-lang-toolkit

    三、总结

          大致的了解了lua这门语言,以及包括luac、以及luajit等等,了解这些之后对于后面lua语言的保护,以及它的设计原理打下基础,同时后面还会重点的去分析lua虚拟机以及luajit的相关东西。

     

    四、参考链接:

    https://blog.csdn.net/snlscript/article/details/15533373

    https://zhuanlan.zhihu.com/p/30094117

    https://my.oschina.net/u/2539854/blog/1480238

    https://www.jianshu.com/p/fc4bee82c3ef

    https://github.com/feicong/lua_re/blob/master/lua/lua_re3.md

    https://github.com/viruscamp/luadec

    展开全文
  • lua编译与反编译

    千次阅读 2013-02-18 19:09:10
    lua的编译需要工具luac.exe cmd: luac xxx.lua -o xxx.lua 编译后的文件为二进制文件,未加密,可用luadec.exe进行反编译: cmd: luadec xxx.lua -d xxx.lua 反编译后几乎与源码没什么区别

    lua的编译需要工具luac.exe

    cmd:  luac xxx.lua -o xxx.lua

    编译后的文件为二进制文件,未加密,可用luadec.exe进行反编译:

    cmd: luadec xxx.lua -d xxx.lua

    反编译后几乎与源码没什么区别


    展开全文
  • lua反编译工具

    热门讨论 2020-07-30 23:30:46
    lua反编译工具,能把lua的字节码反编译成lua代码
  • lua反编译,乱解密

    2020-07-30 23:30:12
    一键解密反编译
  • 两种.luac的反编译过程

    万次阅读 2018-11-30 15:47:15
    Luac反编译 ​ 针对Cocos2dx-lua提供的轻量级加密方案的反编译。该博客参考自原文章 一般使用该轻量级加密方案的命令如下: cocos luacompile -s 未加密源码目录 -d 加密后源码目录 -e -k 加密key -b 加密sign...

    解密Cocos2dx-lua XXTEA加密后.luac文件

    ​ 针对Cocos2dx-lua提供的轻量级加密方案的反编译。该博客参考自原文章

    加密命令以及参数

    一般使用该轻量级加密方案的命令如下:

    cocos luacompile -s 未加密源码目录 -d 加密后源码目录 -e -k 加密key -b 加密sign --disable-compile

    要解密,那么需要知道的是加密key加密sign

    一、加密解密思路

    ​ 我们将后缀为.lua的文件加密成.luac文件,然后放入apk中,那么在程序运行时,势必需要对.luac的文件进行解密,然后再加载运行文件。那程序是如何知道我们在加密key呢?有两个猜想:

    ​ 1,加密key写入文件,程序在解密时先读取文件中的加密key,再解密。

    ​ 2,加密key与程序内部约定某个值。

    显然,第一种做法很不明智,key值直接存入文件很容易破解,那么就验证第二种做法,既然加密key是约定的,那么肯定可以在程序中找到该值。通过搜索发现验证了该想法。

    在工程的frameworks\runtime-src\Classes\AppDelegate.cpp文件applicationDifFinishLauching方法中
    AppDelegate.cpp

    能够看到设置了加密key和sign

    二、反编译luac

    ​ 要反编译.luac文件,需要知道加密key和sign。上面提供了一个思路,sign在.luac中寻找,key在打包后的libcocos2dlua.so中寻找。

    1,寻找加密sign

    ​ 用记事本打开某个.luc文件,文件开头的前几个字符即加密sign
    记事本打开.luac文件

    2、寻找加密key

    ​ 下载IDA(交互式反汇编器),将libcocos2dlua.so拖到该IDA快捷图标上,此时会弹出
    so打开选择框

    选择 OK,等待加载function name,避免操作应用是卡住。等会后选择view/open subviews/strings
    strings窗口

    Ctrl + F 搜索 刚刚获取的sign(XXTEA),得到如下结果
    搜索sign

    点击该结果,在该结果的附近则能够发现加密key(2dxLua)
    加密key

    3、加密key,加密sign已经获取,如何反编译

    cocos使用的XXTEA进行加密,其在external目录下,在xxtea.h可以看到,提供了加密解密方法

    #ifndef XXTEA_H
    #define XXTEA_H
    
    #include <stddef.h> /* for size_t & NULL declarations */
    
    #if defined(_MSC_VER)
    
    typedef unsigned __int32 xxtea_long;
    
    #else
    
    #if defined(__FreeBSD__) && __FreeBSD__ < 5
    /* FreeBSD 4 doesn't have stdint.h file */
    #include <inttypes.h>
    #else
    #include <stdint.h>
    #endif
    
    typedef uint32_t xxtea_long;
    
    #endif /* end of if defined(_MSC_VER) */
    
    #define XXTEA_MX (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z)
    #define XXTEA_DELTA 0x9e3779b9
    
    unsigned char *xxtea_encrypt(unsigned char *data, xxtea_long data_len, unsigned char *key, xxtea_long key_len, xxtea_long *ret_length);
    unsigned char *xxtea_decrypt(unsigned char *data, xxtea_long data_len, unsigned char *key, xxtea_long key_len, xxtea_long *ret_length);
    
    #endif
    

    4、运行cpp文件,调用解密方法,解密.luac文件

    win上运行cpp文件,可以按照MinGW MinGW,选择mingw-get-setup.exe。选中里面的mingw32-gcc-g+±bin进行安装。安装完成后配置下环境变量,安装目录下的bin,例如D:\MinGW\bin

    在cocos引擎external目录下复制一份xxtea.cpp和xxtea.h,修改xxtea.cpp的后缀名为xxtea.c,不知为啥,用.cpp后缀就是生成不了exe文件。然后编写一个入口文件,main.c

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include"xxtea.h"
    int main(int argc,char*argv[]){
    	FILE*fp;
    	char*key;
    	char*sign;
    	char*infile;
    	char*outfile;
    	char*buf,*data;
    	unsigned long size;
    	int keylen,signlen,retlen;
    	if(argc<5){
    		printf("usage:lua_decrypt infile outfile sign key\n");
    		return -1;
    	}
    	else{
    		infile=argv[1];
    		outfile=argv[2];
    		sign=argv[3];
    		key=argv[4];
    		keylen=strlen(key);
    		signlen=strlen(sign);
    	}
    
    	if((fp=fopen(infile,"rb"))==NULL){
    			perror("can't open the input file");
    			return -1;
    	}
    	fseek(fp, 0L, SEEK_END);
    	size=ftell(fp);
    	rewind(fp);
    	buf=(char*)malloc(size);
    	fread(buf,size,1,fp);
    	fclose(fp);
    	data=xxtea_decrypt(buf+signlen,size-signlen,key,keylen,&retlen);
    	if(data==NULL){
    		printf("%s decrypt fail\n",infile);
    		return -1;
    	}
    	if((fp=fopen(outfile,"wb+"))==NULL){
    		    perror("can't open the output file");
    			return -1;
    	}
    	fwrite(data,retlen,1,fp);
    	fclose(fp);
    	free(data);
    	printf("%s decrypt successful\n",infile);
    	return 0;
    
    }
    
    
    

    将这三个xxtea.c xxtea.h main.c这三个文件放在同一个目录下,进入cmd,进入该目录下,键入

    gcc xxteac main.c -o luac_decrypt生成luac_decrypt.exe,然后将要解密的.luac文件放在该目录下,键入

    luac_decrypt xx.luac xx.lua sign key即可反编译.luac文件。

    例如放置了version.luac文件在该目录,sign是XXTEA,key是2dxLua,即命令如下:

    luac_decrypt version.luac version.lua XXTEA 2dxLua即可以反编译后输出文件version.lua

    三、扩展,批处理

    ​ 每次都是命令行反编译一个文件,显示效率低效。可以编写批处理,设置luac文件夹,输出文件夹,反编译exe路径,sign,key,然后循环反编译luac文件夹下所有的.luac文件

    rem "decompile Luac script"
    echo off
    rem set your luac direction
    set sourcePath=C:\Users\86181\Desktop\luac
    rem set your luac_decrypt.exe path
    set decryptPath=C:\Users\86181\Desktop\luac_decrypt.exe
    rem outfile direction
    set outfilePath=C:\Users\86181\Desktop\lua\
    set suffix=.lua
    set sign=XXTEA
    set key=2dxLua
    
    md %outfilePath%
    
    for /r %sourcePath% %%i in (*.luac) do ( 
    	%decryptPath% %%i %outfilePath%%%~ni%suffix% %sign% %key%
    )
    
    pause
    
    

    反编译Luac加密的.luac文件

    一、.lua文件编译为字节码文件.luac

    ​ lua中自带将.lua文件编译为字节码文件,命令行luac -o 输出文件 源文件

    在桌面新建文件夹aaa,放入源文件helper.lua命令行中执行

    luac -o helper_luac.luac helper.lua会在aaa文件夹下生成helper_luac.luac文件,用记事本打开该文件。
    记事本打开helper_luac.luac

    二、.luac文件反编译为.lua文件

    ​ 下载unluac.jar包,官网地址

    将下载后的包重命名为unluac.jar,并拖动到aaa文件夹下,执行命令java -jar unluac.jar helper_luac.luac>helper_decrypt.lua(需要支持java命令),这时会在aaa文件夹下生成helper_decrpyt.lua,将原本的helper.lua与反编译后的helper_decrpyt.lua进行对比,发现除了某些格式,代码基本一致,反编译成功。
    编译前后对比

    展开全文
  • Lua脚本反编译入门之一

    万次阅读 2014-08-04 21:31:20
    随着越来越多的游戏,软件采用Lua来实现业务逻辑, ...本教程,便来普及lua 的虚拟机指令及其反编译lua脚本,成为文本形式的脚本 1.Lua的虚拟机指令,5.2 的有40条 Lua的指令使用一个32bit的unsig
    随着越来越多的游戏,软件采用Lua来实现业务逻辑,
    想搞黑产的同学,时常便会遇见lua脚本,可惜大部分都是编译过的lua脚本,而且还是自定义的。
    便难倒了很多菜鸟,lua 的实现机制,那可是虚拟机技术,非常难于调试。
    本教程,便来普及lua 的虚拟机指令及其反编译lua脚本,成为文本形式的脚本

    1.Lua的虚拟机指令,5.2 的有40条

    Lua的指令使用一个32bit的unsigned integer表示。所有指令的定义都在lopcodes.h文件中(可以从Lua 官方网站下载),使用一个enum OpCode代表指令类型。在lua5.2中,总共有40种指令(id从0到39)。根据指令参数的不同,可以将所有指令分为4类:

    点击图片以查看大图图片名称: Lua指令类型.png查看次数: 13文件大小: 7.9 KB文件 ID : 88439

    typedef enum {
    /*----------------------------------------------------------------------
    name    args  description

    ------------------------------------------------------------------------*/
    OP_MOVE,/*  A B  R(A) := R(B)          */
    OP_LOADK,/*  A Bx  R(A) := Kst(Bx)          */
    OP_LOADKX,/*  A   R(A) := Kst(extra arg)        */
    OP_LOADBOOL,/*  A B C  R(A) := (Bool)B; if (C) pc++      */
    OP_LOADNIL,/*  A B  R(A), R(A+1), ..., R(A+B) := nil    */
    OP_GETUPVAL,/*  A B  R(A) := UpValue[B]        */

    OP_GETTABUP,/*  A B C  R(A) := UpValue[B][RK(C)]      */
    OP_GETTABLE,/*  A B C  R(A) := R(B)[RK(C)]        */

    OP_SETTABUP,/*  A B C  UpValue[A][RK(B)] := RK(C)      */
    OP_SETUPVAL,/*  A B  UpValue[B] := R(A)        */
    OP_SETTABLE,/*  A B C  R(A)[RK(B)] := RK(C)        */

    OP_NEWTABLE,/*  A B C  R(A) := {} (size = B,C)        */

    OP_SELF,/*  A B C  R(A+1) := R(B); R(A) := R(B)[RK(C)]    */

    OP_ADD,/*  A B C  R(A) := RK(B) + RK(C)        */
    OP_SUB,/*  A B C  R(A) := RK(B) - RK(C)        */
    OP_MUL,/*  A B C  R(A) := RK(B) * RK(C)        */
    OP_DIV,/*  A B C  R(A) := RK(B) / RK(C)        */
    OP_MOD,/*  A B C  R(A) := RK(B) % RK(C)        */
    OP_POW,/*  A B C  R(A) := RK(B) ^ RK(C)        */
    OP_UNM,/*  A B  R(A) := -R(B)          */
    OP_NOT,/*  A B  R(A) := not R(B)        */
    OP_LEN,/*  A B  R(A) := length of R(B)        */

    OP_CONCAT,/*  A B C  R(A) := R(B).. ... ..R(C)      */

    OP_JMP,/*  A sBx  pc+=sBx; if (A) close all upvalues >= R(A) + 1  */
    OP_EQ,/*  A B C  if ((RK(B) == RK(C)) ~= A) then pc++    */
    OP_LT,/*  A B C  if ((RK(B) <  RK(C)) ~= A) then pc++    */
    OP_LE,/*  A B C  if ((RK(B) <= RK(C)) ~= A) then pc++    */

    OP_TEST,/*  A C  if not (R(A) <=> C) then pc++      */
    OP_TESTSET,/*  A B C  if (R(B) <=> C) then R(A) := R(B) else pc++  */

    OP_CALL,/*  A B C  R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1)) */
    OP_TAILCALL,/*  A B C  return R(A)(R(A+1), ... ,R(A+B-1))    */
    OP_RETURN,/*  A B  return R(A), ... ,R(A+B-2)  (see note)  */

    OP_FORLOOP,/*  A sBx  R(A)+=R(A+2);
          if R(A) <?= R(A+1) then { pc+=sBx; R(A+3)=R(A) }*/
    OP_FORPREP,/*  A sBx  R(A)-=R(A+2); pc+=sBx        */

    OP_TFORCALL,/*  A C  R(A+3), ... ,R(A+2+C) := R(A)(R(A+1), R(A+2));  */
    OP_TFORLOOP,/*  A sBx  if R(A+1) ~= nil then { R(A)=R(A+1); pc += sBx }*/

    OP_SETLIST,/*  A B C  R(A)[(C-1)*FPF+i] := R(A+i), 1 <= i <= B  */

    OP_CLOSURE,/*  A Bx  R(A) := closure(KPROTO[Bx])      */

    OP_VARARG,/*  A B  R(A), R(A+1), ..., R(A+B-2) = vararg    */

    OP_EXTRAARG/*  Ax  extra (larger) argument for previous opcode  */
    } OpCode;

    **********************************************************
                                      虚拟机指令(2) MOVE & LOAD

    OP_MOVE  A  B 
    OP_MOVE用来将寄存器B中的值拷贝到寄存器A中,由于Lua是基于寄存器虚拟机,大部分的指令都是直接对寄存器进行操作,而不需要对数据进行压栈和弹栈。OP_MOVE 指令的作用 是将一个Local变量复制给另一个local变量.
    例子:
    local a = 10;  
    local b = a;  
    编译出来的结果
    1   [1] LOAD        0 1;1代表的是常量表的项,这里代表的是10  
    2   [2] MOVE        1 0 
    所代表的二进制为
                         B                 A        OP_Code 
    Load    0  1  =  100000000 000000000 00000000   000001   =  0x80000001 ,也就是说, 0x80000001 的二进制所代表的指令为  Load  0  1,这里B中的最高位为1,表示的B为常量表的序号,而不是寄存器

    MOVE   1  0 =   000000000 000000000 00000001  000000   =  0x40

    *****************华丽分割线***********************************************
    1.lua 的二进制格式,官方的luac.exe 编译出来的格式
    名称:  QQ图片20140418154703.jpg查看次数: 10文件大小:  78.7 KB

    原始的lua 脚本为
    local a = 10
    local b = a
    print(b)


    下面介绍格式文件,介绍每个字段的意思.当然啦,这种格式是官方的,各个游戏公司可能会做一些改动,但是万变不离其宗。个个字段已经用颜色标明了
    在lua 的源文件中,前面四个字节  1b 4c 75 61  也就是 \033Lua , 标识的是lua文件的特有的标示符数据格式,代表是lua 
    #define LUA_SIGNATURE  "\033Lua"  033时八进制  = 0x1b ,很多那些反编译工具判断这四个字节的值,来判断是否能反编译,很多公司都会偷偷的去掉或者用其他的值来替换,以迷惑菜鸟。呵呵

    52  第五个字节,表示的是,当前lua 的目标版本,这里指的是5.2 版本。
    感觉编辑的好痛苦,我还是直接贴我的比较图算了,看起来比较舒服

    点击图片以查看大图图片名称: header.jpg查看次数: 30文件大小: 57.2 KB文件 ID : 88548


    函数的头描述
    linedefined   =    00 00 00 00   ;函数定义开始处的行号
    linedefined   =    00 00 00 00     ; 函数定义结束处的行号 ;顶级函数开始和结束行号都是为00
    numparams  =    00          ;固定参数的数目 number of fixed parameters 
    is_vararg      =    01            ;可变参数标识符
                                                • 1=VARARG_HASARG
                                                • 2=VARARG_ISVARARG
                                                 • 4=VARARG_NEEDSARG
    maxstacksize  =  03         ;调用函数所需要的堆栈空间指令段
    sizecode         =   06 00 00 00  ; 函数中 指令的数目,缓存区的大小 = sizecode * sizeof(Instruction),每四个字节为一条指令
    code               =  02 00 00 00 41 00 00 00 87 40 40 00 c1 00 80 00 a0 40 00 01 1e 00 80 00
                        
    常量列表 保存着函数中引用的常量的列表 (常量池) 
    Constant.sizek    =  02 00 00 00    ;常量列表的大小 ,缓存区的大小  = Constant.sizek * sizeof(TValue) = 2 * 8 = 16,每项为8个字节,
    TValue *               =                                                                             03 00 00 .
                                               00 00 00 00 24 40 04 06 00 00 00 70 72 69 6e 74  ....$@.....print
    Constant list 数据结构   保存着函数中引用的常量的列表 (常量池) 
    Integer 常量列表的大小 (sizek)
    [
        1 byte 常量类型 (value in parentheses):  • 0=LUA_TNIL, 1=LUA_TBOOLEAN,• 3=LUA_TNUMBER, 4=LUA_TSTRING
         Const 常量本身: 如果常量类型是0这个域不存在;如果类型是1,这个是0或1;如果类型是3这个域是 Number;如果类型是4 这个域是String。
    ]
    这里的String 是包含"0"为结束的字符串
    点击图片以查看大图图片名称: header2.jpg查看次数: 40文件大小: 58.6 KB文件 ID : 88549

    为什么上传图片以后,图片都变小了,而且不清晰呢?

    ***********************给大家发一点福利,矫正虚拟机指令的函数**************************************
    //矫正虚拟机指令
    DWORD Rectify(DWORD Source);
    {
        DWORD Instruction = Source;
        BYTE  Source_OpCode =  Instruction & 0x3F;
        switch(Source_OpCode)
        {
      case OP_MOVE:
        Source_OpCode  = Target_OpCode; 
           break;
             ...
        }
       Instruction = ((Instruction & 0xFFFFFFC0) | Source_OpCode);
       return Instruction
    }
    展开全文
  •   去年在看雪论坛写了一篇《浅析android手游lua脚本的加密与解密》的精华文章,今年写一篇番外篇,将一些lua反编译对抗的内容整合一起,并以3个实例作为说明(包括2018腾讯游戏竞赛和梦幻西游手游相关的补充),...
  • Lua脚本反编译入门

    千次阅读 2015-04-01 09:10:13
    1.Lua的虚拟机指令,5.2 的有40条 Lua的指令使用一个32bit的unsigned integer表示。所有指令的定义都在lopcodes.h文件中(可以从Lua 官方网站下载),使用一个enum OpCode代表指令类型。在lua5.2中,总共有40种...
  • Lua反编译流程

    万次阅读 2015-03-31 21:29:47
    lua源文件--obfuscate-->lua源文件(混淆后)--compile-->luac文件(带调试用的变量名和行号)--strip-->luac文件(不带调试信息) lua/luac--加密/打包-->数据文件 数据文件--解包/解密-->lua/luac-->lua虚拟机 1....
  • luac 反编译

    千次阅读 2017-12-17 21:07:29
    首先下载unluac.jar, 然后运行命令. java -jar unluac.jar testin.luac>testout.luac 然后就好了, 厉害吧,  ...印象中是.lua 都是源码, 根本 不需要反编译啊, 只有luac 是经过一次 编译后的, 已经看不懂了, 需要修改
  • luac给lua脚本加密

    万次阅读 2018-08-22 13:13:01
    项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行。 下面是使用原生的lua解释器编译字节码: 1、新建一个名为1.lua的文件,...
  • cocos2d-x lua反编译(1)

    千次阅读 2016-08-13 22:13:33
    luac的解密
  • 先贴上效果图: unluac反编译后的中文乱码...#一键处理lua反编译后的中文乱码问题 #输入:反编译后的Lua文件路径 #输出:编码修正后的lua文件 # import urllib import re def main(): luaFilePath='C:/123'#你的...
  • 虽说这种东西其实没多少用,不过老板是烧饼所以不会承认的,不过编译之后别人反编译也看不到变量命这种自欺欺人的心理作用还是有点用的。于是发现lua5.1编译出来的字节码luajit是不能用的,后来去官网看到编译方法,...
  • luajit反编译

    千次阅读 2014-11-02 22:30:19
     In the LuaJIT source distribution, there is a folder called 'libs'...which contain necessary Lua files. Rename this as 'jit'. Make a folder in the same directory as luajit.exe and call it 'lua';
  • Lua 中实现 protobuf 序列化,序列化

    千次阅读 2016-09-20 15:05:20
    Protobuf 官方并没有 Lua版本,然后网易的程序猿开发出了 protoc-gen-lua ,可以让我们将 Proto 文件转成 lua 脚本在 Lua中使用,下面是详细的编译、安装、使用教程。文中用到的代码、工具都有百度网盘下载。...
  • luac 格式分析与反编译

    千次阅读 2018-10-09 10:31:00
    前言 测试某游戏时,游戏加载的是luac脚本: 文件格式 - 010editor官方bt只能识别luac52版本 ...文章目录前言luac51格式分析Luac文件格式文件头格式函数体luac.exe存储luac过程分析luac反编译获取lua51 vmlu...
  • lua 汇编工具 ChunkSpy 的使用

    千次阅读 2016-11-14 18:51:10
    ChunkSpy 就是一个lua文件,通过它可以把二进制的lua文件转换为Opcode,这是一个学习lua源码的很好的工具。 二、使用 chunkspy需要在lua命令行中使用。 基本格式 usage: lua ChunkSpy.lua [options] [filenames] ...
  • 1.Lua 环境搭建

    千次阅读 2015-06-18 15:00:44
    Lua 环境搭建
  • protoc-gen-lua 编译、安装、使用教程

    万次阅读 2019-02-28 13:22:13
    Protobuf官方并没有Lua版本,然后网易的程序猿开发出了 protoc-gen-lua ,可以让我们将Proto文件转成lua脚本在Lua中使用,下面是详细的编译、安装、使用教程。文中用到的代码、工具都有百度网盘下载。 本文...
1 2 3 4 5 ... 20
收藏数 4,552
精华内容 1,820
关键字:

lua 反编译