CN110471662A - 程序转换方法、装置及设备 - Google Patents

程序转换方法、装置及设备 Download PDF

Info

Publication number
CN110471662A
CN110471662A CN201910773628.8A CN201910773628A CN110471662A CN 110471662 A CN110471662 A CN 110471662A CN 201910773628 A CN201910773628 A CN 201910773628A CN 110471662 A CN110471662 A CN 110471662A
Authority
CN
China
Prior art keywords
program
function
sentence
file
conversion
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.)
Granted
Application number
CN201910773628.8A
Other languages
English (en)
Other versions
CN110471662B (zh
Inventor
彭义海
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201910773628.8A priority Critical patent/CN110471662B/zh
Publication of CN110471662A publication Critical patent/CN110471662A/zh
Application granted granted Critical
Publication of CN110471662B publication Critical patent/CN110471662B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

本申请公开了程序转换方法、装置及设备,涉及计算机技术领域。具体实现方案为:获取待转换的程序,待转换的程序在运行时会调用第一文件中的危险函数,危险函数为存在安全漏洞的函数;将待转换的程序中的第一包含语句修改为第二包含语句,得到转换后的程序,使得转换后的程序在运行时会调用第二文件中的安全函数,安全函数是对危险函数中的安全漏洞进行处理后的函数;通过上述过程,实现了从源码层面解决了程序中的安全漏洞的问题,保证了程序运行的安全性,能够避免程序被黑客攻击;进一步的,由于只需要对程序中的包含语句进行修改,无需对程序中的各个危险函数进行逐个替换,提高了程序转换的效率。

Description

程序转换方法、装置及设备
技术领域
本申请涉及计算机技术领域,尤其涉及一种程序转换方法、装置及设备。
背景技术
计算机程序设计语言有多种,例如:C语言、C++语言、Java语言、PHP语言等。
通常,每种计算机程序设计语言,都提供函数调用机制。也就是说,任何程序设计语言编写的程序中都可以调用一系列函数,这些函数可以是程序设计语言提供的标准函数库中的标准函数,还可以是用户编写的自定义函数。
然而,任何程序设计语言编写的函数都可能会存在安全漏洞,这些存在安全漏洞的函数被程序调用,会给程序的运行带来风险,使得程序容易导致外部黑客的攻击。
发明内容
本申请提供一种程序转换方法、装置及设备,用以解决程序中的安全漏洞,提高程序的安全性。
第一方面,本申请提供一种程序转换方法,包括:
获取待转换的程序,所述待转换的程序在运行时会调用第一文件中的危险函数,所述危险函数为存在安全漏洞的函数;将所述待转换的程序中的第一包含语句修改为第二包含语句,得到转换后的程序;其中,所述第一包含语句用于指示在程序中包含所述第一文件,所述第二包含语句用于指示在程序中包含第二文件,所述转换后的程序在运行时会调用所述第二文件中的安全函数,所述安全函数是对所述危险函数中的安全漏洞进行处理后的函数。
该实现方式中,通过将第一包含语句修改为第二包含语句,实现了从源码层面解决了程序中的安全漏洞的问题,保证了程序运行的安全性,能够避免程序被黑客攻击;进一步的,由于只需要对程序中的包含语句进行修改,无需对程序中的各个危险函数进行逐个替换,提高了程序转换的效率。
一种可能的实现方式中,所述将所述待转换的程序中第一包含语句修改为第二包含语句之前,还包括:
获取所述待转换的程序中的所述第一包含语句;
根据所述第一包含语句指示的被包含的第一文件,获取与所述第一文件对应的第二文件的路径;
根据所述第二文件的路径,生成所述第二包含语句。
一种可能的实现方式中,所述获取所述待转换的程序中的所述第一包含语句,包括:
根据包含语句对应的关键字,获取所述待转换的程序中的每个包含语句;
针对每个所述包含语句,获取所述包含语句指示的被包含文件的名称,根据所述被包含文件的名称,确定所述包含语句是否为第一包含语句。
一种可能的实现方式中,所述待转换的程序中还包括调用语句,所述调用语句用于指示调用所述危险函数;所述得到转换后的程序之后,还包括:
获取所述转换后的程序中的所述调用语句;
根据所述第二包含语句指示的被包含的第二文件,以及所述调用语句所指示调用的危险函数,将所述转换后的程序中的所述调用语句替换为与所述危险函数对应的安全函数,得到函数替换后的程序;
根据所述函数替换后的程序,对所述转换后的程序中的语句进行修正。
该实现方式中,通过对转换后的程序中的语句进行修正,使得最终输出的转换后的程序是能够被正确运行的程序,即,保证了程序转换的正确性。
一种可能的实现方式中,所述根据所述函数替换后的程序,对所述转换后的程序中的语句进行修正,包括:
根据所述函数替换后的程序,确定所述转换后的程序中的所述第二包含语句指示的被包含的第二文件是否被正确包含;
若确定未被正确包含,则根据所述被包含的第二文件的路径信息,对所述转换后的程序中的第二包含语句进行修正。
一种可能的实现方式中,所述根据所述函数替换后的程序,对所述转换后的程序中的语句进行修正,包括:
根据所述函数替换后的程序,确定所述转换后的程序中的所述调用语句是否正确调用所述安全函数;
若确定未正确调用所述安全函数,则根据所述安全函数的定义,对所述转换后的程序中的调用语句进行修正。
一种可能的实现方式中,对所述转换后的程序中的语句进行修正之后,还包括:
根据所述修正的内容,生成所述修正对应的日志信息;
将修正后的所述转换后的程序以及所述日志信息进行输出。
一种可能的实现方式中,所述第一文件为标准函数库中的标准文件,所述危险函数为所述标准文件中的标准函数;所述安全函数与所述标准函数的定义相同。
该实现方式中,由于安全函数与标准函数的定义相同,使得只需要对包含语句进行替换,而无需对每个函数调用语句均进行替换,提高了程序转换的效率。
第二方面,本申请提供一种程序转换装置,包括:
获取模块,用于获取待转换的程序,所述待转换的程序在运行时会调用第一文件中的危险函数,所述危险函数为存在安全漏洞的函数;
转换模块,用于将所述待转换的程序中的第一包含语句修改为第二包含语句,得到转换后的程序;其中,所述第一包含语句用于指示在程序中包含所述第一文件,所述第二包含语句用于指示在程序中包含第二文件,所述转换后的程序在运行时会调用所述第二文件中的安全函数,所述安全函数是对所述危险函数中的安全漏洞进行处理后的函数。
一种可能的实现方式中,所述转换模块还用于:
获取所述待转换的程序中的所述第一包含语句;
根据所述第一包含语句指示的被包含的第一文件,获取与所述第一文件对应的第二文件的路径;
根据所述第二文件的路径,生成所述第二包含语句。
一种可能的实现方式中,所述转换模块具体用于:
根据包含语句对应的关键字,获取所述待转换的程序中的每个包含语句;
针对每个所述包含语句,获取所述包含语句指示的被包含文件的名称,根据所述被包含文件的名称,确定所述包含语句是否为第一包含语句。
一种可能的实现方式中,所述待转换的程序中还包括调用语句,所述调用语句用于指示调用所述危险函数;所述装置还包括修正模块,用于:
获取所述转换后的程序中的所述调用语句;
根据所述第二包含语句指示的被包含的第二文件,以及所述调用语句所指示调用的危险函数,将所述转换后的程序中的所述调用语句替换为与所述危险函数对应的安全函数,得到函数替换后的程序;
根据所述函数替换后的程序,对所述转换后的程序中的语句进行修正。
一种可能的实现方式中,所述修正模块具体用于:
根据所述函数替换后的程序,确定所述转换后的程序中的所述第二包含语句指示的被包含的第二文件是否被正确包含;
若确定未被正确包含,则根据所述被包含的第二文件的路径信息,对所述转换后的程序中的第二包含语句进行修正。
一种可能的实现方式中,所述修正模块具体用于:
根据所述函数替换后的程序,确定所述转换后的程序中的所述调用语句是否正确调用所述安全函数;
若确定未正确调用所述安全函数,则根据所述安全函数的定义,对所述转换后的程序中的调用语句进行修正。
一种可能的实现方式中,所述修正模块还用于:
根据所述修正的内容,生成所述修正对应的日志信息;
将修正后的所述转换后的程序以及所述日志信息进行输出。
一种可能的实现方式中,所述第一文件为标准函数库中的标准文件,所述危险函数为所述标准文件中的标准函数;所述安全函数与所述标准函数的定义相同。
第三方面,本申请提供一种程序转换设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行如第一方面任一项所述的方法。
第四方面,本申请提供一种存储有计算机程序的非瞬时计算机可读存储介质,所述计算机程序用于使所述计算机执行如第一方面任一项所述的方法。
本申请提供的程序转换方法、装置及设备,该方法包括:获取待转换的程序,所述待转换的程序在运行时会调用第一文件中的危险函数,所述危险函数为存在安全漏洞的函数;将所述待转换的程序中的第一包含语句修改为第二包含语句,得到转换后的程序,使得所述转换后的程序在运行时会调用所述第二文件中的安全函数,所述安全函数是对所述危险函数中的安全漏洞进行处理后的函数;通过上述过程,实现了从源码层面解决了程序中的安全漏洞的问题,保证了程序运行的安全性,能够避免程序被黑客攻击;进一步的,由于只需要对程序中的包含语句进行修改,无需对程序中的各个危险函数进行逐个替换,提高了程序转换的效率。
上述可选方式所具有的其他效果将在下文中结合具体实施例加以说明。
附图说明
附图用于更好地理解本方案,不构成对本申请的限定。其中:
图1为本申请实施例的场景示意图;
图2为本申请一个实施例提供的程序转换方法的流程示意图;
图3为本申请一个实施例提供的程序转换方法的流程示意图;
图4为本申请一个实施例提供的程序转换方法的流程示意图;
图5为本申请一个实施例提供的程序转换装置的结构示意图;
图6为本申请一个实施例提供的程序转换装置的结构示意图;
图7为本申请实施例提供的程序转换设备的框图。
具体实施方式
以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1为本申请实施例的场景示意图。如图1所示,本申请实施例提供的程序转换方法由程序转换装置执行。其中程序转换装置可以为软件和/或硬件的形式。程序转换装置可用于对程序进行转换。
参见图1,程序转换装置可以将危险程序转换为安全程序。结合图1,将危险程序输入至程序转换装置中,程序转换装置输出该危险程序对应的安全程序。该程序转换装置可以设置于程序转换设备中。将执行该程序的电子设备称为程序执行设备。可以理解的,程序转换设备与程序执行设备可以为同一设备,还可以为不同的设备,本实施例对此不作限定。
其中,本申请实施例中,将存在安全漏洞的函数称为危险函数,将不存在安全漏洞的函数称为安全函数。将调用危险函数的程序称为危险程序,将调用的函数均为安全函数的程序称为安全程序。
需要说明的是,本申请实施例中,程序也可以称为计算机程序(ComputerProgram),是指一组计算机能够识别和执行的指令。程序可以为任意的计算机程序设计语言编写的程序,包括但不限于:C语言、C++语言、Java语言、PHP语言等。
通常,每种计算机程序设计语言,都提供函数调用机制。也就是说,任何程序设计语言编写的程序中都可以调用一系列函数,这些函数可以是程序设计语言提供的标准函数库中的标准函数,还可以是用户编写的自定义函数。
其中,标准函数是指程序设计语言为了方便用户使用而提供的一些公共接口函数。例如:输入输出函数、数学函数、字符串函数、分类函数、时间日期函数等。这些标准函数被存放在标准文件中,形成标准函数库。当用户编写程序时,需要调用某个标准函数时,只需要在程序中将该标准函数对应的标准文件包含进来即可。
然而,任何程序设计语言编写的函数都可能会存在安全漏洞,这些存在安全漏洞的函数被程序调用,会给程序的运行带来风险,使得程序容易导致外部黑客的攻击。
需要说明的是,本申请实施例中,危险函数可以是标准函数库中提供的标准函数,也可以是由编程人员经过编码得到的自定义函数,本申请对此不作具体限定,只要是存在安全漏洞的函数均可以称为危险函数。为了描述方面,后续实施例中进行举例说明时,以危险函数为存在安全漏洞的标准函数为例进行描述。
下面结合表1和表2对本申请实施例中的危险函数和安全函数进行示例性说明。
表1
表1为本申请实施例提供的一个危险函数的示意,以PHP语言的exec()函数来举例说明。exec()函数的功能是执行一个外部程序,exec()函数的定义为:
exec(string$command[,array&output[,int&$return_var]]):string
如表1所示,exec()函数包括三个参数,分别为$command、&output、&$return_var。其中,$command可能为导致安全漏洞的指令或者参数。当$command为导致安全漏洞的指令或者参数时,会导致exec执行异常。因此,表1中的exec()函数为危险函数。若在程序中调用该exec()函数,会使得程序存在安全漏洞。
本申请实施例中,针对表1中的exec()函数进行重写,以得到其对应的安全函数。具体的,在exec()函数的函数体中,对上述漏洞进行安全处理。示例性的,对$command进行安全处理,当$command为导致安全漏洞的指令或参数时,对其进行安全转码,以保证参数$command的安全性。
表2
表2为本申请实施例提供的一个函数的示例,示例的为PHP语言的escapeshellarg()函数。作为一种可能的实现方式,可以在重写的exec()函数内部使用escapeshellarg()函数对参数$command进行安全转码。由于重写后的exec()函数中的参数$command不再存在安全漏洞,因此,重写后的exec()函数是安全的,称为安全函数。
可以理解的,针对每个存在安全漏洞的危险函数,均可以通过对该危险函数进行重写,并在重写的函数中对安全漏洞进行相应的安全处理,以解决安全漏洞的问题,使得重写后的函数为安全函数。这样,针对每个危险函数,都可以对应重写出一个安全函数。其中,安全函数所实现的功能与危险函数相同。这样,将程序中危险函数替换为安全函数之后,保证调用安全函数可以达到与调用危险函数相同的功能,不影响程序的功能和性能。
通常,每种程序设计语言在编写程序时,可以调用外部文件中的函数。当需要调用某个外部文件中的函数时,只需要在程序中使用包含语句将该外部文件包含进来即可。针对不同的程序设计语言,所使用的包含语句可能不同。以C语言为例,假设程序需要调用标准文件stdio.h中的标准函数时,直接使用include语句将该标准文件包含进来即可,例如:include<stdio.h>。以PHP语言为例,对应的包含语句为require或者require_once。
一种可能的实现方式中,针对每个危险函数进行重写,将重写后的安全函数存放入安全文件中。这样,编程人员在编写程序时,可以直接使用包含语句将安全文件包含进来,使得程序运行时调用的是安全文件中的安全函数。或者,针对已编写好的程序,通过对包含语句进行替换,以使包含语句包含的是安全文件,使得程序运行时调用的是安全文件中的安全函数。
一种可能的实现方式中,重写的安全函数与其对应的危险函数的定义相同。示例性的,以表1为例,对表1中的exec()函数进行重写后的安全函数的定义依然为:
exec(string$command[,array&output[,int&$return_var]]):string
这样在对调用exec函数的程序进行转换时,只需要对包含语句进行替换,使得包含语句包含的是安全文件,无需分别对每个危险函数进行替换,能够提高程序转换的效率。
图2为本申请一个实施例提供的程序转换方法的流程示意图。本实施例的方法,可以由图1中的转换装置执行。如图2所示,本实施例的方法,包括:
S201:获取待转换的程序,所述待转换的程序在运行时会调用第一文件中的危险函数,所述危险函数为存在安全漏洞的函数。
其中,待转换的程序可以为任意的程序设计语言编写的程序。可选的,第一文件可以为该程序对应的程序设计语言提供的标准函数库中的标准文件,相应的,危险函数为标准文件中的标准函数。可选的,第一文件还可以为自定义函数库对应的自定义文件,相应的,危险函数为自定义文件中的自定义函数。
S202:将所述待转换的程序中的第一包含语句修改为第二包含语句,得到转换后的程序;其中,所述第一包含语句用于指示在程序中包含所述第一文件,所述第二包含语句用于指示在程序中包含第二文件,所述转换后的程序在运行时会调用所述第二文件中的安全函数,所述安全函数是对所述危险函数中的安全漏洞进行处理后的函数。
本实施例中,第二文件是用于存放安全函数的文件。第二文件中存放的是对各危险函数进行重写,以对危险函数中的安全漏洞进行处理后的安全函数。其中,第一文件和第二文件之间具有对应关系,可以是一个第一文件对应一个第二文件,也可以是多个第一文件对应一个第二文件,当然,还可以是多个第一文件对应一个第二文件。
示例性的,以PHP语言为例,假设程序中需要调用了标准文件PHP.php中的危险函数exec(),则程序中包括的第一包含语句为:
require_once'./includes/PHP.php';
这样,程序在编译运行时,会加载PHP.php文件中的函数,使得exec()函数可以被正确调用。
本实施例中,由于exec()函数存在安全漏洞,为了保证程序的安全性,可以通过对程序进行转换,使得上述程序转换为安全程序。在进行程序转换时,将上述的第一包含语句修改为如下的第二包含语句:
require_once'./includes/SafeSDKPHP.php';
其中,SafeSDKPHP.php是与第一文件PHP.php对应的第二文件。SafeSDKPHP.php文件中包括了重写的安全函数exec()。
这样,经过上述程序转换之后,由于转换后的程序中包含语句指示的是包含安全文件SafeSDKPHP.php,因此,当转换后的程序被运行时,实际调用的是安全文件SafeSDKPHP.php中的exec()函数。也就是说,实际调用的是安全函数。因此,转换后的程序从源码层面解决了安全漏洞的问题,保证了程序运行的安全性,能够避免程序被黑客攻击。
图3为本申请一个实施例提供的程序转换方法的流程示意图。本实施例的方法可以作为图2所示实施例中的S202的一种可能的实施方式。如图3所示,本实施例的方法包括:
S2021:获取所述待转换的程序中的所述第一包含语句。
一种可能的方式中,根据包含语句对应的关键字,获取所述待转换的程序中的每个包含语句,针对每个所述包含语句,获取所述包含语句指示的被包含文件的名称,根据所述被包含文件的名称,确定所述包含语句是否为第一包含语句。
示例性的,以C语言为例,可以在程序中检测include关键字,从而找到程序中的包含语句。以PHP语言为例,可以在程序中检测require关键字,从而找到程序中的包含语句。可以理解的,每个程序中可以包括一个或者多个包含语句。
针对找到的每个包含语句,获取关键字之后的被包含文件的名称,可以根据被包含文件的名称确定该被包含文件中是否存在危险函数,若确定被包含文件中存在危险函数,则确定该包含语句为第一包含语句。可选的,还根据被包含文件的名称确定该被包含文件是否为安全文件,若是安全文件,则确定该包含语句不是第一包含语句。示例性的,安全文件可以采用预设规则进行命名,从而可以通过判断被包含文件的名称是否满足预设规则来确定是否为安全文件。或者,将所有安全文件的命名存储在一个列表中,可以通过将被包含文件的名称与该列表中的各安全文件的名称进行匹配,确定该被包含文件是否为安全文件。
S2022:根据所述第一包含语句指示的被包含的第一文件,获取与所述第一文件对应的第二文件的路径。
确定当前包含语句为第一包含语句之后,根据该包含语句指示的第一文件的名称(即被包含文件的名称),确定出与第一文件对应的第二文件的路径。示例性的,可以事先针对第一文件的名称和第二文件的路径之间的对应关系进行记录,从而可以根据第一文件的名称以及该对应关系,确定出第二文件的路径。
S2023:根据所述第二文件的路径,生成所述第二包含语句。
示例性的,按照该程序对应的程序设计语言的语法规则,将包含语句的关键字与所述第二文件的路径进行拼接,生成第二包含语句。例如:第二文件的路径为./includes/SafeSDKPHP.php,则生成的第二包含语句为:
require_once'./includes/SafeSDKPHP.php';
本申请实施例提供的程序转换方法,包括获取待转换的程序,所述程序在运行时会调用第一文件中的危险函数,所述危险函数为存在安全漏洞的函数;将所述程序中的第一包含语句修改为第二包含语句,得到转换后的程序,使得所述转换后的程序在运行时会调用所述第二文件中的安全函数,所述安全函数是对所述危险函数中的安全漏洞进行处理后的函数;通过上述过程,实现了从源码层面解决了程序中的安全漏洞的问题,保证了程序运行的安全性,能够避免程序被黑客攻击;进一步的,由于只需要对程序中的包含语句进行修改,无需对程序中的各个危险函数进行逐个替换,提高了程序转换的效率。
图4为本申请一个实施例提供的程序转换方法的流程示意图。如图4所示,本实施例的方法包括:
S401:获取待转换的程序,所述待转换的程序在运行时会调用第一文件中的危险函数,所述危险函数为存在安全漏洞的函数。
S402:将所述待转换的程序中的第一包含语句修改为第二包含语句,得到转换后的程序;其中,所述第一包含语句用于指示在程序中包含所述第一文件,所述第二包含语句用于指示在程序中包含第二文件。
本实施例中,S401和S402的具体实施方式与图2所示实施例类似,此处不再赘述。
S403:获取所述转换后的程序中的调用语句,根据所述第二包含语句指示的被包含的第二文件,以及所述调用语句所指示调用的危险函数,将所述转换后的程序中的所述调用语句替换为与所述危险函数对应的安全函数,得到函数替换后的程序。
S404:根据所述函数替换后的程序,确定所述转换后的程序中的所述第二包含语句指示的被包含的第二文件是否被正确包含。
S405:若确定未被正确包含,则根据所述被包含的第二文件的路径信息,对所述转换后的程序中的第二包含语句进行修正;并根据所述修正的内容,生成所述修正对应的日志信息。
S406:根据所述函数替换后的程序,确定所述转换后的程序中的所述调用语句是否正确调用所述安全函数。
S407:若确定未正确调用所述安全函数,则根据所述安全函数的定义,对所述转换后的程序中的调用语句进行修正;并根据所述修正的内容,生成所述修正对应的日志信息。
S408:将经过修正的所述转换后的程序以及所述日志信息进行输出。
可以理解的,图2所示实施例中,将第一包含语句修改为第二包含语句之后,转换后的程序在运行过程中有可能会出现一些错误。例如:第二包含语句指示的被包含文件(安全文件)的路径错误,导致无法加载该被包含文件;调用语句无法成功调用安全函数,等等问题。本申请实施例中,S403至S408是对转换后的程序的正确性进行检验和修正的过程,以保证转换后的程序能够被正确运行。
其中,S403中,对转换后的程序进行替换处理,其中替换处理的过程与程序的解析过程或者编译过程类似,即,将包含语句替换为被包含文件,将调用语句替换为被调用的安全函数,得到替换处理后的程序。
进而,根据S404和S405对转换后的程序中的包含语句进行正确性检查。示例性的,若根据替换后的程序确定转换后的程序中包含语句指示的被包含文件未被正确包含,则可能是在S402中对包含语句进行修改时,修改后的被包含文件的路径或者名称错误。因此,可以对转换后的程序中的包含语句进行修正。
根据S406和S407对转换后的程序中的调用语句进行正确性检查。示例性的,若根据替换后的程序确定转换后的程序中调用语句指示的被调用安全函数未被正确调用,则根据所述安全函数的定义,对所述转换后的程序中的调用语句进行修正。
可选的,在S405和S407中对转换后的程序中的语句进行修正之后,可以根据修正内容生成日志信息,以便用户根据日志信息可以确定出程序中的哪些语句被修改过。
需要说明的是,本实施例中,对S404-S405与S406-S407的执行顺序不作具体限定,可以先执行S404-S405,还可以先执行S406-S407。
本实施例中,经过S403至S407的检验和修正过程之后,使得S408中输出的转换后的程序是能够被正确运行的程序,即,保证了程序转换的正确性。
图5为本申请一个实施例提供的程序转换装置的结构示意图。如图5所示,本实施例提供的程序转换装置500,包括:获取模块501和转换模块502。
其中,获取模块501,用于获取待转换的程序,所述程序在运行时会调用第一文件中的危险函数,所述危险函数为存在安全漏洞的函数;
转换模块502,用于将所述程序中的第一包含语句修改为第二包含语句,得到转换后的程序;其中,所述第一包含语句用于指示在程序中包含所述第一文件,所述第二包含语句用于指示在程序中包含第二文件,所述转换后的程序在运行时会调用所述第二文件中的安全函数,所述安全函数是对所述危险函数中的安全漏洞进行处理后的函数。
一种可能的实现方式中,所述转换模块502还用于:
获取所述程序中的所述第一包含语句;
根据所述第一包含语句指示的被包含的第一文件,获取与所述第一文件对应的第二文件的路径;
根据所述第二文件的路径,生成所述第二包含语句。
一种可能的实现方式中,所述转换模块502具体用于:
根据包含语句对应的关键字,获取所述程序中的每个包含语句;
针对每个所述包含语句,获取所述包含语句指示的被包含文件的名称,根据所述被包含文件的名称,确定所述包含语句是否为第一包含语句。
本实施例提供的程序转换装置,可用于执行上述图2或图3所示的方法实施例,其实现原理和技术效果类似,此处不再赘述。
图6为本申请一个实施例提供的程序转换装置的结构示意图。如图6所示,在图5所示实施例的基础上,本实施例提供的程序转换装置500,还可以包括:修正模块503。
一种可能的实现方式中,所述待转换的程序中还包括调用语句,所述调用语句用于指示调用所述危险函数;所述修正模块503,用于:
获取所述转换后的程序中的所述调用语句;
根据所述第二包含语句指示的被包含的第二文件,以及所述调用语句所指示调用的危险函数,将所述转换后的程序中的所述调用语句替换为与所述危险函数对应的安全函数,得到函数替换后的程序;
根据所述函数替换后的程序,对所述转换后的程序中的语句进行修正。
一种可能的实现方式中,所述修正模块503具体用于:
根据所述函数替换后的程序,确定所述转换后的程序中的所述第二包含语句指示的被包含的第二文件是否被正确包含;
若确定未被正确包含,则根据所述被包含的第二文件的路径信息,对所述转换后的程序中的第二包含语句进行修正。
一种可能的实现方式中,所述修正模块503具体用于:
根据所述函数替换后的程序,确定所述转换后的程序中的所述调用语句是否正确调用所述安全函数;
若确定未正确调用所述安全函数,则根据所述安全函数的定义,对所述转换后的程序中的调用语句进行修正。
一种可能的实现方式中,所述修正模块503还用于:
根据所述修正的内容,生成所述修正对应的日志信息;
将修正后的所述转换后的程序以及所述日志信息进行输出。
一种可能的实现方式中,所述第一文件为标准函数库中的标准文件,所述危险函数为所述标准文件中的标准函数;所述安全函数与所述标准函数的定义相同。
本实施例提供的程序转换装置,可用于执行上述任一方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
根据本申请的实施例,本申请还提供了一种程序转换设备和一种可读存储介质。
图7为本申请实施例提供的程序转换设备的框图。程序转换设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。程序转换设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本申请的实现。
如图7所示,该程序转换设备包括:一个或多个处理器701、存储器702,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线705互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在程序转换设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示GUI的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个程序转换设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图7中以一个处理器701为例。
存储器702即为本申请所提供的非瞬时计算机可读存储介质。其中,所述存储器存储有可由至少一个处理器执行的计算机程序,以使所述至少一个处理器执行本申请所提供的程序转换方法。本申请的非瞬时计算机可读存储介质存储计算机程序,该计算机程序用于使计算机执行本申请所提供的程序转换方法。
存储器702作为一种非瞬时计算机可读存储介质,可用于存储非瞬时软件程序、非瞬时计算机可执行程序以及模块,如本申请实施例中的程序转换方法对应的程序指令/模块(例如,附图5、附图6所示的获取模块501、转换模块502和修正模块503)。处理器701通过运行存储在存储器702中的非瞬时软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的程序转换方法。
存储器702可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据程序转换设备的使用所创建的数据等。此外,存储器702可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施例中,存储器702可选包括相对于处理器701远程设置的存储器,这些远程存储器可以通过网络连接至程序转换设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
程序转换设备还可以包括:输入装置703和输出装置704。处理器701、存储器702、输入装置703和输出装置704可以通过总线705或者其他方式连接,图7中以通过总线705连接为例。
输入装置703可接收输入的数字或字符信息,以及产生与程序转换设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等输入装置。输出装置704可以包括显示设备、辅助照明装置(例如,LED)和触觉反馈装置(例如,振动电机)等。该显示设备可以包括但不限于,液晶显示器(LCD)、发光二极管(LED)显示器和等离子体显示器。在一些实施方式中,显示设备可以是触摸屏。
此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、专用ASIC(专用集成电路)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
这些计算程序(也称作程序、软件、软件应用、或者代码)包括可编程处理器的机器指令,并且可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。如本文使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(PLD)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
根据本申请实施例的技术方案,获取待转换的程序,所述程序在运行时会调用第一文件中的危险函数,所述危险函数为存在安全漏洞的函数;将所述程序中的第一包含语句修改为第二包含语句,得到转换后的程序,使得所述转换后的程序在运行时会调用所述第二文件中的安全函数,所述安全函数是对所述危险函数中的安全漏洞进行处理后的函数;通过上述过程,实现了从源码层面解决了程序中的安全漏洞的问题,保证了程序运行的安全性,能够避免程序被黑客攻击;进一步的,由于只需要对程序中的包含语句进行修改,无需对程序中的各个危险函数进行逐个替换,提高了程序转换的效率。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。

Claims (18)

1.一种程序转换方法,其特征在于,包括:
获取待转换的程序,所述待转换的程序在运行时会调用第一文件中的危险函数,所述危险函数为存在安全漏洞的函数;
将所述待转换的程序中的第一包含语句修改为第二包含语句,得到转换后的程序;其中,所述第一包含语句用于指示在程序中包含所述第一文件,所述第二包含语句用于指示在程序中包含第二文件,所述转换后的程序在运行时会调用所述第二文件中的安全函数,所述安全函数是对所述危险函数中的安全漏洞进行处理后的函数。
2.根据权利要求1所述的方法,其特征在于,所述将所述待转换的程序中第一包含语句修改为第二包含语句之前,还包括:
获取所述待转换的程序中的所述第一包含语句;
根据所述第一包含语句指示的被包含的第一文件,获取与所述第一文件对应的第二文件的路径;
根据所述第二文件的路径,生成所述第二包含语句。
3.根据权利要求2所述的方法,其特征在于,所述获取所述待转换的程序中的所述第一包含语句,包括:
根据包含语句对应的关键字,获取所述待转换的程序中的每个包含语句;
针对每个所述包含语句,获取所述包含语句指示的被包含文件的名称,根据所述被包含文件的名称,确定所述包含语句是否为第一包含语句。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述待转换的程序中还包括调用语句,所述调用语句用于指示调用所述危险函数;所述得到转换后的程序之后,还包括:
获取所述转换后的程序中的所述调用语句;
根据所述第二包含语句指示的被包含的第二文件,以及所述调用语句所指示调用的危险函数,将所述转换后的程序中的所述调用语句替换为与所述危险函数对应的安全函数,得到函数替换后的程序;
根据所述函数替换后的程序,对所述转换后的程序中的语句进行修正。
5.根据权利要求4所述的方法,其特征在于,所述根据所述函数替换后的程序,对所述转换后的程序中的语句进行修正,包括:
根据所述函数替换后的程序,确定所述转换后的程序中的所述第二包含语句指示的被包含的第二文件是否被正确包含;
若确定未被正确包含,则根据所述被包含的第二文件的路径信息,对所述转换后的程序中的第二包含语句进行修正。
6.根据权利要求4所述的方法,其特征在于,所述根据所述函数替换后的程序,对所述转换后的程序中的语句进行修正,包括:
根据所述函数替换后的程序,确定所述转换后的程序中的所述调用语句是否正确调用所述安全函数;
若确定未正确调用所述安全函数,则根据所述安全函数的定义,对所述转换后的程序中的调用语句进行修正。
7.根据权利要求5或6所述的方法,其特征在于,对所述转换后的程序中的语句进行修正之后,还包括:
根据所述修正的内容,生成所述修正对应的日志信息;
将修正后的所述转换后的程序以及所述日志信息进行输出。
8.根据权利要求1至3任一项所述的方法,其特征在于,所述第一文件为标准函数库中的标准文件,所述危险函数为所述标准文件中的标准函数;所述安全函数与所述标准函数的定义相同。
9.一种程序转换装置,其特征在于,包括:
获取模块,用于获取待转换的程序,所述待转换的程序在运行时会调用第一文件中的危险函数,所述危险函数为存在安全漏洞的函数;
转换模块,用于将所述待转换的程序中的第一包含语句修改为第二包含语句,得到转换后的程序;其中,所述第一包含语句用于指示在程序中包含所述第一文件,所述第二包含语句用于指示在程序中包含第二文件,所述转换后的程序在运行时会调用所述第二文件中的安全函数,所述安全函数是对所述危险函数中的安全漏洞进行处理后的函数。
10.根据权利要求9所述的装置,其特征在于,所述转换模块还用于:
获取所述待转换的程序中的所述第一包含语句;
根据所述第一包含语句指示的被包含的第一文件,获取与所述第一文件对应的第二文件的路径;
根据所述第二文件的路径,生成所述第二包含语句。
11.根据权利要求10所述的装置,其特征在于,所述转换模块具体用于:
根据包含语句对应的关键字,获取所述待转换的程序中的每个包含语句;
针对每个所述包含语句,获取所述包含语句指示的被包含文件的名称,根据所述被包含文件的名称,确定所述包含语句是否为第一包含语句。
12.根据权利要求9至11任一项所述的装置,其特征在于,所述待转换的程序中还包括调用语句,所述调用语句用于指示调用所述危险函数;所述装置还包括修正模块,用于:
获取所述转换后的程序中的所述调用语句;
根据所述第二包含语句指示的被包含的第二文件,以及所述调用语句所指示调用的危险函数,将所述转换后的程序中的所述调用语句替换为与所述危险函数对应的安全函数,得到函数替换后的程序;
根据所述函数替换后的程序,对所述转换后的程序中的语句进行修正。
13.根据权利要求12所述的装置,其特征在于,所述修正模块具体用于:
根据所述函数替换后的程序,确定所述转换后的程序中的所述第二包含语句指示的被包含的第二文件是否被正确包含;
若确定未被正确包含,则根据所述被包含的第二文件的路径信息,对所述转换后的程序中的第二包含语句进行修正。
14.根据权利要求12所述的装置,其特征在于,所述修正模块具体用于:
根据所述函数替换后的程序,确定所述转换后的程序中的所述调用语句是否正确调用所述安全函数;
若确定未正确调用所述安全函数,则根据所述安全函数的定义,对所述转换后的程序中的调用语句进行修正。
15.根据权利要求13或14所述的装置,其特征在于,所述修正模块还用于:
根据所述修正的内容,生成所述修正对应的日志信息;
将修正后的所述转换后的程序以及所述日志信息进行输出。
16.根据权利要求9至11任一项所述的装置,其特征在于,所述第一文件为标准函数库中的标准文件,所述危险函数为所述标准文件中的标准函数;所述安全函数与所述标准函数的定义相同。
17.一种程序转换设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至8中任一项所述的方法。
18.一种存储有计算机程序的非瞬时计算机可读存储介质,其特征在于,所述计算机程序用于使所述计算机执行如权利要求1至8中任一项所述的方法。
CN201910773628.8A 2019-08-21 2019-08-21 程序转换方法、装置及设备 Active CN110471662B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910773628.8A CN110471662B (zh) 2019-08-21 2019-08-21 程序转换方法、装置及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910773628.8A CN110471662B (zh) 2019-08-21 2019-08-21 程序转换方法、装置及设备

Publications (2)

Publication Number Publication Date
CN110471662A true CN110471662A (zh) 2019-11-19
CN110471662B CN110471662B (zh) 2023-04-25

Family

ID=68513151

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910773628.8A Active CN110471662B (zh) 2019-08-21 2019-08-21 程序转换方法、装置及设备

Country Status (1)

Country Link
CN (1) CN110471662B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112100620A (zh) * 2020-09-04 2020-12-18 百度在线网络技术(北京)有限公司 代码安全检测方法、装置、设备和可读存储介质

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080250231A1 (en) * 2007-04-03 2008-10-09 Kabushiki Kaisha Toshiba Program code conversion apparatus, program code conversion method and recording medium
CN101482847A (zh) * 2009-01-19 2009-07-15 北京邮电大学 一种基于安全漏洞缺陷模式的检测方法
CN102567200A (zh) * 2011-12-14 2012-07-11 北京航空航天大学 基于函数调用图的并行化安全漏洞检测方法
US20150020205A1 (en) * 2013-07-15 2015-01-15 Tencent Technology (Shenzhen) Company Limited Method and apparatus for detecting security vulnerability for animation source file
CN105809039A (zh) * 2016-03-04 2016-07-27 南京大学 缓冲区溢出漏洞自动修复方法
CN106295348A (zh) * 2015-05-29 2017-01-04 阿里巴巴集团控股有限公司 应用程序的漏洞检测方法及装置
CN108460254A (zh) * 2018-03-13 2018-08-28 北京顶象技术有限公司 固件保护方法及装置
CN108985017A (zh) * 2018-09-26 2018-12-11 北京京东金融科技控股有限公司 应用程序的加固方法和装置
CN109032687A (zh) * 2018-06-11 2018-12-18 北京奇艺世纪科技有限公司 屏蔽sdk危险调用的方法及装置
US10303517B1 (en) * 2016-01-28 2019-05-28 BrainFights, Inc. Automated evaluation of computer programming

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080250231A1 (en) * 2007-04-03 2008-10-09 Kabushiki Kaisha Toshiba Program code conversion apparatus, program code conversion method and recording medium
CN101482847A (zh) * 2009-01-19 2009-07-15 北京邮电大学 一种基于安全漏洞缺陷模式的检测方法
CN102567200A (zh) * 2011-12-14 2012-07-11 北京航空航天大学 基于函数调用图的并行化安全漏洞检测方法
US20150020205A1 (en) * 2013-07-15 2015-01-15 Tencent Technology (Shenzhen) Company Limited Method and apparatus for detecting security vulnerability for animation source file
CN106295348A (zh) * 2015-05-29 2017-01-04 阿里巴巴集团控股有限公司 应用程序的漏洞检测方法及装置
US10303517B1 (en) * 2016-01-28 2019-05-28 BrainFights, Inc. Automated evaluation of computer programming
CN105809039A (zh) * 2016-03-04 2016-07-27 南京大学 缓冲区溢出漏洞自动修复方法
CN108460254A (zh) * 2018-03-13 2018-08-28 北京顶象技术有限公司 固件保护方法及装置
CN109032687A (zh) * 2018-06-11 2018-12-18 北京奇艺世纪科技有限公司 屏蔽sdk危险调用的方法及装置
CN108985017A (zh) * 2018-09-26 2018-12-11 北京京东金融科技控股有限公司 应用程序的加固方法和装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
GEUNSEOK YANG 等: "Applying Genetic Programming with Similar Bug Fix Information to Automatic Fault Repair", 《SYMMETRY》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112100620A (zh) * 2020-09-04 2020-12-18 百度在线网络技术(北京)有限公司 代码安全检测方法、装置、设备和可读存储介质
CN112100620B (zh) * 2020-09-04 2024-02-06 百度在线网络技术(北京)有限公司 代码安全检测方法、装置、设备和可读存储介质

Also Published As

Publication number Publication date
CN110471662B (zh) 2023-04-25

Similar Documents

Publication Publication Date Title
US10169034B2 (en) Verification of backward compatibility of software components
US10684849B2 (en) Automating generation of library suggestion engine models
US20200192662A1 (en) Semantic-aware and self-corrective re-architecting system
US8381175B2 (en) Low-level code rewriter verification
US8434062B2 (en) Enhancing source code debugging and readability using visual symbols
US9201757B2 (en) Offline type checking in programming languages
US20070271617A1 (en) Vulnerability check program, vulnerability check apparatus, and vulnerability check method
Bisht Robot framework test automation
CN103577168A (zh) 测试用例创建系统及方法
US9311077B2 (en) Identification of code changes using language syntax and changeset data
US20150074045A1 (en) Business Rule Management System
CN104572463A (zh) 测试接口信息的方法及装置
CN109446096B (zh) 一种智能合约调试方法、装置及其存储介质
US8225286B2 (en) Debugging interpreted input
US9223984B2 (en) After-the-fact configuration of static analysis tools able to reduce user burden
US9715372B2 (en) Executable guidance experiences based on implicitly generated guidance models
CN116028028A (zh) 请求函数生成方法、装置、设备及存储介质
Spinellis Effective debugging: 66 specific ways to debug software and systems
US20150120682A1 (en) Automated recognition of patterns in a log file having unknown grammar
CN110471662A (zh) 程序转换方法、装置及设备
CN115022312A (zh) 多智能合约引擎的实现方法、装置、电子设备及存储介质
US9542182B2 (en) Standardization of variable names in an integrated development environment
US11893381B1 (en) Digital processing systems and methods for reducing file bundle sizes
JP6011712B2 (ja) 修正管理装置、修正管理方法、及び修正管理プログラム
CN116257286B (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
GR01 Patent grant
GR01 Patent grant