CN104298534B - 基于Lua语言的编程方法和装置 - Google Patents
基于Lua语言的编程方法和装置 Download PDFInfo
- Publication number
- CN104298534B CN104298534B CN201410571641.2A CN201410571641A CN104298534B CN 104298534 B CN104298534 B CN 104298534B CN 201410571641 A CN201410571641 A CN 201410571641A CN 104298534 B CN104298534 B CN 104298534B
- Authority
- CN
- China
- Prior art keywords
- function
- api
- language
- lua
- lua language
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 230000006870 function Effects 0.000 claims abstract description 253
- 238000011161 development Methods 0.000 claims description 60
- 241000208340 Araliaceae Species 0.000 claims description 2
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 claims description 2
- 235000003140 Panax quinquefolius Nutrition 0.000 claims description 2
- 235000008434 ginseng Nutrition 0.000 claims description 2
- 230000018109 developmental process Effects 0.000 description 38
- 230000006399 behavior Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000002452 interceptive effect Effects 0.000 description 2
- 230000008140 language development Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于Lua语言的编程方法和装置,属于计算机技术领域。所述方法包括:为Lua语言实现调用应用程序编程接口API的功能;为Lua语言实现创建内存对象的功能;基于具备调用API功能和创建内存对象功能的Lua语言,实现目标程序代码。本发明通过为Lua语言扩展调用API的功能和创建内存对象的功能,从而能够基于Lua语言实现目标程序代码,则目标程序代码中将保存Lua语言编译后的字节码,Lua语言的字节码的反编译的难度较大,反编译工具很难反编译Lua语言的字节码,提高了破解难度,避免了对用户造成的损失。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种基于Lua语言的编程方法和装置。
背景技术
软件的应用程序通常是由C语言实现的,但随着IDA(Interactive Disassembler,交互式反汇编程序)、OD(OllyDebug)等反编译工具的盛行,破解者可以通过这些反编译工具跟踪应用程序所调用的每一个API(Application Programming Interface,应用程序编程接口)以及API的参数和返回结果,大大降低了破解难度。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种基于Lua语言的编程方法和装置。所述技术方案如下:
第一方面,提供了一种基于Lua语言的编程方法,所述方法包括:
为Lua语言实现调用应用程序编程接口API的功能;
为Lua语言实现创建内存对象的功能;
基于具备调用API功能和创建内存对象功能的Lua语言,实现目标程序代码。
第二方面,提供了一种基于Lua语言的编程装置,所述装置包括:
第一功能实现模块,用于为Lua语言实现调用应用程序编程接口API的功能;
第二功能实现模块,用于为Lua语言实现创建内存对象的功能;
代码实现模块,用于基于具备调用API功能和创建内存对象功能的Lua语言,实现目标程序代码。
本发明实施例提供的技术方案带来的有益效果是:
本发明实施例提供的方法和装置,通过为Lua语言扩展调用API的功能和创建内存对象的功能,从而能够基于Lua语言实现目标程序代码,则目标程序代码中将保存Lua语言编译后的字节码,Lua语言的字节码的反编译的难度较大,反编译工具很难反编译Lua语言的字节码,提高了破解难度,避免了对用户造成的损失。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种基于Lua语言的编程方法的流程图;
图2a是本发明实施例提供的一种基于Lua语言的编程方法的流程图;
图2b是本发明实施例提供了一种C++语言的代码示意图;
图2c是本发明实施例提供的一种Lua语言的代码示意图;
图2d是本发明实施例提供的获取API地址的流程示意图;
图2e是本发明实施例提供的调用API的流程示意图;
图3是本发明实施例提供的一种基于Lua语言的编程装置结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在对本发明实施例进行说明之前,首先对本发明实施例涉及的Lua语言进行介绍:
Lua语言是一种嵌入式脚本语言,主要用于嵌入基于其他语言的应用程序中,与该应用程序协同工作,数据可以在其他语言环境与Lua语言环境之间共享。
Lua语言基于虚拟机实现,Lua语言首先会将源程序编译成为字节码,然后交由虚拟机来解释执行。由于虚拟机本身的实现机制及其复杂,一个Lua指令需要上百个指令来执行,因此,Lua语言的字节码很难被IDA、OD等反编译工具破解。
但是,由于Lua语言不具备调用API的功能和创建内存对象的功能,导致Lua语言无法独立地应用于应用程序代码的编写,只能嵌入到基于其他语言的应用程序代码中,因此,目前很少将Lua语言应用于编程。
图1是本发明实施例提供的一种基于Lua语言的编程方法的流程图,参见图1,该方法包括:
101、为Lua语言实现调用应用程序编程接口API的功能。
102、为Lua语言实现创建内存对象的功能。
103、基于具备调用API功能和创建内存对象功能的Lua语言,实现目标程序代码。
本发明实施例提供的方法,通过为Lua语言扩展调用API的功能和创建内存对象的功能,从而能够基于Lua语言实现目标程序代码,则目标程序代码中将保存Lua语言编译后的字节码,Lua语言的字节码的反编译的难度较大,反编译工具很难反编译Lua语言的字节码,提高了破解难度,避免了对用户造成的损失。
可选地,该为Lua语言实现调用应用程序编程接口API的功能包括:
基于预设开发语言,生成指定调用函数,该指定调用函数用于调用不同的应用程序编程接口API,该预设开发语言具备调用API的功能;
基于该预设开发语言,将该指定调用函数添加至Lua语言的全局表,使得Lua语言具备调用API的功能;
根据该全局表中的指定调用函数,基于Lua语言调用API。
可选地,该根据该全局表中的指定调用函数,基于Lua语言调用API包括:
基于该预设开发语言,从动态链接库DLL的导出表中,获取待调用的API地址,将该待调用的API地址存放在该指定调用函数的闭包中;
基于该预设开发语言,从该指定调用函数的闭包中,获取待调用的API地址,根据该API地址,获取该API在运行时所需的参数,将获取到的API地址和参数压入堆栈;
基于Lua语言,从该堆栈中获取该API地址和该参数,基于该API地址、该参数和该全局表中的指定调用函数,调用该API,得到该API的返回值,将该返回值压入该堆栈;
基于该预设开发语言,从该堆栈中获取该返回值。
可选地,该为Lua语言实现创建内存对象的功能包括:
基于该预设开发语言,定义一个结构体,该结构体包括一个内存的指针和内存长度;
基于该预设开发语言,实现第一函数和第二函数,该第一函数用于获取该结构体的内存指针,该第二函数用于获取该结构体的内存长度;
基于该预设开发语言,创建一个元表,将该第一函数和该第二函数添加至该元表,使得该元表具备获取该结构体的内存指针和内存长度的功能;
将该元表添加至Lua语言的全局表,使得Lua语言具备创建内存对象的功能;
其中,该预设开发语言具备创建内存对象的功能。
可选地,该为Lua语言实现创建内存对象的功能还包括:
基于该预设开发语言,实现第三函数,该第三函数用于释放该结构体;
将该第一函数、该第二函数和该第三函数添加至该元表。
可选地,该方法还包括:
基于Lua语言,创建一个指定程序段;
基于Lua语言,将该全局表中的元表设置给该指定程序段,则该指定程序段用于创建内存对象。
可选地,该基于具备调用API功能和创建内存对象功能的Lua语言,实现目标程序代码之后,该方法还包括:
删除该目标程序代码对应的调试文件,以去除该目标程序代码的调试功能。
上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再一一赘述。
图2a是本发明实施例提供的一种基于Lua语言的编程方法的流程图,参见图2a,该方法包括:
201、基于该预设开发语言,生成该指定调用函数,将该指定调用函数添加至Lua语言的全局表,使得Lua语言具备调用API的功能。
在本发明实施例中,为了基于Lua语言,实现目标程序代码,需要首先为Lua语言实现调用API的功能和创建内存对象的功能。
其中,该预设开发语言可以为C语言、C++语言,或者其他能够独立用于开发软件的编程语言,本发明实施例对此不做限定。该指定调用函数用于调用不同的API,即所有的API均可以通过该指定调用函数进行调用,该指定调用函数可以为Call Api函数,本发明实施例对该指定调用函数不做限定。将该指定调用函数添加至Lua语言的全局表时,即可基于Lua语言,运行该指定调用函数,从而调用API。
目前的相关技术中,将基于C语言实现的一个API进行包装之后,使用Lua语言即可调用该API,但是,对于成千上万的API来说,每个API都要经过包装才能在Lua语言中使用,仅包装API的代码就要有几十万行,实现时较为困难,不太现实。而在本发明实施例中,为所有的API包装了一个统一的指定调用函数,该指定调用函数利用Lua语言的闭包特性,能够调用不同的API。
该指定调用函数的流程为:在该指定调用函数的上下文中取出一个真实的、待调用的函数地址,在Lua语言的堆栈中逐个取出参数,将这些参数使用汇编语言逐个压入待调用的函数的堆栈。则调用时,基于C++语言,生成该指定调用函数,通过该指定调用函数,生成函数闭包,将该指定调用函数添加至Lua语言的全局表,则该指定调用函数在Lua语言中可以使用。由于该函数闭包的上下文信息中保存了待调用函数的真实地址,则基于Lua语言调用该函数闭包,即可调用函数。
以通过Call Api函数调用MessageBox函数为例,基于C++语言,生成Call Api函数,通过该Call Api函数,生成Call Api的函数闭包,将该Call Api函数添加至Lua语言的全局表,则该Call Api函数在Lua语言中可以使用。该函数闭包的上下文信息中保存了MessageBox的真实地址,则基于Lua语言调用该函数闭包,即可调用MessageBox函数。
举例来说,基于C++语言生成的Call Api函数可以如图2b所示,Lua语言的代码可以如图2c所示。
基于Lua语言调用API时,程序中保存的是Lua字节码,甚至可能是加密处理后的Lua字节码,应用反编译工具很难反编译Lua字节码,且由于Lua语言的实现机制较为复杂,一个Lua指令需要上百个汇编指令执行,应用反编译工具无法跟踪调用的API,也无法分析出程序的行为,提高了破解难度。本发明实施例对该Lua语言不做限定。
202、基于该预设开发语言,从DLL的导出表中,获取待调用的API地址,将该待调用的API地址存放在该指定调用函数的闭包中,当调用API时,基于该预设开发语言,从该指定调用函数的闭包中,获取待调用的API地址,根据该API地址,获取该API在运行时所需的参数,将获取到的API地址和参数压入堆栈。
获取API地址的流程示意图可以如图2d所示,DLL的导出表中包括多个待调用的API地址,基于该预设开发语言,从该DLL的导出表中获取待调用的API地址,将该API地址存放在该指定调用函数的闭包中,则运行该指定调用函数时,可以获取到该API地址,以根据该API地址进行调用。
调用API的流程示意图可以如图2e所示,具体地,在运行该指定调用函数时,基于该预设开发语言,从该指定调用函数的闭包中,获取待调用的API地址,根据该API地址,获取该API在运行时所需的参数,将获取到的API地址和参数压入堆栈,则要基于Lua语言调用API时,可以从该堆栈中获取该API地址和该参数。
可选地,将多个待调用的API地址集中到该指定调用函数的闭包中,无需为每个待调用的API地址实现一个指定调用函数。在运行该指定调用函数时,选取一个待调用的API地址,根据该选取的API地址进行调用。
203、基于Lua语言,从该堆栈中获取该API地址和该参数,基于该API地址、该参数和该全局表中的指定调用函数,调用该API,得到该API的返回值,将该返回值压入该堆栈。
基于Lua语言,调用该API时,得到该API的返回值,将该返回值压入该堆栈,则基于该预设开发语言,可以从该堆栈中获取该返回值。
204、基于该预设开发语言,从该堆栈中获取该返回值。
在本发明实施例中,在运行该指定调用函数时,从该指定调用函数的闭包中获取待调用的API地址,并依次获取该API在运行时所需的参数。采用内联汇编,将获取到的API地址和参数压入堆栈中,则根据该堆栈中的参数,使用asm call函数调用该API地址,即可从eax寄存器中获取返回值。通过创建该预设开发语言与API之间的接口,实现了Lua语言调用API的功能。另外,由于API使用stdcall调用约定,约定函数调用在返回之前由被调用者清理堆栈,因此,从eax寄存器中获取到返回值时无需清理堆栈。
205、基于该预设开发语言,定义一个结构体,该结构体包括一个内存的指针和内存长度,并实现第一函数、第二函数和第三函数,创建一个元表,将该第一函数、该第二函数和该第三函数添加至该元表。
该预设开发语言具备创建内存对象的功能,但原始的Lua语言并不具备创建内存对象的功能,则可以基于该预设开发语言,为Lua语言实现创建内存对象的功能。具体地,基于该预设开发语言,定义一个结构体,该结构体包括一个内存的指针和内存长度。实现第一函数、第二函数和第三函数,该第一函数用于获取该结构体的内存指针,该第二函数用于获取该结构体的内存长度,该第三函数用于释放该结构体。再基于该预设开发语言,创建一个元表metatable,将该第一函数和该第二函数添加至该metatable的_index字段,将该第三函数添加至该metatable的_gc字段,使得该元表具备获取该结构体的内存指针、获取内存长度以及释放内存的功能。当然,还可以仅将该第一函数和该第二函数添加至该metatable,使得该元表具备获取该结构体的内存指针和获取内存长度的功能,本发明实施例对添加至该metatable的函数不做限定。
206、基于该预设开发语言,将该元表添加至Lua语言的全局表,使得Lua语言具备创建内存对象的功能。
207、基于Lua语言,创建一个指定程序段,将该全局表中的元表设置给该指定程序段,则该指定程序段用于创建内存对象。
具体地,基于该预设开发语言,创建一个指定程序段,将该指定程序段指向该结构体,将该元表metatable设置给该指定程序段,使得该指定程序段具备创建内存对象的功能。其中,该指定程序段可以为userdata,创建一个userdata,将该userdata指向该结构体,获取该创建的metatable,将该metatable设置给该创建的userdata,返回该userdata,则该userdata具备了一块带长度的原生内存,即该userdata具备了创建内存对象的功能,且可以自动执行垃圾回收。
需要说明的是,上述步骤205-207用于为Lua语言实现创建内存对象的功能,再为该Lua语言实现读取内存的功能和写入内存的功能,即可实现操作内存的功能,本发明实施例在此不再赘述。
在本发明实施例中,已将该指定调用函数和该元表添加至该Lua语言的全局表中,则该Lua语言具备了调用API和操作内存的功能。当基于该Lua语言,运行该指定调用函数时,可以调用相应的API,而基于该Lua语言,将该元表设置给该指定程序段时,该指定程序段具备操作内存的功能,可以执行相应的内存操作。其中,该内存操作包括创建内存的操作、读取内存的操作、写入内存的操作等等,本发明实施例对此不做限定。
为了进一步提高破解难度,增加安全性,在实现该目标程序代码之后,可以删除该目标程序代码对应的调试文件(debug文件),以去掉该目标程序代码的调试功能,由于该目标程序代码基于Lua语言实现,删除该Lua语言的调试文件后,即使破解者很熟悉Lua语言的反编译过程,也很难逆向调试该Lua语言的机器码。
本发明实施例可以应用于Windows系统或其他系统中,为该Lua语言实现了调用API和操作内存的功能,当基于该Lua语言开发软件的核心程序代码时,如校验机制、加密算法或者获取核心数据的方法等,提高了软件破解的难度,增强了软件的安全性。
本发明实施例提供的方法,通过为Lua语言扩展调用API的功能和创建内存对象的功能,从而能够基于Lua语言实现目标程序代码,则目标程序代码中将保存Lua语言编译后的字节码,Lua语言的字节码的反编译的难度较大,反编译工具很难反编译Lua语言的字节码,提高了破解难度,避免了对用户造成的损失。进一步地,开创了基于Lua语言开发软件的方法,提高了软件破解的难度,增强了软件的安全性。
图3是本发明实施例提供的一种基于Lua语言的编程装置结构示意图,参见图3,该装置包括:
第一功能实现模块301,用于为Lua语言实现调用应用程序编程接口API的功能;
第二功能实现模块302,用于为Lua语言实现创建内存对象的功能;
代码实现模块303,用于基于具备调用API功能和创建内存对象功能的Lua语言,实现目标程序代码。
本发明实施例提供的装置,通过为Lua语言扩展调用API的功能和创建内存对象的功能,从而能够基于Lua语言实现目标程序代码,则目标程序代码中将保存Lua语言编译后的字节码,Lua语言的字节码的反编译的难度较大,反编译工具很难反编译Lua语言的字节码,提高了破解难度,避免了对用户造成的损失。
可选地,该第一功能实现模块301包括:
调用函数生成单元,用于基于预设开发语言,生成指定调用函数,该指定调用函数用于调用不同的应用程序编程接口API,该预设开发语言具备调用API的功能;
全局表添加单元,用于基于该预设开发语言,将该指定调用函数添加至Lua语言的全局表,使得Lua语言具备调用API的功能;
调用单元,用于根据该全局表中的指定调用函数,基于Lua语言调用API。
可选地,该调用单元包括:
第一地址获取子单元,用于基于该预设开发语言,从动态链接库DLL的导出表中,获取待调用的API地址,将该待调用的API地址存放在该指定调用函数的闭包中;
第二地址获取子单元,用于基于该预设开发语言,从该指定调用函数的闭包中,获取待调用的API地址,根据该API地址,获取该API在运行时所需的参数,将获取到的API地址和参数压入堆栈;
调用子单元,用于基于Lua语言,从该堆栈中获取该API地址和该参数,基于该API地址、该参数和该全局表中的指定调用函数,调用该API,得到该API的返回值,将该返回值压入该堆栈;
返回值获取子单元,用于基于该预设开发语言,从该堆栈中获取该返回值。
可选地,该第二功能实现模块302包括:
结构体定义单元,用于基于该预设开发语言,定义一个结构体,该结构体包括一个内存的指针和内存长度;
第一函数实现单元,用于基于该预设开发语言,实现第一函数和第二函数,该第一函数用于获取该结构体的内存指针,该第二函数用于获取该结构体的内存长度;
元表创建单元,用于基于该预设开发语言,创建一个元表,将该第一函数和该第二函数添加至该元表,使得该元表具备获取该结构体的内存指针和内存长度的功能;
元表全局添加单元,用于将该元表添加至Lua语言的全局表,使得Lua语言具备创建内存对象的功能;
其中,该预设开发语言具备创建内存对象的功能。
可选地,该第二功能实现模块302还包括:
第二函数实现单元,用于基于该预设开发语言,实现第三函数,该第三函数用于释放该结构体;
该元表创建单元,还用于将该第一函数、该第二函数和该第三函数添加至该元表。
可选地,该装置还包括:
指定程序段创建模块,用于基于Lua语言,创建一个指定程序段;
设置模块,用于基于Lua语言,将该全局表中的元表设置给该指定程序段,则该指定程序段用于创建内存对象。
可选地,该装置还包括:
调试文件删除模块,用于删除该目标程序代码对应的调试文件,以去除该目标程序代码的调试功能。
上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再一一赘述。
需要说明的是:上述实施例提供的基于Lua语言的编程装置在基于Lua语言进行编程时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的基于Lua语言的编程装置与基于Lua语言的编程方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种基于Lua语言的编程方法,其特征在于,所述方法包括:
为Lua语言实现调用应用程序编程接口API的功能;
为Lua语言实现创建内存对象的功能;
基于具备调用API功能和创建内存对象功能的Lua语言,实现目标程序代码;
其中,所述为Lua语言实现调用应用程序编程接口API的功能包括:
基于预设开发语言,生成指定调用函数,所述指定调用函数用于调用不同的应用程序编程接口API,所述预设开发语言具备调用API的功能;
基于所述预设开发语言,将所述指定调用函数添加至Lua语言的全局表,使得Lua语言具备调用API的功能;
根据所述全局表中的指定调用函数,基于Lua语言调用API。
2.根据权利要求1所述的方法,其特征在于,所述根据所述全局表中的指定调用函数,基于Lua语言调用API包括:
基于所述预设开发语言,从动态链接库DLL的导出表中,获取待调用的API地址,将所述待调用的API地址存放在所述指定调用函数的闭包中;
基于所述预设开发语言,从所述指定调用函数的闭包中,获取待调用的API地址,根据所述API地址,获取所述API在运行时所需的参数,将获取到的API地址和参数压入堆栈;
基于Lua语言,从所述堆栈中获取所述API地址和所述参数,基于所述API地址、所述参数和所述全局表中的指定调用函数,调用所述API,得到所述API的返回值,将所述返回值压入所述堆栈;
基于所述预设开发语言,从所述堆栈中获取所述返回值。
3.根据权利要求1所述的方法,其特征在于,所述为Lua语言实现创建内存对象的功能包括:
基于所述预设开发语言,定义一个结构体,所述结构体包括一个内存的指针和内存长度;
基于所述预设开发语言,实现第一函数和第二函数,所述第一函数用于获取所述结构体的内存指针,所述第二函数用于获取所述结构体的内存长度;
基于所述预设开发语言,创建一个元表,将所述第一函数和所述第二函数添加至所述元表,使得所述元表具备获取所述结构体的内存指针和内存长度的功能;
将所述元表添加至Lua语言的全局表,使得Lua语言具备创建内存对象的功能;
其中,所述预设开发语言具备创建内存对象的功能。
4.根据权利要求3所述的方法,其特征在于,所述为Lua语言实现创建内存对象的功能还包括:
基于所述预设开发语言,实现第三函数,所述第三函数用于释放所述结构体;
将所述第一函数、所述第二函数和所述第三函数添加至所述元表。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
基于Lua语言,创建一个指定程序段;
基于Lua语言,将所述全局表中的元表设置给所述指定程序段,则所述指定程序段用于创建内存对象。
6.根据权利要求1所述的方法,其特征在于,所述基于具备调用API功能和创建内存对象功能的Lua语言,实现目标程序代码之后,所述方法还包括:
删除所述目标程序代码对应的调试文件,以去除所述目标程序代码的调试功能。
7.一种基于Lua语言的编程装置,其特征在于,所述装置包括:
第一功能实现模块,用于为Lua语言实现调用应用程序编程接口API的功能;
第二功能实现模块,用于为Lua语言实现创建内存对象的功能;
代码实现模块,用于基于具备调用API功能和创建内存对象功能的Lua语言,实现目标程序代码;
其中,所述第一功能实现模块包括:调用函数生成单元、全局表添加单元和调用单元;
所述调用函数生成单元,用于基于预设开发语言,生成指定调用函数,所述指定调用函数用于调用不同的应用程序编程接口API,所述预设开发语言具备调用API的功能;
所述全局表添加单元,用于基于所述预设开发语言,将所述指定调用函数添加至Lua语言的全局表,使得Lua语言具备调用API的功能;
所述调用单元,用于根据所述全局表中的指定调用函数,基于Lua语言调用API。
8.根据权利要求7所述的装置,其特征在于,所述调用单元包括:
第一地址获取子单元,用于基于所述预设开发语言,从动态链接库DLL的导出表中,获取待调用的API地址,将所述待调用的API地址存放在所述指定调用函数的闭包中;
第二地址获取子单元,用于基于所述预设开发语言,从所述指定调用函数的闭包中,获取待调用的API地址,根据所述API地址,获取所述API在运行时所需的参数,将获取到的API地址和参数压入堆栈;
调用子单元,用于基于Lua语言,从所述堆栈中获取所述API地址和所述参数,基于所述API地址、所述参数和所述全局表中的指定调用函数,调用所述API,得到所述API的返回值,将所述返回值压入所述堆栈;
返回值获取子单元,用于基于所述预设开发语言,从所述堆栈中获取所述返回值。
9.根据权利要求7所述的装置,其特征在于,所述第二功能实现模块包括:
结构体定义单元,用于基于所述预设开发语言,定义一个结构体,所述结构体包括一个内存的指针和内存长度;
第一函数实现单元,用于基于所述预设开发语言,实现第一函数和第二函数,所述第一函数用于获取所述结构体的内存指针,所述第二函数用于获取所述结构体的内存长度;
元表创建单元,用于基于所述预设开发语言,创建一个元表,将所述第一函数和所述第二函数添加至所述元表,使得所述元表具备获取所述结构体的内存指针和内存长度的功能;
元表全局添加单元,用于将所述元表添加至Lua语言的全局表,使得Lua语言具备创建内存对象的功能;
其中,所述预设开发语言具备创建内存对象的功能。
10.根据权利要求9所述的装置,其特征在于,所述第二功能实现模块还包括:
第二函数实现单元,用于基于所述预设开发语言,实现第三函数,所述第三函数用于释放所述结构体;
所述元表创建单元,还用于将所述第一函数、所述第二函数和所述第三函数添加至所述元表。
11.根据权利要求9所述的装置,其特征在于,所述装置还包括:
指定程序段创建模块,用于基于Lua语言,创建一个指定程序段;
设置模块,用于基于Lua语言,将所述全局表中的元表设置给所述指定程序段,则所述指定程序段用于创建内存对象。
12.根据权利要求7所述的装置,其特征在于,所述装置还包括:
调试文件删除模块,用于删除所述目标程序代码对应的调试文件,以去除所述目标程序代码的调试功能。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410571641.2A CN104298534B (zh) | 2014-10-23 | 2014-10-23 | 基于Lua语言的编程方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410571641.2A CN104298534B (zh) | 2014-10-23 | 2014-10-23 | 基于Lua语言的编程方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104298534A CN104298534A (zh) | 2015-01-21 |
CN104298534B true CN104298534B (zh) | 2017-10-24 |
Family
ID=52318274
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410571641.2A Active CN104298534B (zh) | 2014-10-23 | 2014-10-23 | 基于Lua语言的编程方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104298534B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106469051B (zh) * | 2015-08-19 | 2020-03-27 | 阿里巴巴集团控股有限公司 | 对象传递方法和装置 |
CN105808256B (zh) * | 2016-03-08 | 2017-06-23 | 武汉斗鱼网络科技有限公司 | 一种构造合法堆栈返回值绕过函数调用检测的方法与系统 |
CN106528259B (zh) * | 2016-11-04 | 2019-07-09 | 网易(杭州)网络有限公司 | 数据发送、接收方法及其装置 |
CN108108162B (zh) * | 2016-11-24 | 2020-05-12 | 腾讯科技(深圳)有限公司 | 应用程序编程接口生成方法及装置 |
CN107133502B (zh) * | 2017-04-14 | 2019-10-15 | 北京梆梆安全科技有限公司 | 一种应用程序的处理方法及装置 |
CN107846449B (zh) * | 2017-09-28 | 2019-01-29 | 武汉斗鱼网络科技有限公司 | 调用系统工具的方法、装置、可读存储介质及设备 |
CN108874376B (zh) * | 2018-06-19 | 2021-09-07 | 北京智明星通科技股份有限公司 | 函数和类的导出方法及装置、终端和计算机可读存储介质 |
CN109871276B (zh) * | 2019-01-14 | 2021-02-02 | 珠海金山网络游戏科技有限公司 | 一种基于Lua获取手机应用内存的方法及装置 |
CN111800379A (zh) * | 2020-05-26 | 2020-10-20 | 北京惠而特科技有限公司 | 一种基于Lua的工控私有协议检测方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101196812A (zh) * | 2007-12-14 | 2008-06-11 | 上海科泰世纪科技有限公司 | 构件化软件系统实现脚本语言调用多输出参数接口的方法 |
CN103019697A (zh) * | 2012-11-22 | 2013-04-03 | 福建天晴数码有限公司 | 一种lua脚本的编辑插件 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9182962B2 (en) * | 2010-12-09 | 2015-11-10 | Todd Bradley KNEISEL | Method for translating a cobol source program into readable and maintainable program code in an object oriented second programming language |
-
2014
- 2014-10-23 CN CN201410571641.2A patent/CN104298534B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101196812A (zh) * | 2007-12-14 | 2008-06-11 | 上海科泰世纪科技有限公司 | 构件化软件系统实现脚本语言调用多输出参数接口的方法 |
CN103019697A (zh) * | 2012-11-22 | 2013-04-03 | 福建天晴数码有限公司 | 一种lua脚本的编辑插件 |
Also Published As
Publication number | Publication date |
---|---|
CN104298534A (zh) | 2015-01-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104298534B (zh) | 基于Lua语言的编程方法和装置 | |
CN108733988B (zh) | 安卓平台上可执行程序的保护方法 | |
CN111090433B (zh) | 一种数据处理的方法、装置和存储介质 | |
Kim et al. | ScanDal: Static analyzer for detecting privacy leaks in android applications | |
CN104714788B (zh) | 一种软件安装包自动生成的方法及装置 | |
JP6122493B2 (ja) | 適応的に移植性を有したライブラリ | |
CN103838584B (zh) | 一种移动终端应用的开发方法及装置 | |
CN107729725A (zh) | 一种基于虚拟机指令修改的Android应用加固系统及方法 | |
US8615735B2 (en) | System and method for blurring instructions and data via binary obfuscation | |
CN106919398A (zh) | 一种软件发布方法及装置 | |
CN109684794A (zh) | 一种代码保护虚拟机kvm系统实现方法、装置、计算机设备及存储介质 | |
CN106528261A (zh) | 应用页面初始化的编译控制装置及方法 | |
CN101030241A (zh) | 基于Keil C51的软件保护开发的方法和系统 | |
US20110209004A1 (en) | Integrating templates into tests | |
CN113220326B (zh) | 智能合约升级方法及区块链系统 | |
CN105005497A (zh) | 一种Java卡虚拟机中本地函数的调用方法及装置 | |
CN104751026B (zh) | 安卓系统的软件保护方法、软件应用方法及相关装置 | |
CN107798244A (zh) | 一种检测远程代码执行漏洞的方法及装置 | |
CN104750482A (zh) | 一种构建基于MapReduce的动态脚本执行引擎的方法 | |
CN114020278B (zh) | 数据处理方法、装置、设备及存储介质 | |
Schütte et al. | lios: Lifting ios apps for fun and profit | |
CN107315587B (zh) | 一种基于二次链接的航天器在轨维护注入码生成方法 | |
CN112114809A (zh) | 一种程序代码安全防护方法、装置及存储介质 | |
CN110084005A (zh) | 一种代码的处理方法及装置 | |
CN105335230A (zh) | 一种服务处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 511446 Guangzhou City, Guangdong Province, Panyu District, South Village, Huambo Business District Wanda Plaza, block B1, floor 28 Applicant after: Guangzhou Huaduo Network Technology Co., Ltd. Address before: 510655, Guangzhou, Whampoa Avenue, No. 2, creative industrial park, building 3-08, Applicant before: Guangzhou Huaduo Network Technology Co., Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |