LUA软件打开后显示不全的是一串字母 需要反编译吗?

|  
|  
|  
|  
|  
只需一步,快速开始
查看: 363|回复: 7
请问怎么反编译LUA文件后,打开是空白的?
主题帖子积分
高级玩家, 积分 267, 距离下一级还需 333 积分
高级玩家, 积分 267, 距离下一级还需 333 积分
用的是这个工具
本帖子中包含更多资源
才可以下载或查看,没有帐号?
主题帖子积分
高级玩家, 积分 267, 距离下一级还需 333 积分
高级玩家, 积分 267, 距离下一级还需 333 积分
求助啊!!!!!!!!!!!!!!!!!!!!!
主题帖子积分
高级玩家, 积分 267, 距离下一级还需 333 积分
高级玩家, 积分 267, 距离下一级还需 333 积分
:):):):):):):):):):):):):)
主题帖子积分
高级玩家, 积分 267, 距离下一级还需 333 积分
高级玩家, 积分 267, 距离下一级还需 333 积分
主题帖子积分
高级玩家, 积分 267, 距离下一级还需 333 积分
高级玩家, 积分 267, 距离下一级还需 333 积分
主题帖子积分
高级玩家, 积分 267, 距离下一级还需 333 积分
高级玩家, 积分 267, 距离下一级还需 333 积分
主题帖子积分
高级玩家, 积分 267, 距离下一级还需 333 积分
高级玩家, 积分 267, 距离下一级还需 333 积分
主题帖子积分
高级玩家, 积分 267, 距离下一级还需 333 积分
高级玩家, 积分 267, 距离下一级还需 333 积分
Powered by【技术分享】Lua程序逆向之Luac文件格式分析
预估稿费:600RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
Lua语言对于游戏开发与相关逆向分析的人来说并不陌生。Lua语言凭借其高效、简洁与跨平台等多种特性,一直稳立于游戏、移动APP等特定的开发领域中。
目前Lua主要有5.1、5.2、5.3共三个版本。5.1版本的Lua之所以目前仍然被广泛使用的原因之一,是由于另一个流行的项目LuaJit采用了该版本Lua的内核。单纯使用Lua来实现的项目中,5.2与5.3版本的Lua则更加流行。这里主要以Lua版本5.2为例,通过分析它生成的Luac字节码文件,完成Lua程序的初步分析,为以后更深入的反汇编、字节码置换与重组等技能打下基础。
Lua与Python一样,可以被定义为脚本型的语言,与Python生成pyc字节码一样,Lua程序也有自己的字节码格式luac。Lua程序在加载到内存中后,Lua虚拟机环境会将其编译为Luac(下面文中Luac与luac含义相同)字节码,因此,加载本地的Luac字节码与Lua源程序一样,在内存中都是编译好的二进制结构。
为了探究Luac的内幕,我们需要找到合适的资料与工具来辅助分析Luac文件。最好的资料莫过于Lua的源码,它包含了Lua相关知识的方方面面,阅读并理解Luac的构造与Lua虚拟机加载字节码的过程,便可以通透的了解Luac的格式。但这里并不打算这么做,而采取阅读第三方Lua反编译工具的代码。主要原因是:这类工具的代码往往更具有针对性,代码量也会少很多,分析与还原理解Luac字节码文件格式可以省掉不少的时间与精力。
luadec与unlua是最流行的Luac反汇编与反编译工具,前者使用C++语言开发,后者使用Java语言,这两个工具都能很好的还原与解释Luac文件,但考虑到Lua本身采用C语言开发,并且接下来打算编写010 Editor编辑器的Luac.bt文件格式模板,010 Editor的模板语法类似于C语言,为了在编码时更加顺利,这里分析时主要针对luadec。
Luac文件格式
一个Luac文件包含两部分:文件头与函数体。文件头格式定义如下:
typedef struct {
char signature[4];
uchar size_
uchar size_size_t;
uchar size_I
uchar size_lua_N
uchar lua_num_
uchar luac_tail[0x6];
第一个字段signature在lua.h头文件中有定义,它是LUA_SIGNATURE,取值为“33Lua",其中,33表示按键&esc&。LUA_SIGNATURE作为Luac文件开头的4字节,它是Luac的Magic Number,用来标识它为Luac字节码文件。Magic Number在各种二进制文件格式中比较常见,通过是特定文件的前几个字节,用来表示一种特定的文件格式。
version字段表示Luac文件的格式版本,它的值对应于Lua编译的版本,对于5.2版本的Lua生成的Luac文件,它的值为0x52。
format字段是文件的格式标识,取值0代表official,表示它是官方定义的文件格式。这个字段的值不为0,表示这是一份经过修改的Luac文件格式,可能无法被官方的Lua虚拟机正常加载。
endian表示Luac使用的字节序。现在主流的计算机的字节序主要有小端序LittleEndian与大端序BigEndian。这个字段的取值为1的话表示为LittleEndian,为0则表示使用BigEndian。
size_int字段表示int类型所占的字节大小。size_size_t字段表示size_t类型所占的字节大小。这两个字段的存在,是为了兼容各种PC机与移动设备的处理器,以及它们的32位与64位版本,因为在特定的处理器上,这两个数据类型所占的字节大小是不同的。
size_Instruction字段表示Luac字节码的代码块中,一条指令的大小。目前,指令Instruction所占用的大小为固定的4字节,也就表示Luac使用等长的指令格式,这显然为存储与反编译Luac指令带来了便利。
size_lua_Number字段标识lua_Number类型的数据大小。lua_Number表示Lua中的Number类型,它可以存放整型与浮点型。在Lua代码中,它使用LUA_NUMBER表示,它的大小取值大小取决于Lua中使用的浮点数据类型与大小,对于单精度浮点来说,LUA_NUMBER被定义为float,即32位大小,对于双精度浮点来说,它被定义为double,表示64位长度。目前,在macOS系统上编译的Lua,它的大小为64位长度。
lua_num_valid字段通常为0,用来确定lua_Number类型能否正常的工作。
luac_tail字段用来捕捉转换错误的数据。在Lua中它使用LUAC_TAIL表示,这是一段固定的字符串内容:"x19x93rnx1an"。
在文件头后面,紧接着的是函数体部分。一个Luac文件中,位于最上面的是一个顶层的函数体,函数体中可以包含多个子函数,子函数可以是嵌套函数、也可以是闭包,它们由常量、代码指令、Upvalue、行号、局部变量等信息组成。
在Lua中,函数体使用Proto结构体表示,它的声明如下:
typedef struct {
// constants
// functions
// upvalues
SourceName src_
LocVars loc_
// upvalue names
ProtoHeader是Proto的头部分。它的定义如下:
typedef struct {
ProtoHeader在Lua中使用lua_Debug表示,lua_Debug的作用是调试时提供函数的行号,函数与变量名等信息,只是它部分字段的信息在生成Luac字节码时,最终没有写入Luac文件中。linedefined与lastlinedefined是定义的两个行信息。numparams表示函数有几个参数。is_vararg表示参数是否为可变参数列表,例如这个函数声明:
function f1(a1, a2, ...)
这点与C语言类似,三个点“…”表示这是一个可变参数的函数。f1()在这里的numparams为2,并且is_vararg的值为1。
maxstacksize字段指明当前函数的Lua栈大小。值为2的幂。
在ProtoHeader下面是函数的代码部分,这里使用Code表示。Code存放了一条条的Luac机器指令,每条指令是一个32位的整型大小。Code定义如下:
struct Code {
uint32 inst[];
sizecode字段标识了接下来的指令条数。inst则存放了当前函数所有的指令,在Lua中,指令采用Instruction表示,它的定义如下:
#define LUAI_UINT32unsigned int
typedef LUAI_UINT32 lu_int32;
typedef lu_int32 I
当LUAI_BITSINT定义的长度大于等于32时,LUAI_UINT32被定义为unsigned int,否则定义为unsigned long,本质上,也就是要求lu_int32的长度为32位。
接下来是Constants,它存放了函数中所有的常量信息。定义如下:
typedef struct {
Constant constant[];
sizek字段标识了接下来Constant的个数。constant则是Constant常量列表,存放了一个个的常量信息。的定义如下:
typedef struct {
LUA_DATATYPE const_
LUA_DATATYPE是Lua支持的各种数据类型结构。如LUA_TBOOLEAN表示bool类型,使用lua_Val表示;LUA_TNUMBER表示数值型,它可以是整型,使用lua_Integer表示,也可以是浮点型,使用lua_Number表示;LUA_TSTRING表示字符串。这些所有的类型信息使用const_type字段表示,大小为1字节。
TValue用于存放具体的数据内容。它的定义如下:
typedef struct {
union Value {
//GCObject *
/* collectable objects */
//void *p;
/* light userdata */
/* booleans */
/* light C functions */
/* integer numbers */
/* float numbers */
对于LUA_TBOOLEAN,它存放的值可以通过Lua中提供的宏bvalue来计算它的值。
对于LUA_TNUMBER,它存放的可能是整型,也可能是浮点型,可以直接通过nvalue宏自动进行类型判断,然后获取它格式化后的字符串值。对于Lua的5.3版本,对nvalue宏进行了改进,可以使用ivalue宏获取它的整型值,使用fltvalue宏来获取它的浮点值。
对于LUA_TSTRING,它存放的是字符串信息。可以使用rawtsvalue宏获取它的字符串信息。而写入Luac之后,这里的信息实则是64位的值存放了字符串的大小,并且紧跟着后面是字符串的内容。
接下来是Protos,它表示当前函数包含的子函数信息。定义如下:
typedef struct(string level) {
Proto proto[];
sizep字段表示当前函数包含的子函数的数目。所谓子函数,指的是一个函数中包含的嵌套函数与闭包。如下面的代码:
function Create(n)
local function foo1()
local function foo2()
n = n + 10
return foo1,foo2
Create()函数包含了foo1()与foo2()两个子函数,因此,这里sizep的值为2。proto表示子函数信息,它与父函数使用一样的结构体信息。因此,可见Lua的函数部分使用了一种树式的数据结构进行数据存储。
Upvaldescs与UpValueNames共同描述了Lua中的UpValue信息。当函数中包含子函数或团包,并且访问了函数的参数或局部变量时,就会产生UpValue。如上面的Create()函数,foo1()与foo2()两个子函数都访问了参数n,因此,这里会产生一个UpValue,它的名称为“n”。
Upvaldesc的定义如下:
typedef struct {
instack字段表示UpValue是否在栈上创建的,是的话取值为1,反之为0。idx字段表示UpValue在UpValue数据列表中的索引,取值从0开始。
UpValueNames存放了当前函数中所有UpValue的名称信息,它的定义如下:
typedef struct {
uint32 size_upvalue_
UpValueName upvalue_name[];
} UpValueN
size_upvalue_names字段表示UpValueName条目的数目,每一条UpValueName存放了一个UpValue的名称,它的定义如下:
typedef struct {
uint64 name_
char var_str[];
} UpValueN
name_size字段是符号串的长度,var_str为具体的字符串内容。
SourceName存放了当前Luac编译前存放的完整文件名路径。它的定义如下:
typedef struct {
uint64 src_string_
char str[];
} SourceName
SourceName的定义与UpValueName一样,两个字段分别存放了字符串的长度与内容。
Lines存放了所有的行号信息。它的定义如下:
typedef struct {
uint32 line[];
sizelineinfo字段表示当前函数所有的行总数目。line字段存放了具体的行号。
LocVars存放了当前函数所有的局部变量信息,它的定义如下:
typedef struct {
LocVar local_var[];
sizelocvars字段表示局部变量的个数。local_var字段是一个个的局部变量,它的类型LocVar定义如下:
typedef struct {
uint64 varname_
char varname[];
varname_size字段是变量的名称长度大小。varname字段存放了变量的名称字符串内容。startpc与endpc是两个指针指,存储了局部变量的作用域信息,即它的起始与结束的地方。
到此,一个Luac的文件格式就讲完了。
010 Editor模板语法
为了方便分析与修改Luac二进制文件,有时候使用010 Editor编辑器配合它的文件模板,可以达到很直观的查看与修改效果,但010 Editor官方并没有提供Luac的格式模板,因此,决定自己动手编写一个模板文件。
010 Editor支持模板与脚本功能,两者使用的语法与C语言几乎一样,只是有着细微的差别与限制,我们看看如何编写010 Editor模板文件。
点击010 Editor菜单Templates-&New Template,新建一个模板,会自动生成如下内容:
//------------------------------------------------
//--- 010 Editor v8.0 Binary Template
// File Mask:
//------------------------------------------------
File是文件名,010 Editor使用.bt作为模柏树的后缀,这里取名为luac.bt即可。
Authors是作者信息。
Version是当前模板的版本,如果将最终的模板文件上传到010 Editor的官方模板仓库,010 Editor会以此字段来判断模板文件的版本信息。
Purpose是编写本模板的意图,内容上可以留空。
Category是模板的分类,010 Editor中自带了一些内置的分类,这里选择Programming分类。
File Mask是文件扩展名掩码,表示当前模板支持处理哪种文件类型的数据,支持通配符,如果支持多种文件格式,可以将所有的文件扩展名写在一行,中间使用逗号分开,这里设置它的值为“*.luac, *.lua”。
ID Bytes是文件开头的Magic Number,用来通过文件的开头来判断是否为支持处理的文件,这里的取值为“1B 4c 75 61”。
History中可以留空,也可以编写模板的更新历史信息。
最终,Luac.bt的开头内容如下:
//------------------------------------------------
//--- 010 Editor v8.0 Binary Template
File: luac.bt
Authors: fei_cong()
Version: 1.0
Category: Programming
// File Mask: *.luac, *.lua
ID Bytes: 1B 4c 75 61
fei_cong: Initial version, support lua 5.2.
// License: This file is released into the public domain. People may
use it for any purpose, commercial or otherwise.
//------------------------------------------------
010 Editor模板与C语言一样,支持C语言的宏、数据类型、变量、函数、代码语句、控制流程等,还支持调用常见的C语言函数。
数据类型上,支持的非常丰富,官方列出BS的支持的数据类型如下:
- 8-Bit Signed Integer - char, byte, CHAR, BYTE
- 8-Bit Unsigned Integer - uchar, ubyte, UCHAR, UBYTE
- 16-Bit Signed Integer - short, int16, SHORT, INT16
- 16-Bit Unsigned Integer - ushort, uint16, USHORT, UINT16, WORD
- 32-Bit Signed Integer - int, int32, long, INT, INT32, LONG
- 32-Bit Unsigned Integer - uint, uint32, ulong, UINT, UINT32, ULONG, DWORD
- 64-Bit Signed Integer - int64, quad, QUAD, INT64, __int64
- 64-Bit Unsigned Integer - uint64, uquad, UQUAD, UINT64, QWORD, __uint64
- 32-Bit Floating Point Number - float, FLOAT
- 64-Bit Floating Point Number - double, DOUBLE
- 16-Bit Floating Point Number - hfloat, HFLOAT
- Date Types - DOSDATE, DOSTIME, FILETIME, OLETIME, time_t (for more information on date types see Using the Inspector)
在编写模板时,同一数据类型中列出的类型,使用上是一样,如下面的代码片断:
local int32
表示的都是一个32位的整型变量,这三种声明方式表达的含义是相同的。声明变量时,需要在前面跟上local关键字,如果没有跟上local,则表明是在声明一个占位的数据字段。所谓占位的数据字段,指的010 Editor在解析模板中的变量时,会对占位的数据部分使用指定的数据类型进行解析,如下面的代码:
typedef struct {
010 Editor在解析这段代码时,会按照Luac中所有的占位数据字段信息解析当前的二进制文件。GlobalHeader与Proto的声明也中如此,没有加上local的数据字段,都会被010 Editor解析并显示。
除了支持基本的C语言格式结构体struct外,010 Editor模板语法还加入了一些特性,比如字段注释与格式、结构体压缩与处理函数。看如下的结构体信息:
typedef struct {
uint64 varname_size &format=hex&;
char varname[varname_size];
uint32 startpc &format=hex, comment="first point where variable is active"&;
uint32 endpc &format=hex, comment="first point where variable is dead"&;
} LocVar &read = LocVarRead, optimize = false&;
这是按照前面介绍的LocVar结构体信息,按照010 Editor模板语法处理过后的效果。为字段后添加format可以指定它的输出格式为十六进制hex,默认是10进制;为字段后添加comment可以指定它的注释信息,这两个字段可以同时存在,在中间加入一个逗号即可;可以为结构体指定read来指定它的类型读取函数,也可以指定write来指定它的类型写入函数,read与write有着自己的格式,如下所示:
string LocVarRead(LocVar &val) {
return val.
所有的read与write返回值必须为string,参数必须为要处理的结构体类型的引用。注意:010 Editor模板语法不支持指针,但支持引用类型,但引用类型不能作为变量与函数的返回值,只能作为参数进行传递,在编写模板代码时需要注意。
除了以上的基础类型外,010 Editor模板还支持字符串类型string,这在C语言中是不存在的!它与char[]代表的含义是相同的,而且它支持的操作比较多,如以下字符串相加等操作:
local string str = "world";
local string str2 = "hello " + str + "!n";
010 Editor模板中的宏有限制,并不能解析那些需要展开后替换符号的宏,只支持那些能够直接计算的宏。如下面的BITRK与ISK宏:
#define SIZE_B9
#define BITRK(1 && (SIZE_B - 1))
#define ISK(x)((x) & BITRK)
前者可以直接解析并计算出来,010 Editor模板就支持它,而对于ISK宏,并不能在展开时计算出它的值,因此,010 Editor模板并不支持它。
010 Editor模板支持enum枚举,与C语言中的枚举的差别是,在定义枚举时可以指定它的数据类型,这样的好处是可以在010 Editor模板中声明占位的枚举数据。如下所示是Luac.bt中用到的LUA_DATATYPE类型:
enum &uchar& LUA_DATATYPE {
LUA_TBOOLEAN=
LUA_TLIGHTUSERDATA =
LUA_TNUMBER=
LUA_TSTRING=
LUA_TTABLE=
LUA_TFUNCTION=
LUA_TUSERDATA=
LUA_TTHREAD=
LUA_NUMTAGS
010 Editor模板中支持调用常见的C语言库函数,如strlen()、strcat()、print()、sprintf()、strstr(),不同的是,函数名上有些差别,这些可调用的函数在010 Editor模板中首字母是大写的,因此,在调用时,它们分别是Strlen()、Strcat()、Print()、Sprintf()、Strstr()。更多支持的字符串操作的函数可以查看010 Editor的帮助文档“String Functions”小节,除了“String Functions”外,还有“I/O Functions”、“Math Functions”、“Tool Functions”、“Interface Functions”等函数可供模板代码使用。
接下来看下代码结构部分,010 Editor模板支持C语言中的for/while/dowhile等循环语句,这些语句可以用来组成到010 Editor模板的函数与代码块中。一点细微的差别是010 Editor模板的返回类型只能是上面介绍过的基础类型,不支持自定义类型与数组结构,这就给实际编写代码带来了一些麻烦,遇到这种函数场景时,就需要考虑更改代码的结构了。
编写luac.bt文件格式模板
了解了010 Editor模板语法后,就可以开始编写Luac.bt模板文件了。编写模板前,需要找好一个Luac文件,然后边写边测试,生成一个Luac文件很简单,可以编写好hello.lua后,执行下面的命令生成hello.luac:
$ luac -o ./hello.luac ./hello.lua
生成好Luac文件后,就是编写一个个结构体进行测试,这是纯体力活了。luadec提供了一个ChunkSpy52.lua,可以使用它打印Luac的文件格式内容,可以参考它的输出进行Luac.bt的编写工作,实际上我也是这么做的。
首先是GlobalHeader,它的定义可以这样写:
typedef struct {
uint32 signature &format=hex&;
uchar version &format=hex&;
uchar format &comment = "format (0=official)"&;
uchar endian &comment = "1 == LittleE 0 == BigEndian"&;
uchar size_int &comment = "sizeof(int)"&;
uchar size_size_t &comment = "sizeof(size_t)"&;
uchar size_Instruction &comment = "sizeof(Instruction)"&;
uchar size_lua_Number &comment = "sizeof(lua_Number)"&;
uchar lua_num_valid &comment = "Determine lua_Number whether it works or not, It's usually 0"&;
if (version == 0x52) {
uchar luac_tail[0x6] &format=hex, comment = "data to catch conversion errors"&;
这种定义的方式与前面介绍的LocVar一样,具体就不展开讨论了。下面主要讨论编写过程中遇到的问题与难点。
首先是输出与ChunkSpy52.lua一样的function level,也就是函数的嵌套级别,定义结构体时可以传递参数,这一点是C语言不具备的,但这个功能非常实用,可以用来传递定义结构时的信息,如这里的function level就用到了该特性。这是Protos的定义:
typedef struct(string level) {
uint32 sizep &format=hex&;
local uint32 sz =
local uint32 i = 0;
local string s_
while (sz-- & 0) {
SPrintf(s_level, "%s_%d", level, i++);
Proto proto(s_level);
} Protos &optimize=false&;
为结构体加上一个string类型的level参数,初始时传值“0”,然后往下传递时,为传递的值累加一,这样就做到了function level的输出。
然后是Constant常量信息的获取,由于TValue支持多种数据的类型,因此在处理上需要分别进行处理,这里参考了luadec的实现,不过在细节上还是比较麻烦。luadec使用DecompileConstant()方法实现,它的代码片断如下:
char* DecompileConstant(const Proto* f, int i) {
const TValue* o = &f-&k[i];
switch (ttype(o)) {
case LUA_TBOOLEAN:
return strdup(bvalue(o)?"true":"false");
case LUA_TNIL:
return strdup("nil");
#if LUA_VERSION_NUM == 501 || LUA_VERSION_NUM == 502
case LUA_TNUMBER:
char* ret = (char*)calloc(128, sizeof(char));
sprintf(ret, LUA_NUMBER_FMT, nvalue(o));
case LUA_TSTRING:
return DecompileString(o);
return strdup("Unknown_Type_Error");
bvalue与nvalue是Lua提供的两个宏,这在编写模板时不能直接使用,需要自己实现,由于宏的嵌套较多,实际测试时编写了C语言代码展开它的实现,如nvalue展开后的实现为:
((((((o))-&tt_) == ((3 | (1 && 4)))) ? ((lua_Number)(((((o)-&value_).i)))) : (((o)-&value_).n))));
于是编写替换代码number2str函数,实现如下:
string number2str(TValue &o) {
if (get_inst_sz() == 4) {
fmt = "(=%.7g)";
} else if (get_inst_sz() == 8) {
fmt = "(=%.14g)";
Warning("error inst size.n");
local int tt = o.value_.val.tt_;
//Printf("tt:%xn", tt);
local lua_Integer i = o.value_.i;
local lua_Number n = o.value_.n;
SPrintf(ret, "%.14g", ((tt == (3 | (1 && 4))) ? i : n));
然后为Constant编写read方法ConstantRead,代码片断如下:
string ConstantRead(Constant& constant) {
switch (constant.const_type) {
case LUA_TBOOLEAN:
SPrintf(str, "%s", constant.bool_val ? "true" : "false");
case LUA_TNIL:
return "nil";
case LUA_TNUMBER:
return number2str(constant.num_val);
case LUA_TSTRING:
return "(="" + constant.str_val + "")";
return "";
DecompileConstant中调用的DecompileString方法,原实现比较麻烦,处理了非打印字符,这里简单的获取解析的字符串内容,然后直接返回了。
最后,所有的代码编写完成后,效果如图所示:
luac.bt的完整实现可以在这里找到:
这个人太懒了,签名都懒得写一个lua脚本反编译后,部分代码出现的数字编码是什么?_lua吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:8,498贴子:
lua脚本反编译后,部分代码出现的数字编码是什么?收藏
现在有2个一模一样的lua脚本,一个是luac反编译的,一个是正常lua脚本!但是反编译后用记事本打开,有部分脚本代码显示为\230之类的数字编码,以上图片给出了他们的关系!用Luadec反编译的,请问这些数字是什么编码?问题出在哪?是解密算法错了导致反编译的代码只有部分正常?请大神赐教,感激不尽!
正常的汉字编码。我只知道用按键调试输出够查看
没学过c吧,怪不得不知道
回复 菩提树下执迷? :没搞懂。。大神能不能说的通俗点小白难理解 !!QQ:401025
统一回复,已经解决,谢谢大家了!
我也想知道这个怎么解决,楼主能说下吗
登录百度帐号&>&luadec反编译方法
luadec反编译方法
上传大小:461B
luadec反编译方法,文本教程。不会的可以看一看 很简单
综合评分:4
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有3条
没有试验成功,反编译那个脚本可能是加密了。
不能反编译luac的脚本啊……
很有用,用来编译加密的脚本。
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
luadec反编译方法
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*投诉人姓名:
*投诉人联系方式:
*版权证明:
*详细原因:
luadec反编译方法}

我要回帖

更多关于 我的电脑打开后不显示 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信