CN113420313A - 程序安全运行、加密方法及其装置、设备、介质 - Google Patents
程序安全运行、加密方法及其装置、设备、介质 Download PDFInfo
- Publication number
- CN113420313A CN113420313A CN202110794478.6A CN202110794478A CN113420313A CN 113420313 A CN113420313 A CN 113420313A CN 202110794478 A CN202110794478 A CN 202110794478A CN 113420313 A CN113420313 A CN 113420313A
- Authority
- CN
- China
- Prior art keywords
- signature
- ciphertext
- member function
- program
- relative offset
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Databases & Information Systems (AREA)
- Storage Device Security (AREA)
Abstract
本申请公开一种程序安全运行、加密方法及其装置、设备、介质,涉及网络直播信息技术领域,所述程序安全运行方法包括:响应实例对象的接口调用,获取传入的成员函数的名称和参数;从内存空间中读取出该成员函数相对应的元对象数据的第一密文,解密第一密文获得相对偏移数据;根据相对偏移数据寻址,从内存空间中读取出该成员函数的第二密文,解密第二密文获得成员函数的签名字符串;检验以被解密出的签名字符串构造的签名是否与根据所述名称和参数构造的签名一致,当检验一致时,返回该成员函数的映射标识以实施调用。本申请通过对计算机程序的元对象数据运行加密解密技术,提升应用程序的静态代码和动态代码的安全性,使其不易被破译和攻击。
Description
技术领域
本申请实施例涉及网络直播安全领域,尤其涉及一种程序安全运行、加密方法及其装置、设备、介质。
背景技术
网络直播的安全涉及方方面面,其中,其客户端应用程序的安全便是一个方面。此类应用程序通常采用基于编译机制的高级语言开发,典型如C++,一般情况下,所开发出的应用程序依照开发语言工具自身实现的机制进行编译,由编译所负责的安全完全交付开发语言工具自身的安全机制来实现。
关于开发语言工具的安全机制,以Qt为例进行说明,Qt是一个由Qt Company开发的跨平台C++图形用户界面应用程序开发框架,在市场上被广泛应用于PC端应用程序界面开发如google earth,WPS Office等。
Qt的一个显著特性是易于扩展,原因是使用了特殊的代码生成扩展(即元对象编译器Meta Object Compiler,简称MOC),使得使用Qt的应用程序易于扩展。之所以Qt构建自己的元对象系统,主要是因为C++语言特性的RTTI(Run-Time Type Identification,运行时类型识别)能力较弱,只能提供有限的类型信息,且 C++标准并未规定RTTI的具体实现,使得RTTI特性的实现在不同的编译器上存在较大的差别,导致可移植性较差。为了解决上述问题,Qt提供了自己的元对象系统。
元对象系统的核心是MOC为每个QObject子类编译出来的元对象数据,每个QObject子类会通过MOC自动生成一些代码,这些代码中就有 staticMetaObject的定义,该数据包含了该类的大量元对象数据如成员变量名称,属性名称,成员函数名称,以及成员变量偏移等信息,通过这些元对象数据基本上可以完全复原一个类的构造。
但是这也导致了一个问题即上述元对象数据都是明文存放在应用程序中的,使得任何一个攻击者拿到了应用程序的二进制bin文件后即可逆向得到相应的类的完整结构,导致攻击者的逆向成本很低,因此降低了基于Qt框架的应用程序的安全性。
为了解决上述安全性问题,提高攻击者逆向基于Qt之类框架的应用程序的成本,便需要借助新的技术方案对元对象数据进行保护。
发明内容
本申请的目的在于克服现有技术中至少部分不足而提供一种程序安全运行方法、程序安全加密方法及其相应的装置、计算机设备及存储介质。
为解决上述技术问题,本申请实现的一个技术方案是:
本申请的一种程序安全运行方法,其包括如下步骤:
响应实例对象的接口调用,获取传入的成员函数的名称和参数;
从存储该实例对象的元对象数据的内存空间中读取出该成员函数相对应的元对象数据的以第一密文封装的相对偏移数据,解密第一密文获得所述相对偏移数据;
根据解密出的相对偏移数据寻址,从所述内存空间中读取出该成员函数的以第二密文封装的签名字符串,解密第二密文获得所述成员函数的签名字符串;
检验以被解密出的签名字符串构造的签名是否与根据所述成员函数的名称和参数构造的签名一致,当检验一致时,返回该成员函数的映射标识以实施调用。
一种实施例中,所述程序安全运行方法包括如下前置步骤:
启动当前应用程序进程,以将其目标文件加载至所述内存空间中,所述目标文件包含所述的第一密文及第二密文;
根据预定义的类接口创建所述的实例对象,以供实施所述的接口调用。
较佳的实施例中,根据解密出的相对偏移数据寻址,从所述内存空间中读取出该成员函数的以第二密文封装的签名字符串,解密第二密文获得所述成员函数的签名字符串的步骤中,当存在多个所述的相对偏移数据时,逐一遍历各个相对偏移数据分别获取其签名字符串。
一种实施例中,检验以被解密出的签名字符串构造的签名是否与根据所述成员函数的名称和参数构造的签名一致,当检验一致时,返回该成员函数的映射标识以实施调用,包括适应每一相对偏移数据执行的如下步骤:
以解密出的签名字符串构造出所述成员函数的第一签名;
以所述成员函数的名称和参数构造出其第二签名;
将所述第一签名与第二签名进行比较,当两者一致时,校验为签名一致,相应返回该成员函数的映射标识以实施调用。
较佳的实施例中,所述第一密文及第二密文均以对称密钥加密。
为解决上述技术问题,本申请实现的另一技术方案是:
本申请的一种程序安全加密方法,其包括如下步骤:
启动对程序代码文件的编译,根据其中实例对象的类定义信息提取其中成员函数的签名;
将所述签名在程序代码文件中的相对偏移数据加密为第一密文,输出到编译空间中;
将所述签名对应的签名字符串加密为第二密文,输出到所述编译空间中;
将所述编译空间的二进制数据存储为该程序的目标文件。
为解决上述技术问题,本申请实现的再一技术方案是:
本申请的一种程序安全运行装置,其包括:调用响应模块,用于响应实例对象的接口调用,获取传入的成员函数的名称和参数;偏移读取模块,用于从存储该实例对象的元对象数据的内存空间中读取出该成员函数相对应的元对象数据的以第一密文封装的相对偏移数据,解密第一密文获得所述相对偏移数据;签名读取模块,用于根据解密出的相对偏移数据寻址,从所述内存空间中读取出该成员函数的以第二密文封装的签名字符串,解密第二密文获得所述成员函数的签名字符串;签名校验模块,用于检验以被解密出的签名字符串构造的签名是否与根据所述成员函数的名称和参数构造的签名一致,当检验一致时,返回该成员函数的映射标识以实施调用。
一种实施例中,所述程序安全运行装置包括:进程启动模块,用于启动当前应用程序进程,以将其目标文件加载至所述内存空间中,所述目标文件包含所述的第一密文及第二密文;对象实例化模块,用于根据预定义的类接口创建所述的实例对象,以供实施所述的接口调用。
较佳的实施例中,所述偏移读取模块被配置为当存在多个所述的相对偏移数据时,逐一遍历各个相对偏移数据分别获取其签名字符串。
一种实施例中,所述签名校验模块被配置为适应每一相对偏移数据执行的如下功能:以解密出的签名字符串构造出所述成员函数的第一签名;以所述成员函数的名称和参数构造出其第二签名;将所述第一签名与第二签名进行比较,当两者一致时,校验为签名一致,相应返回该成员函数的映射标识以实施调用。
较佳的实施例中,所述第一密文及第二密文均以对称密钥加密。
为解决上述技术问题,本申请实现的一个技术方案是:
本申请的一种程序安全加密装置,其包括:编译启动模块,用于启动对程序代码文件的编译,根据其中实例对象的类定义信息提取其中成员函数的签名;第一加密模块,用于将所述签名在程序代码文件中的相对偏移数据加密为第一密文,输出到编译空间中;第二加密模块,用于将所述签名对应的签名字符串加密为第二密文,输出到所述编译空间中;编译生成模块,用于将所述编译空间的二进制数据存储为该程序的目标文件。
为解决上述技术问题本申请实施例还提供一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行上述所述程序安全运行方法和/或所述程序安全加密方法的步骤。
为解决上述技术问题本申请实施例还提供一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述所述程序安全运行方法和/或所述程序安全加密方法的步骤。
与现有技术相比,本申请具有如下优点:
本申请通过在编译时输出代码文件时对元对象数据包括明文字符串数据,明文偏移数据进行加密成密文,实现对元对象数据的保护。相应的,在运行阶段再对元对象数据进行临时解密,确保解密数据只在内存中存在较短时间,从而提高元对象数据的安全性,降低攻击风险。此外,本申请在对运行性能无宏观可感知负面影响情况下,加强了应用程序的安全性,提高了逆向分析者的攻击成本。本申请尤其适用于Qt及与其具有同类特点的开发框架所实现的计算机应用程序,可以全面提升此类应用程序的安全性,尤其适于开发网络直播相关的应用程序,确保网络直播系统的安全。
附图说明
本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本申请的程序安全运行方法在其典型实施例中体现的流程示意图;
图2为本申请的程序安全运行方法在其另一实施例中体现的流程示意图;
图3为本申请的程序安全运行方法的一个实施例中适应每一相对偏移数据进行处理的过程所体现的流程示意图;
图4为本申请的程序安全加密方法在其典型实施例中体现的流程示意图;
图5为本申请的程序安全运行装置的基本结构示意图;
图6为本申请的程序安全加密装置的基本结构示意图;
图7为本申请一个实施例的计算机设备的基本结构框图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本申请的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本申请所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
本技术领域技术人员可以理解,这里所使用的“客户端”、“终端”、“终端设备”既包括无线信号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件的设备,其具有能够在双向通信链路上,进行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他诸如个人计算机、平板电脑之类的通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备;PCS(PersonalCommunications Service,个人通信系统),其可以组合语音、数据处理、传真和/或数据通信能力;PDA (Personal Digital Assistant,个人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日历和/或GPS(Global PositioningSystem,全球定位系统)接收器;常规膝上型和/或掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其他设备。这里所使用的“客户端”、“终端”、“终端设备”可以是便携式、可运输、安装在交通工具(航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和 /或以分布形式,运行在地球和/或空间的任何其他位置运行。这里所使用的“客户端”、“终端”、“终端设备”还可以是通信终端、上网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
本申请所称的“服务器”、“客户端”、“服务节点”等名称所指向的硬件,本质上是具备个人计算机等效能力的电子设备,为具有中央处理器(包括运算器和控制器)、存储器、输入设备以及输出设备等冯诺依曼原理所揭示的必要构件的硬件装置,计算机程序存储于其存储器中,中央处理器将存储在外存中的程序调入内存中运行,执行程序中的指令,与输入输出设备交互,借此完成特定的功能。
需要指出的是,本申请所称的“服务器”这一概念,同理也可扩展到适用于服务器机群的情况。依据本领域技术人员所理解的网络部署原理,所述各服务器应是逻辑上的划分,在物理空间上,这些服务器既可以是互相独立但可通过接口调用的,也可以是集成到一台物理计算机或一套计算机机群的。本领域技术人员应当理解这一变通,而不应以此约束本申请的网络部署方式的实施方式。
本申请相关技术方案可部署在云端服务器,其可以与业务上相关的服务器实现数据通信连接以协调在线服务,还可与其他相关服务器构成逻辑上相关联的服务机群,来为相关的终端设备例如智能手机、个人计算机、第三方服务器等提供服务。所述的智能手机和个人计算机均可通过公知的网络接入方式接入互联网,与本申请的服务器建立数据通信链路,以便访问和使用所述服务器所提供的服务。
对于服务器而言,一般通过提供在线服务的服务引擎开放相应的程序接口供各种终端设备进行远程调用,本申请中适于部署于服务器的相关技术方案,便可以此种方式实现于服务器中。
同理,本申请的相关技术方案也可部署在终端设备中,以便不依赖外部资源进行本地独立开发,利用本申请的相关技术方案开发相关应用程序产品,使得相关应用程序全面包含体现本申请的技术方案及其的有益优势。
本领域技术人员对此应当知晓:本申请的各种方法,虽然基于相同的概念而进行描述而使其彼此间呈现共通性,但是,除非特别说明,否则这些方法都是可以独立执行的。同理,对于本申请所揭示的各个实施例而言,均基于同一发明构思而提出,因此,对于相同表述的概念,以及尽管概念表述不同但仅是为了方便而适当变换的概念,应被等同理解。
本申请即将揭示的各个实施例,除非明文指出彼此之间的相互排斥关系,否则,各个实施例所涉的相关技术特征可以交叉结合而灵活构造出新的实施例,只要这种结合不背离本申请的创造精神且可满足现有技术中的需求或解决现有技术中的某方面的不足即可。对此变通,本领域技术人员应当知晓。
请参阅图1,本申请的一种程序安全运行方法,被编程实现为运行于计算机设备的应用程序,在其典型实施例中,包括如下步骤:
步骤S13、响应实例对象的接口调用,获取传入的成员函数的名称和参数:
当以本申请的程序安全运行方法所实现的应用程序被运行时,表现为一个内存中存活的进程,在其在内存存活的生命周期内,其相应的代码集以及程序运行所需的资源一般会根据需要而被计算机设备的CPU调度到其内存空间进行缓存,至于内存调度策略为本领域技术人员所公知,不影响本申请的实施,恕不赘述。
以Qt开发框架采用C++语言开发的体现本申请的技术方案的应用程序为例,当其被运行之后,会读取其编译后的代码文件,将其中的代码集及各种相关资源调度到所述的内存空间中。
根据程序所实现的业务逻辑,在该应用程序运行过程中,不可避免地涉及到对类接口的实例化,将类接口实例化为实例对象,以便该应用程序的其他代码指令或者其他外部进程的代码指令能够对该实例对象实施接口调用。诚如本领域技术人员所知,实施接口调用时,一般需要指定需要调用的实例对象的具体的某个成员函数的名称,并且提供需要传入的参数。因此,本应用程序在收到外部对本进程内的实例对象的接口调用时,便可获取该接口调用相对应的所述实例对象的具体成员函数的名称和相关参数。
对于所述实例对象,存在相应的元对象数据,这些元对象数据主要是指其成员函数、属性等相对应的数据信息,这些数据信息并存储于所述的内存空间中,按照一定的内存存储格式存储,可以适用相对偏移数据进行寻址,因此,在所述内存空间中的元对象数据,一般包括两类数据,即用于指向元对象数据所处内存空间中的存储位置的相对偏移数据,以及用于相应的元对象数据本身,其本质上属于用于表达成员函数的签名的字符串。由此,在所述内存空间中存在着所述实例对象的各个成员函数的元数据对象相应的相对偏移数据以及签名字符串,可以供调用。
步骤S14、从存储该实例对象的元对象数据的内存空间中读取出该成员函数相对应的元对象数据的以第一密文封装的相对偏移数据,解密第一密文获得所述相对偏移数据:
由于该内存空间中存在所述相对偏移数据,为了获取签名字符串,可先从传入的实例对象成员函数所属的所述内存空间中首先读出该成员函数相对应的相对偏移数据,典型实施例中,存在多个相对偏移数据,也即存在多个所述的签名字符串。
依据本申请的创造精神,所述的相对偏移数据在所述内存空间中,是以第一密文的形式存在的,也即其以某种公知且可被本申请解密的加密方式进行加密,形成所述的第一密文,以便加强其安全性,使其不易被攻击破译。加密可以发生在该应用程序被编译器编译时,后续本申请将揭示其加密过程相关的技术方案,此处暂且按下不表。所述的加密方式优选对称密钥进行加密,相对的,解密时也用密钥予以解密。
以与加密方式相应的解密方式对所述的第一密文进行解密后,便可获得以明文表达的所述相对偏移数据,成为当前应用程序可以直接读取的有效数据。
步骤S15、根据解密出的相对偏移数据寻址,从所述内存空间中读取出该成员函数的以第二密文封装的签名字符串,解密第二密文获得所述成员函数的签名字符串:
如前所述,适应一个成员函数,一般存在多个所述的相对偏移数据,根据每一相对偏移数据在该成员函数相应的所述内存空间中进行寻址,便可读取到该相对偏移数据所指向的元对象数据。
同理,依据本申请的创造精神,所述的相对偏移数据所指向的元对象数据在所述内存空间中,是以第二密文的形式存在的,也即其以某种公知且可被本申请解密的加密方式进行加密,形成所述的第二密文,以便加强其安全性,使其不易被攻击破译。加密可以发生在该应用程序被编译器编译时,后续本申请将揭示其加密过程相关的技术方案,此处暂且按下不表。所述的加密方式优选对称密钥进行加密,相对的,解密时也用密钥予以解密。
第一密文与第二密文的加密方式可以完全相同,也可以不同,只要本应用程序能够对应解密即可,但若采取相同加密方式,显然可以简化应用程序的编程实现,如若采用不同的加密方式,则可以加强破译密文的难度,各有千秋。
所述相对偏移数据所指向的元对象数据,也即所述的第二密文,便是所述被调用的成员函数相对应的签名字符串的密文表达形式,因此,本应用程序负责将该第二密文解密,还原出所述的签名字符串。
以与加密方式相应的解密方式对所述的第二密文进行解密后,便可获得以明文表达的所述签名字符串,成为当前应用程序可以直接读取的有效数据。
步骤S16、检验以被解密出的签名字符串构造的签名是否与根据所述成员函数的名称和参数构造的签名一致,当检验一致时,返回该成员函数的映射标识以实施调用:
可以理解,根据所述的相对偏移数据可以获得一个或多个签名字符串,这些签名字符串是可以用于构造成员函数相对应的签名,将从第二密文中获得的签名字符串所构造出的签名确定为第一签名。
同理,根据对所述实例对象实施接口调用时传入的成员函数的名称和参数,也可相应构造出一个签名,确定为第二签名。
此处所称的成员函数的签名,指函数签名,与本申请的应用程序所采用的开发语言有关,以Qt框架所用的C++为例,C++中的函数签名(function signature):包含了一个函数的信息,包括函数名、参数类型、参数个数、顺序以及它所在的类和命名空间。函数签名用于识别不同的函数,函数的名称只是函数签名的一部分。在编译器及链接器处理符号时,使用某种名称修饰的方法,使得每个函数签名对应一个修饰后名称(decorated name)。编译器在将C++源代码编译成目标文件时,会将函数和变量的名字进行修饰,形成符号名,也就是说,C++ 的源代码编译后的目标文件中所使用的符号名是相应的函数和变量的修饰后名称。C++编译器和链接器都使用符号来识别和处理函数和变量,所以对于不同函数签名的函数,即使函数名相同,编译器和链接器都认为它们是不同的函数。不同的编译器厂商的名称修饰方法可能不同,所以不同的编译器对于同一个函数签名可能对应不同的修饰后名称。
可以理解,第一签名的构造与第二签名的构造之间应当具有一定的相应性,也即,如果例如依照C++的规则,其将成员函数所涉的多个从内存空间中获取的签名字符串组装为一个成员函数的签名构成第一签名,第一签名遵守一个构造规则,则所述的第二签名一般也按照这一构造规则对所传入的成员函数的名称和参数进行构造,比便两者进行比较实现校验,校验两者是否一致。而在其他可能的实施例中,也可以对应各个签名字符串(第一签名)独立地构造第二签名,然后将其进行比较,直到所有相对偏移数据所指向的签名字符串均校验通过,确认为校验一致。
尽管本实施例中以C++的规则进行了关于实现所述第一签名和第二签名的构造的介绍,但不应以此限制本申请的保护范围。本领域技术人员应当理解,只要第一签名与第二签名遵循同一构造规则进行对应,其相互之间的比较便有了意义,便可实现本申请欲实现的技术方案。因此,推而广之,本申请不仅适用于C++这一开发语言,同理也可适用于具有相同编译特点的语言,实现对其编写的成员函数的元对象数据的加密和解密,从而达到本申请所要取得的进步性。
本申请将所述第一签名与第二签名进行比较后,如果两者一致,则视为校验通过,此时判定接口调用合法,由此可将所述被调用的成员函数在内存中的映射标识返回,以供启动对成员函数的执行,直至完成该成员函数的调用。否则,则视为对成员函数的非法调用,可以返回错误值,或者抛出异常,阻击非法的暴力攻击,保护依据本申请所实现的应用程序的安全运行。
本申请的应用程序,由于其已预先对其中实例对象的成员函数的元对象数据加密,除非知晓解密方式,否则难以实施对所述成员函数的合法调用,即使知晓解密方式,所述成员函数相关的元对象数据的明文也仅仅在短时间内被暴露,除此之外,在该应用程序处于内存空间的整个生命周期中,相关元对象数据仍然以密文方式存在,可见,其安全性极高,不易破解。
网络直播之类的应用程序,由于其商业利益巨大,常遭破解,通过模拟应用程序中的成员函数的结构也构造远程请求,对远程服务器实施攻击,这种情况下,应用本申请的技术方案,可以进一步加强此类应用程序的安全性,不仅可以保护本地运行的应用程序,也可有效保护远程服务器免受远程攻击。
请参阅图2,本申请另一实施例中,所述程序安全运行方法还包括如下前置步骤:
步骤S11、启动当前应用程序进程,以将其目标文件加载至所述内存空间中,所述目标文件包含所述的第一密文及第二密文:
当用户启动实现了本申请的技术方案的应用程序之后,本申请的应用程序成员内存中的当前应用程序,处于活跃的状态。当前应用程序成为内存中的进程之后,便自动将其目标文件中的二进制代码加载至该应用程序所运行的内存空间中。由于所述目标文件是所述应用程序被编译后的产物,而在编译时,预先将成员函数相关的元对象数据编译成了所述的第一密文和第二密文,因此,目标文件存在所述的第一密文和第二密文,当前应用程序在将自身的代码加载至内存空间的过程中,自然也将所述的第一密文和第二密文加载至所述的内存空间中,以便后续直接调用。
而在其他实施例中,也可由当前应用程序进程在需要时才将所述目标文件所包含的第一密文和第二密文调度至内存中,具体可灵活实施,视乎操作系统及编程技术灵活实施即可,例如,如果所述第一密文和第二密文存在于Windows 系统的DLL文件中,则可动态链接,当需要调用到相关类接口时,才将其调度到内存中。对此,由于并不影响本申请的创造精神的体现,因此恕不详述。
步骤S12、根据预定义的类接口创建所述的实例对象,以供实施所述的接口调用:
当前应用程序不可避免地定义了各种类接口,所述类接口在内存中被实例化后便获得相应的实例对象,为了实现对成员函数的调用,需要对类接口进行实例化,在类接口被实例化构造出所述的实例对象后,该实例对象的成员函数便被暴露为可调用的状态,此后,通过该实例对象的成员函数便可对内存空间中的元数据对象进行调用。
在此基础上,执行本申请的步骤S13至步骤S14,便以此处实例化的实例对象为基础。
本实施例健全了本申请的技术方案所实现的应用程序的运行过程,合理安排了其加载目标文件中的代码以及实例化的步骤,使得本申请的应用程序能够高效运行,提升了内存利用率,改善了程序运行性能。
本申请的一个实施例中,所述步骤S1600执行时,若在先的步骤S1500获取到多个相对偏移数据,便有必要对各个相对偏移数据进行遍历,针对各个相对偏移数据逐一获取其签名字符串,以便最终利用这些相对偏移数据所指向的签名字符串(经解密)进行连接构造出所述的第一签名,以供校验。本实施例给出了一个构造签名的构造规则,为构造第二签名提供了参照系,有利于统一程序开发逻辑,提升软件工程的开发效率。
请参阅图3,本申请另一实施例中,当步骤S15获得多个相对偏移数据后,在执行所述步骤S16时,适应每一相对偏移数据执行的如下步骤:
步骤S161、以解密出的签名字符串构造出所述成员函数的第一签名:
当前应用程序可以依照所述签名的预定的构造规则实现一个负责连接签名字符串的连接器,以便在此处,由该连接器针对依据每一相对偏移数据所获得的签名字符串进行连接,该构造规则可以默认为按照相对偏移数据的顺序进行连接,由此,后一签名字符串被连接到前一签名字符串的末尾,在完成最后一个签名字符串的连接之后,便获得了被调用的成员函数的完整的签名,即所述的第一签名。
步骤S162、以所述成员函数的名称和参数构造出其第二签名:
同理,相应于所述的构造规则,将接口调用时传入的成员函数的名称、参数进行连接,以构造出所述的第二签名。
步骤S163、将所述第一签名与第二签名进行比较,当两者一致时,校验为签名一致,相应返回该成员函数的映射标识以实施调用:
较为简便的步骤,是将所述第一签名与第二签名进行字符串比较,判断其两者是否一致。当然,还可辅以更为智能化的比较手段,例如进行基于分词的比较,以便忽略掉两者表达方式上的细微差异。无论如何,通过按照一定的匹配规则进行比较,便可校验两个签名是否一致。
根据本申请所实现的逻辑,当两个签名一致时,便可相应返回被调用的成员函数其相对应的映射标识,由本申请的应用程序依据该映射标识发起该成员函数的实际调用,使该成员函数的指令集得以执行,获得最终执行结果。至于本申请的应用程序依据映射标识发起的实际调用,可依开发语言、开发框架而异灵活确定,例如Qt开发框架中,便可利用qt_metacall方法调用所述的映射标识,实现对所述成员函数的调用。
当两个签名不一致时,此时应当判定为非法调用,可返回错误值,或者直接抛出异常,以阻断对成员函数的调用,及时止损。
可以看出,本实施例进一步强化了安全管控技术的实现,本实施例可以与前述各实施例按需结合构造出新的实施例,本领域技术人员根据本申请的各个实施例,应可灵活实施。
请参阅图4,本申请提供的一种程序安全加密方法,主要应用在应用程序开发框架的编译器中,当其对本申请前述的应用程序执行编译时,在其典型实施例中,包括如下步骤:
步骤S21、启动对程序代码文件的编译,根据其中实例对象的类定义信息提取其中成员函数的签名:
以Qt开发框架为例,对其编译器进行改进,使其实现所述程序安全加密方法的技术方案,这种情况下,当开发人员在Qt开发框架中完成本申请程序安全运行方法所实现的应用程序时,便启动该编译器对该应用程序的代码文件中的源代码进行编译。
根据本申请的技术方案,该编译器执行编译时,涉及到实例对象相应的类定义信息的处理。所述类定义信息一般体现在类定义文件中,定义了各个类接口,当应用程序运行时对所述类接口进行实例化之后,便获得相应的所述实例对象。
为了实现对所述成员函数的编译,编译器从所述类定义信息中提取出其中各个成员函数的签名。所述签名的各个构件以符合开发语言规范的形式体现在源代码中,因此,编译器可以遵照开发语言固有的规范,依照一定的构造规则获得所述的签名。
步骤S22、将所述签名在程序代码文件中的相对偏移数据加密为第一密文,输出到编译空间中:
编译器在编译过程中,会将所述签名映射到一个编译空间,该编译空间可理解为与被编译的程序代码文件具有某种映射关系的编译空间,由此,可以确定所述签名在所述编译空间中的寻址信息,也即一个或多个相对偏移数据,编译器以相对偏移数据为寻址信息,对所述的签名的各个构成部分即各个签名字符串进行索引编排,其中每个签名字符串对应一个相对偏移数据以便一一对应寻址。为安全起见,所述的第一密文在此处被加密为第一密文,其加密方式适用公知的任意各种加密方式,只要其可在运行时被相应解密即可。
步骤S23、将所述签名对应的签名字符串加密为第二密文,输出到所述编译空间中:
存储所述相对偏移数据后,进一步需要将所述签名所对应包括的各个签名字符串也以某一公知的加密方式加密为所述的第二密文,然后再输出至所述的编译空间中。
步骤S24、将所述编译空间的二进制数据存储为该程序的目标文件:
当完成前述各步骤以及完成整个程序代码文件的编译之后,便可将所述编译空间中的二进制数据存储为本申请的应用程序的目标文件,以便在该应用程序被运行时,能够加载所述的第一密文和第二密文。可以理解,所输出的目标文件中,包含着所述的第一密文和第二密文,只要适用对应的解密手段,便可将其对应解密获得各个成员函数的签名。
可以看出,本申请通过改进编译器,实现了对应用程序的成员函数相关元对象数据在开发编译阶段的加密操作,此后可在该应用程序被运行时由该应用程序进行解密,增强了该应用程序的安全性。
改进的一个实施例中,可以在被编译的应用程序中预先植入一个解密单元,该解密单元用于随该应用程序被运行时自动加载至该应用程序的进程空间,在该应用程序发生针对所述成员函数的接口调用时,由该解密单元对所述成员函数相应的第一密文与第二密文进行解密。将解密单元植入应用程序,则所述第一密文和第二密文的解密无需依赖第三方插件,其智能化程度更高。当然,执行解密也可由第三方插件实现。
具体到以Qt框架实现的实施例中,主要通过修改Qt开发框架的MOC编译器实现,在MOC编译器输出moc_xx.cpp文件时对元对象数据包括明文字符串数据、明文偏移数据进行加密从而实现对元对象数据的保护。在编译后应用程序运行阶段再对元对象数据进行临时解密,确保解密数据只在内存中存在较短时间,从而提高元对象数据的安全性,降低攻击风险。
概括而言,本申请的程序安全加密方法通过对诸如Qt MOC生成的元对象明文数据进行加密,在对运行性能无宏观可感知负面影响情况下,加强了相应的应用程序产品安全性,提高了逆向分析者的攻击成本。
本申请所提供的一种程序安全运行装置,请参阅图5,在其典型实施例中,其包括:调用响应模块13,用于响应实例对象的接口调用,获取传入的成员函数的名称和参数;偏移读取模块14,用于从存储该实例对象的元对象数据的内存空间中读取出该成员函数相对应的元对象数据的以第一密文封装的相对偏移数据,解密第一密文获得所述相对偏移数据;签名读取模块15,用于根据解密出的相对偏移数据寻址,从所述内存空间中读取出该成员函数的以第二密文封装的签名字符串,解密第二密文获得所述成员函数的签名字符串;签名校验模块16,用于检验以被解密出的签名字符串构造的签名是否与根据所述成员函数的名称和参数构造的签名一致,当检验一致时,返回该成员函数的映射标识以实施调用。
一种实施例中,所述程序安全运行装置包括:进程启动模块,用于启动当前应用程序进程,以将其目标文件加载至所述内存空间中,所述目标文件包含所述的第一密文及第二密文;对象实例化模块,用于根据预定义的类接口创建所述的实例对象,以供实施所述的接口调用。
较佳的实施例中,所述偏移读取模块14被配置为当存在多个所述的相对偏移数据时,逐一遍历各个相对偏移数据分别获取其签名字符串。
一种实施例中,所述签名校验模块16被配置为适应每一相对偏移数据执行的如下功能:以解密出的签名字符串构造出所述成员函数的第一签名;以所述成员函数的名称和参数构造出其第二签名;将所述第一签名与第二签名进行比较,当两者一致时,校验为签名一致,相应返回该成员函数的映射标识以实施调用。
较佳的实施例中,所述第一密文及第二密文均以对称密钥加密。
本申请提供的一种程序安全加密装置,请参阅图6,其包括:编译启动模块 21,用于启动对程序代码文件的编译,根据其中实例对象的类定义信息提取其中成员函数的签名;第一加密模块22,用于将所述签名在程序代码文件中的相对偏移数据加密为第一密文,输出到编译空间中;第二加密模块23,用于将所述签名对应的签名字符串加密为第二密文,输出到所述编译空间中;编译生成模块24,用于将所述编译空间的二进制数据存储为该程序的目标文件。
为解决上述技术问题,本申请实施例还提供计算机设备。如图7所示,计算机设备的内部结构示意图。该计算机设备包括通过系统总线连接的处理器、非易失性存储介质、存储器和网络接口。其中,该计算机设备的非易失性存储介质存储有操作系统、数据库和计算机可读指令,数据库中可存储有控件信息序列,该计算机可读指令被处理器执行时,可使得处理器实现一种程序安全运行方法和/或一种程序安全加密方法。该计算机设备的处理器用于提供计算和控制能力,支撑整个计算机设备的运行。该计算机设备的存储器中可存储有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器执行本申请的程序安全运行方法和/或程序安全加密方法。该计算机设备的网络接口用于与终端连接通信。本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本实施方式中处理器用于执行图6和/或图5中的各个模块及其子模块的具体功能,存储器存储有执行上述模块或子模块所需的程序代码和各类数据。网络接口用于向用户终端或服务器之间的数据传输。本实施方式中的存储器存储有本申请的程序安全运行装置和/或程序安全加密装置中执行所有模块/子模块所需的程序代码及数据,服务器能够调用服务器的程序代码及数据执行所有子模块的功能。
本申请还提供一种存储有计算机可读指令的存储介质,计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行本申请任一实施例的程序安全运行方法的步骤。
本领域普通技术人员可以理解实现本申请上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。
综上所述,本申请通过对计算机程序的元对象数据运行加密解密技术,进一步提升应用程序的静态代码和动态代码的安全性,使其不易被破译和攻击。
本技术领域技术人员可以理解,本申请中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本申请中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本申请中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
以上所述仅是本申请的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (10)
1.一种程序安全运行方法,其特征在于,包括如下步骤:
响应实例对象的接口调用,获取传入的成员函数的名称和参数;
从存储该实例对象的元对象数据的内存空间中读取出该成员函数相对应的元对象数据的以第一密文封装的相对偏移数据,解密第一密文获得所述相对偏移数据;
根据解密出的相对偏移数据寻址,从所述内存空间中读取出该成员函数的以第二密文封装的签名字符串,解密第二密文获得所述成员函数的签名字符串;
检验以被解密出的签名字符串构造的签名是否与根据所述成员函数的名称和参数构造的签名一致,当检验一致时,返回该成员函数的映射标识以实施调用。
2.根据权利要求1所述的程序安全运行方法,其特征在于,包括如下前置步骤:
启动当前应用程序进程,以将其目标文件加载至所述内存空间中,所述目标文件包含所述的第一密文及第二密文;
根据预定义的类接口创建所述的实例对象,以供实施所述的接口调用。
3.根据权利要求1所述的程序安全运行方法,其特征在于,根据解密出的相对偏移数据寻址,从所述内存空间中读取出该成员函数的以第二密文封装的签名字符串,解密第二密文获得所述成员函数的签名字符串的步骤中,当存在多个所述的相对偏移数据时,逐一遍历各个相对偏移数据分别获取其签名字符串。
4.根据权利要求1所述的程序安全运行方法,其特征在于,检验以被解密出的签名字符串构造的签名是否与根据所述成员函数的名称和参数构造的签名一致,当检验一致时,返回该成员函数的映射标识以实施调用,包括适应每一相对偏移数据执行的如下步骤:
以解密出的签名字符串构造出所述成员函数的第一签名;
以所述成员函数的名称和参数构造出其第二签名;
将所述第一签名与第二签名进行比较,当两者一致时,校验为签名一致,相应返回该成员函数的映射标识以实施调用。
5.根据权利要求1至4中任意一项所述的程序安全运行方法,所述第一密文及第二密文均以对称密钥加密。
6.一种程序安全加密方法,其特征在于,包括如下步骤:
启动对程序代码文件的编译,根据其中实例对象的类定义信息提取其中成员函数的签名;
将所述签名在程序代码文件中的相对偏移数据加密为第一密文,输出到编译空间中;
将所述签名对应的签名字符串加密为第二密文,输出到所述编译空间中;
将所述编译空间的二进制数据存储为该程序的目标文件。
7.一种程序安全运行装置,其特征在于,其包括:
调用响应模块,用于响应实例对象的接口调用,获取传入的成员函数的名称和参数;
偏移读取模块,用于从存储该实例对象的元对象数据的内存空间中读取出该成员函数相对应的元对象数据的以第一密文封装的相对偏移数据,解密第一密文获得所述相对偏移数据;
签名读取模块,用于根据解密出的相对偏移数据寻址,从所述内存空间中读取出该成员函数的以第二密文封装的签名字符串,解密第二密文获得所述成员函数的签名字符串;
签名校验模块,用于检验以被解密出的签名字符串构造的签名是否与根据所述成员函数的名称和参数构造的签名一致,当检验一致时,返回该成员函数的映射标识以实施调用。
8.一种程序安全加密装置,其特征在于,其包括:
编译启动模块,用于启动对程序代码文件的编译,根据其中实例对象的类定义信息提取其中成员函数的签名;
第一加密模块,用于将所述签名在程序代码文件中的相对偏移数据加密为第一密文,输出到编译空间中;
第二加密模块,用于将所述签名对应的签名字符串加密为第二密文,输出到所述编译空间中;
编译生成模块,用于将所述编译空间的二进制数据存储为该程序的目标文件。
9.一种计算机设备,其特征在于,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行如权利要求1至6中任一项权利要求所述的方法的步骤。
10.一种存储有计算机可读指令的存储介质,其特征在于,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如权利要求1至6中任一项权利要求所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110794478.6A CN113420313A (zh) | 2021-07-14 | 2021-07-14 | 程序安全运行、加密方法及其装置、设备、介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110794478.6A CN113420313A (zh) | 2021-07-14 | 2021-07-14 | 程序安全运行、加密方法及其装置、设备、介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113420313A true CN113420313A (zh) | 2021-09-21 |
Family
ID=77720975
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110794478.6A Pending CN113420313A (zh) | 2021-07-14 | 2021-07-14 | 程序安全运行、加密方法及其装置、设备、介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113420313A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114051053A (zh) * | 2021-11-16 | 2022-02-15 | 深圳依时货拉拉科技有限公司 | iOS推送消息处理方法、装置、计算机设备和存储介质 |
-
2021
- 2021-07-14 CN CN202110794478.6A patent/CN113420313A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114051053A (zh) * | 2021-11-16 | 2022-02-15 | 深圳依时货拉拉科技有限公司 | iOS推送消息处理方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11921905B2 (en) | Secure collaboration between processors and processing accelerators in enclaves | |
US9934375B2 (en) | Secured execution of a web application | |
CN112039826B (zh) | 应用于小程序端的登录方法和装置,电子设备,可读介质 | |
CN110826031B (zh) | 加密方法、装置、计算机设备及存储介质 | |
CN104680039A (zh) | 一种应用程序安装包的数据保护方法及装置 | |
CN106415491B (zh) | 一种应用保护方法、服务器以及终端 | |
CN111475543A (zh) | 一种模糊搜索方法、装置、计算机设备及存储介质 | |
WO2023029447A1 (zh) | 模型保护方法、装置、设备、系统以及存储介质 | |
CN112966227A (zh) | 代码加密解密方法和装置、存储介质 | |
CN110210211A (zh) | 一种数据保护的方法和计算设备 | |
CN113420313A (zh) | 程序安全运行、加密方法及其装置、设备、介质 | |
US10262161B1 (en) | Secure execution and transformation techniques for computing executables | |
CN113032810A (zh) | 信息处理方法、装置、电子设备、介质和程序产品 | |
US9009472B2 (en) | Providing consistent cryptographic operations | |
CN114896621B (zh) | 应用服务的获取方法、加密方法、装置、计算机设备 | |
CN116910712A (zh) | 代码保护方法、系统、电子设备及存储介质 | |
CN117093964A (zh) | 一种源代码的加密方法、装置、存储介质及电子设备 | |
CN109995534B (zh) | 一种对应用程序进行安全认证的方法和装置 | |
CN110647749A (zh) | 一种二阶sql注入攻击防御的方法 | |
CN107403103B (zh) | 文件解密方法和装置 | |
CN111460464B (zh) | 数据加解密方法、装置、电子设备及计算机存储介质 | |
CN106648770A (zh) | 一种应用程序安装包的生成方法、加载方法及装置 | |
US20190163885A1 (en) | Apparatus and method of providing security and apparatus and method of executing security for common intermediate language | |
EP3261013A1 (en) | Secure scripting for cryptographic functions customization | |
CN116896444B (zh) | 文件包管理方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |