CN109598107B - 一种基于应用安装包文件的代码转换方法及装置 - Google Patents

一种基于应用安装包文件的代码转换方法及装置 Download PDF

Info

Publication number
CN109598107B
CN109598107B CN201811426377.8A CN201811426377A CN109598107B CN 109598107 B CN109598107 B CN 109598107B CN 201811426377 A CN201811426377 A CN 201811426377A CN 109598107 B CN109598107 B CN 109598107B
Authority
CN
China
Prior art keywords
code
file
processing
conversion
specified format
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
Application number
CN201811426377.8A
Other languages
English (en)
Other versions
CN109598107A (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.)
JIANGSU PAY EGIS TECHNOLOGY Co.,Ltd.
JIANGSU TONGFUDUN INFORMATION SECURITY TECHNOLOGY Co.,Ltd.
Original Assignee
Jiangsu Pay Egis Technology Co ltd
Jiangsu Tongfudun Information Security 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 Jiangsu Pay Egis Technology Co ltd, Jiangsu Tongfudun Information Security Technology Co ltd filed Critical Jiangsu Pay Egis Technology Co ltd
Publication of CN109598107A publication Critical patent/CN109598107A/zh
Application granted granted Critical
Publication of CN109598107B publication Critical patent/CN109598107B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6209Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself

Abstract

本发明公开了一种基于应用安装包文件的代码转换方法及装置。其中,方法包括:对应用安装包文件进行反编译,得到抽象语法树;按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;按照预设的加密规则对转换代码进行加密处理,得到加密转换代码;针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码;根据加密转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件。该方式通过将应用安装包文件中待保护代码进行转换,将待保护代码转换为难以被反编译的形式的代码,并对转换得到的代码进行加密,增加了反编译的难度以及复杂度,提升了应用的安全性。

Description

一种基于应用安装包文件的代码转换方法及装置
技术领域
本发明涉及计算机技术领域,具体涉及一种基于应用安装包文件的代码转换方法及装置。
背景技术
目前,移动应用的种类和功能越来越繁多,随着科技的发展,编写的代码、数据以及应用等越来越容易被黑客恶意攻破,因此,保证用户所使用的应用安全成为使用应用时面临的最大问题。现有技术中,在不破坏应用的情况下,往往可以采取针对打包好的应用安装包文件进行加固保护,在一定的程度上防止编写完成的代码被反编译分析,保障源码的安全,进而保障应用的安全。
但是,上述现有技术存在如下不足:现有的移动应用大多数都是采用Java语言进行编译,采用上述现有技术在对移动应用进行加固保护时,往往在待保护应用的Java层进行加密保护,但是反编译工具很容易对Java层的语言进行反编译,从而不能有效地保障应用的安全。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的基于应用安装包文件的代码转换方法。
根据本发明的一个方面,提供了一种基于应用安装包文件的代码转换方法,方法包括:对应用安装包文件进行反编译,得到抽象语法树;按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;按照预设的加密规则对转换代码进行加密处理,得到加密转换代码;针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码;根据加密转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,按照预设的加密规则对转换代码进行加密处理,得到加密转换代码的步骤具体包括:按照预设的程序执行顺序在转换代码的相应位置处插入预设加密处理的调用代码,得到第一代码;对第一代码进行编译,在编译得到的文件中将与转换代码相对应的二进制文件提取出来,并将编译得到的文件被提取出二进制文件之后所得到的文件确认为应用编译文件;在运行应用编译文件的过程中,当运行到预设加密处理的调用代码时,根据预设加密处理的处理代码以及二进制文件完成加密处理,根据加密处理结果确定加密转换代码。
可选地,按照预设的加密规则对转换代码进行加密处理,得到加密转换代码的步骤之后,方法进一步包括:预先构建第一指定格式的文件,将加密转换代码写入第一指定格式的文件中;则根据加密转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件进一步包括:根据写入加密转换代码的第一指定格式的文件以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,方法进一步包括:预先构建第二指定格式的文件,将预设加密处理的处理代码存储在第二指定格式的文件中;则当运行到预设加密处理的调用代码时,根据预设加密处理的处理代码以及二进制文件完成加密处理进一步包括:当运行到预设加密处理的调用代码时,跳转至第二指定格式的文件以完成加密处理。
可选地,预设加密处理包括:还原处理、擦除处理;
预先按照预设的程序执行顺序在转换代码的相应位置处插入预设加密处理的调用代码,得到第一代码的步骤进一步包括:在转换代码之前插入还原处理的调用代码,以及在转换代码之后插入擦除处理的调用代码,得到第一代码。
可选地,当运行到预设加密处理的调用代码时,跳转至第二指定格式的文件以完成加密处理的步骤具体包括:当运行到还原处理的调用代码时,跳转至第二指定格式的文件以执行还原处理;或者,当运行到擦除处理的调用代码时,跳转至第二指定格式的文件以执行擦除处理。
可选地,当运行到还原处理的调用代码时,跳转至第二指定格式的文件以执行还原处理的步骤之前,方法进一步包括:将二进制文件放置于还原处理的处理代码中,得到还原处理代码,将还原处理代码进行编译,并将编译得到的文件保存至第二指定格式的文件中。
可选地,跳转至第二指定格式的文件以执行还原处理进一步包括:跳转至第二指定格式的文件以执行将二进制文件恢复至内存区域中相应的位置的步骤。
可选地,跳转至第二指定格式的文件执行还原处理的步骤之前,方法进一步包括:调用系统函数修改内存区域中的内存数据的执行权限。
可选地,跳转至第二指定格式的文件以执行擦除处理进一步包括:跳转至第二指定格式的文件以执行将内存区域中的还原处理所恢复的与转换代码相对应的二进制文件设置为预设数值的步骤。
可选地,在完成擦除处理之后,方法进一步包括:当调用还原处理代码时,执行利用系统函数获取第一代码中调用还原处理代码的返回地址,根据返回地址将还原处理代码中的二进制文件对所对应的预设数值进行替换的步骤。
可选地,根据写入加密转换代码的第一指定格式的文件以及替换后的程序代码打包生成经过代码转换的应用安装包文件进一步包括:在抽象语法树中添加用于加载写入加密转换代码的第一指定格式的文件的静态代码块;根据写入加密转换代码的第一指定格式的文件、添加了静态代码块的抽象语法树以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码的步骤具体包括:针对待保护代码所对应的程序代码,将待保护代码替换为本地代码,并擦除程序代码中待保护代码所对应的方法数据,得到替换后的程序代码。
可选地,按照预设的转换规则对抽象语法树的节点中的内容进行处理的步骤之前,方法进一步包括:根据待保护代码的类型将抽象语法树划分为多个节点。
可选地,当待保护代码的类型为表达式类型时,根据待保护代码的类型将抽象语法树划分为多个节点进一步包括:基于抽象语法树的类型,根据待保护代码中的表达式中的各个变量将抽象语法树划分为多个节点;
或者,当待保护代码的类型为多维数组类型时,根据待保护代码的类型将抽象语法树划分为多个节点进一步包括:根据本地接口将多维数组进行变换,根据变换之后的多维数组将抽象语法树划分为多个节点。
可选地,第一指定格式的文件包括:ELF文件,二指定格式的文件包括:ELF文件。
可选地,对应用安装包文件进行反编译,得到抽象语法树进一步包括:对应用安装包文件进行过滤处理,对过滤后的应用安装包文件进行反编译,得到待保护代码对应的抽象语法树。
根据本发明的另一方面,提供了一种基于应用安装包文件的代码转换装置,装置包括:反编译模块,适于对应用安装包文件进行反编译,得到抽象语法树;代码转换模块,适于按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;加密模块,适于按照预设的加密规则对转换代码进行加密处理,得到加密转换代码;替换处理模块,适于针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码;生成模块,适于根据加密转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,加密模块进一步适于:按照预设的程序执行顺序在转换代码的相应位置处插入预设加密处理的调用代码,得到第一代码;对第一代码进行编译,在编译得到的文件中将与转换代码相对应的二进制文件提取出来,并将编译得到的文件被提取出二进制文件之后所得到的文件确认为应用编译文件;在运行应用编译文件的过程中,当运行到预设加密处理的调用代码时,根据预设加密处理的处理代码以及二进制文件完成加密处理,根据加密处理结果确定加密转换代码。
可选地,装置进一步包括:第一文件构建模块,适于预先构建第一指定格式的文件,将加密转换代码写入第一指定格式的文件中;生成模块进一步适于:根据写入加密转换代码的第一指定格式的文件以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,装置进一步包括:第二文件构建模块,适于预先构建第二指定格式的文件,将预设加密处理的处理代码存储在第二指定格式的文件中;
则加密模块进一步适于:当运行到预设加密处理的调用代码时,跳转至第二指定格式的文件以完成预设加密处理。
可选地,预设加密处理包括:还原处理、擦除处理;
则加密模块进一步适于:在转换代码之前插入还原处理的调用代码,以及在转换代码之后插入擦除处理的调用代码,得到第一代码。
可选地,加密模块进一步适于:当运行到还原处理的调用代码时,跳转至第二指定格式的文件以执行还原处理;或者,当运行到擦除处理的调用代码时,跳转至第二指定格式的文件以执行擦除处理。
可选地,加密模块进一步适于:将二进制文件放置于还原处理的处理代码中,得到还原处理代码,将还原处理代码进行编译,并将编译得到的文件保存至第二指定格式的文件中。
可选地,加密模块进一步适于:跳转至第二指定格式的文件以执行将二进制文件恢复至内存区域中相应的位置的步骤。
可选地,装置进一步包括:权限修改模块,适于调用系统函数修改内存区域中的内存数据的执行权限。
可选地,加密模块进一步适于:跳转至第二指定格式的文件以执行将内存区域中的还原处理所恢复的与转换代码相对应的二进制文件设置为预设数值的步骤。
可选地,装置进一步包括:执行模块,适于在完成擦除处理之后,当调用还原处理代码时,执行利用系统函数获取第一代码中调用还原处理代码的返回地址,根据返回地址将还原处理代码中的二进制文件对所对应的预设数值进行替换的步骤。
可选地,生成模块进一步适于:在抽象语法树中添加用于加载写入加密转换代码的第一指定格式的文件的静态代码块;
根据写入加密转换代码的第一指定格式的文件、添加了静态代码块的抽象语法树以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,替换处理模块进一步适于:针对待保护代码所对应的程序代码,将待保护代码替换为本地代码,并擦除程序代码中待保护代码所对应的方法数据,得到替换后的程序代码。
可选地,代码转换模块进一步适于:根据待保护代码的类型将抽象语法树划分为多个节点。
可选地,当待保护代码的类型为表达式类型时,代码转换模块进一步适于:基于抽象语法树的类型,根据待保护代码中的表达式中的各个变量将抽象语法树划分为多个节点;或者,当待保护代码的类型为多维数组类型时,代码转换模块进一步适于:根据本地接口将多维数组进行变换,根据变换之后的多维数组将抽象语法树划分为多个节点。
可选地,第一指定格式的文件包括:ELF文件,第二指定格式的文件包括:ELF文件。
可选地,反编译模块进一步适于:对应用安装包文件进行过滤处理,对过滤后的应用安装包文件进行反编译,得到待保护代码对应的抽象语法树。
根据本发明的另一方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;
存储器用于存放至少一可执行指令,可执行指令使处理器执行上述基于应用安装包文件的代码转换方法对应的操作。
根据本发明的另一方面,提供了一种计算机存储介质,存储介质中存储有至少一可执行指令,可执行指令使处理器执行如上述基于应用安装包文件的代码转换方法对应的操作。
根据本发明所提供的基于应用安装包文件的代码转换方法及装置。首先,对应用安装包文件进行反编译,得到抽象语法树;然后,按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;然后,按照预设的加密规则对转换代码进行加密处理,得到加密转换代码;然后,针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码;最后,根据加密转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件。该方式通过将应用安装包文件中待保护代码进行转换,将待保护代码转换为难以被反编译的形式的代码,增加了反编译的难度以及复杂度,能够有效对待保护代码进行保护,同时对转换得到的代码进行加密,基于加密的转换代码生成新的应用安装包文件,从而进一步提升了应用的安全性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的基于应用安装包文件的代码转换方法的流程示意图;
图2示出了根据本发明另一个实施例的基于应用安装包文件的代码转换方法的流程示意图;
图3示出了本发明一个实施例中对应于步骤S204的子步骤的流程示意图;
图4示出了本发明另一个实施例中对应于步骤S204的子步骤的流程示意图;
图5示出了根据本发明另一个实施例的基于应用安装包文件的代码转换装置的功能模块图;
图6示出了根据本发明实施例的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的基于应用安装包文件的代码转换方法的流程示意图,本实施例中以待保护代码为Java代码为例进行说明,由于反编译软件很容易对Java层的语言进行反编译,本实施例中将应用中的待保护代码转换为难以被反编译的语言代码,例如转换为C代码。当然,本发明的应用场景并不以此为限。如图1所示,该方法包括:
步骤S101,对应用安装包文件进行反编译,得到抽象语法树。
其中,抽象语法树(abstract syntax tree)是源代码的抽象语法结构的树状表现形式,是基于寄存器的带类型的三地址码,具有语句和表达式两种形式,抽象语法树中的每个节点都表示源代码中的一种结构。对应用安装包文件进行反编译处理,得到该应用安装包文件的抽象语法树,可以采用Jimple形式的抽象语法树,或者根据实际需要采用其他形式的抽象语法树,本发明对此不作限定。
步骤S102,按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码。
该步骤也即将待保护代码进行转换,具体地,获取上述抽象语法树中的节点,按照预设的转换规则对节点中的内容进行处理,得到与待保护代码相对应的转换代码,其中,得到的转换代码在应用安装包文件中实现的功能与待保护代码在应用安装包文件中实现的功能一致,并且对转换代码进行反编译的复杂度高于对待保护代码进行反编译的复杂度。本实施例中,将待保护Java代码转换为相应的C代码。
本实施例中,对应用安装包文件反编译,得到的抽象语法树的节点中包含待保护代码对应的节点,还有可能包含不需要保护的代码的节点。因此,具体实施时,可以首先确定抽象语法树中与待保护代码相对应的节点,然后按照预设的转换规则对与待保护代码相对应的节点中的内容进行处理,得到与待保护代码相对应的转换代码;或者,首先按照预设的转换规则对抽象语法树的各个节点中的内容进行处理,然后在得到的转换代码中提取出与待保护代码相对应的转换代码。当然,上述两种方式仅仅是本发明的具体实施方式,本发明的方案不限于此。
步骤S103,按照预设的加密规则对转换代码进行加密处理,得到加密转换代码。
实际应用中,可按照预设的程序执行顺序在转换代码的相应位置处插入加密处理的调用代码,当运行到预设的加密处理的调用代码时,调用加密处理的处理代码以执行对转换代码的加密处理。通过对转换处理得到的转换代码进行加密,进一步加大被反编译的难度,提升应用的安全性。
步骤S104,针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码。
具体地,基于JNI(Java Native Interface)调用规则,针对待保护代码所对应的程序代码,将待保护代码修改为本地代码,得到替换后的程序代码。其中,JNI提供了若干的API(Application Programming Interface,应用程序编程接口)实现了Java和其他语言的通信,它允许Java代码和其他语言写的代码进行交互。
步骤S105,根据加密转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
将转换代码以及替换后的程序代码重新打包为新的应用安装包文件,该新的安装包文件即是经过代码转换的应用安装包文件。
根据本实施例所提供的基于应用安装包文件的代码转换方法,首先对应用安装包文件进行反编译,得到抽象语法树;然后,按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;然后,按照预设的加密规则对转换代码进行加密处理,得到加密转换代码;然后,针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码;最后,根据加密转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件。该方式通过将应用安装包文件中待保护代码进行转换,将待保护代码转换为难以被反编译的形式的代码,增加了反编译的难度以及复杂度,能够有效对待保护代码进行保护,同时对转换得到的转换代码进行加密,基于加密的转换代码生成新的应用安装包文件,从而进一步提升了应用的安全性。
图2示出了根据本发明另一个实施例的基于应用安装包文件的代码转换方法的流程示意图,如图2所示,方法包括:
步骤S201,对应用安装包文件进行过滤处理,对过滤后的应用安装包文件进行反编译,得到待保护代码对应的抽象语法树。
本实施例中,预先对应用安装包文件进行过滤处理,对过滤后的应用安装包进行反编译处理直接得到与待保护代码相对应的抽象语法树。通俗地来讲,本步骤也即获取应用安装包文件中的待保护代码,例如,获取apk中待保护方法对应的Java代码。
步骤S202,根据待保护代码的类型将抽象语法树划分为多个节点。
检测待保护代码的类型,根据待保护代码的类型将上述抽象语法树划分为多个节点。
具体地,当待保护代码的类型为表达式类型时,基于抽象语法树的类型,根据待保护代码中的表达式中的各个变量将抽象语法树划分为多个节点。其中,JNI接口可以调用原子表达式以及运算方式的数据接口,因此,当待保护代码为原子表达式或者运算方式时,可以分别将各个原子表达式以及相关运算关系翻译为与JNI接口相对应的形式,从而根据待保护代码中的表达式中的各个变量将抽象语法树划分为多个节点。
当待保护代码的类型为多维数组类型时,根据本地接口将多维数组进行变换,根据变换之后的多维数组将抽象语法树划分为多个节点。由于JNI接口中没有直接用于创建多维数组的接口,因此可以将多维数组进行多种变换,转换为能够翻译为与JNI接口相对应的形式,从而根据变换之后的多维数据将抽象语法树划分为多个节点。
步骤S203,按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码。
该步骤也即将待保护代码进行转换,具体地,获取上述抽象语法树中的节点,按照预设的转换规则对节点中的内容进行处理,得到与待保护代码相对应的转换代码,其中,得到的转换代码在应用安装包文件中实现的功能与待保护代码在应用安装包文件中实现的功能一致,并且对转换代码进行反编译的复杂度高于对待保护代码进行反编译的复杂度。本实施例中,将待保护Java代码转换为相应的C代码。
步骤S204,按照预设的加密规则对转换代码进行加密处理,得到加密转换代码。
图3示出了本发明一个实施例中对应于步骤S204的子步骤的流程示意图,如图3所示,步骤S204包括以下子步骤:
子步骤S20411,按照预设的程序执行顺序在转换代码的相应位置处插入预设加密处理的调用代码,得到第一代码。
其中,预设的程序执行顺序指的是程序运行时进行预设加密处理所包含的各种处理的顺序,调用代码用于在程序执行的过程中调用能实现预设加密处理的功能的代码。在转换代码的相应位置处插入预设加密处理的调用代码,当运行到调用代码时,调用预设加密处理的处理代码以实现转换代码加密。
子步骤S20412,对第一代码进行编译,在编译得到的文件中将与转换代码相对应的二进制文件提取出来,并将编译得到的文件被提取出二进制文件之后所得到的文件确认为应用编译文件。
对第一代码进行编译,在编译得到的文件中将与待保护代码相对应的二进制文件提取出来,可以将提取出来的二进制文件分开进行存储,后续过程中根据与转换代码相对应的二进制文件进行代码自修改处理,同时,将编译得到的文件中与转换代码相对应的二进制文件提取出去之后所剩下的文件确定为应用编译文件。该步骤相当于对转换代码进行擦除处理。
对第一代码进行编译,在编译得到的二进制文件中,将与转换代码相对应的二进制文件提取出来,可以将提取出来的二进制文件分开进行存储,后续过程中根据与转换代码相对应的二进制文件进行代码自修改处理。该步骤相当于对转换代码进行擦除处理。
子步骤S20413,在运行应用编译文件的过程中,当运行到预设加密处理的调用代码时,根据预设加密处理的处理代码以及二进制文件完成加密处理,根据加密处理结果确定加密转换代码。
在运行应用编译文件的过程中,当运行到预设加密处理的调用代码,调用对应的能够实现预设加密处理的功能的处理代码,执行该处理代码完成代码加密处理,根据加密处理结果确定加密转换代码。举例来说,上述步骤S20412相当于实现了擦除转换代码的功能,则预设加密处理还可以包括:还原处理(解密处理),还原处理具体指的是加载转换代码运行时的内存数据,在此情况下,预设加密处理所要实现的功能是将提取出的与转换代码相对应的二进制文件替换到内存区域中相应的位置处,由此可以保障后续过程中程序的正常运行。当然,本发明的方案并不以此为限。
图4示出了本发明另一个实施例中对应于步骤S204的子步骤的流程示意图,如图4所示,步骤S204包括以下子步骤:
子步骤S20421,预先构建第二指定格式的文件,将还原处理的处理代码以及擦除处理的处理代码存储在第二指定格式的文件中。
预先构建第二指定格式的文件,将预设加密处理的处理代码存储在该第二指定格式的文件中。则在后续过程中,当运行到预设加密处理的调用代码时,跳转至该第二指定格式的文件以完成加密处理。
其中,预设加密处理包括:还原处理以及擦除处理。其中,还原处理又可以理解为解密处理,泛指加载转换代码运行时的内存数据,恢复被擦除的源码内存数据;擦除处理又可以理解为加密处理,泛指擦除转换代码运行时的内存数据。
其中,在Linux系统中,该预先构建的第二指定格式的文件可以是ELF文件。实际应用中,可以构建一个ELF文件存储还原处理的处理代码以及擦除处理的处理代码,也可以构建两个ELF文件分别存储还原处理的处理代码以及擦除处理的处理代码,本发明对此不做限定。当运行到还原处理的调用代码或者擦除处理的调用代码时,跳转至ELF文件中执行相应的处理。其中,ELF文件是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件,也是Linux的主要可执行文件格式。
子步骤S20422,在转换代码之前插入还原处理的调用代码,以及在转换代码之后插入擦除处理的调用代码,得到第一代码。
其中,当预设的程序执行顺序为还原(解密)-运行转换代码-擦除(加密)时,则在转换代码之前插入还原处理的调用代码,以及在转换代码之后插入擦除处理的调用代码,得到第一代码。由此可知,加密处理的执行过程为:在运行经过擦除处理的转换代码之前,先进行还原处理,从而恢复内存区域中被擦除的内存数据;在运行完转换代码之后,再对运行得到的内存数据进行擦除。
子步骤S20423,对第一代码进行编译,在编译得到的文件中将与转换代码相对应的二进制文件提取出来,并将编译得到的文件被提取出二进制文件之后所得到的文件确认为应用编译文件。
对第一代码进行编译,在编译得到的文件中将与待保护代码相对应的二进制文件提取出来,可以将提取出来的二进制文件分开进行存储,后续过程中根据与转换代码相对应的二进制文件进行代码自修改处理,同时,将编译得到的文件中与转换代码相对应的二进制文件提取出去之后所剩下的文件确定为应用编译文件。该步骤相当于对转换代码进行擦除处理。
子步骤S20424,在运行应用编译文件的过程中,当运行到还原处理的调用代码时,跳转至第二指定格式的文件以执行还原处理。
在运行应用编译文件的过程中,当运行到还原处理的调用代码时,跳转至保存有还原处理的处理代码的第二指定格式的文件以执行还原处理。
进一步地,在执行本步骤之前,预先将二进制文件放置于还原处理的处理代码中,得到还原处理代码,将还原处理代码进行编译,并将编译得到的文件保存至第二指定格式的文件中。其中,第二指定格式的文件可以为ELF文件,ELF文件分为数据区和代码区,数据区中保存字符串等常量,将上述与转换代码所对应的二进制文件编译之后作为ELF文件进行保存时可以保存在ELF文件的数据区,在此情况下,即使外人识别出该ELF文件,也无法区分出数据区内哪些是代码、哪些是数据,因此,无法仅通过ELF文件中数据区内的数据获取到转换代码的任何信息,也即对该ELF文件进行反编译时无法得到真实的源码,由此可以保证转换代码的安全。
当运行到还原处理的调用代码时,跳转至第二指定格式的文件以执行将二进制文件恢复至内存区域中相应的位置的步骤。子步骤S20423将与转换代码的二进制文件提取出来,相当于将内存区域中转换代码运行时的内存数据进行擦除,则根据上述内容,在运行经过擦除处理的转换代码之前,先进行还原处理,步骤S20424相当于恢复内存区域中之前被擦除的内存数据。则该步骤也即当运行到还原处理的调用代码时,跳转至上述ELF文件,执行将与转换代码相对应的二进制文件替换至内存区域中相应的位置处的步骤。
可选地,在执行还原处理之前,还可以调用系统函数修改内存区域中的内存数据的操作权限。在对转换代码进行还原处理之前,可以先通过调用系统函数来修改代码段的权限。例如,在Linux系统中,利用mprotect函数来指定任意一块内存区域中数据的读、写以及执行权限,在Linux系统中代码段默认权限为可读可执行但不可写,因而可以在代码段内写入mprotect函数,以便对转换代码的内存数据进行写处理。相应地,Windows系统中也可以通过调用系统函数的方式来更改内存数据的写操作权限,在此不进行赘述。
子步骤S20425,当运行到擦除处理的调用代码时,跳转至第二指定格式的文件以执行擦除处理,根据处理结果确定加密转换代码。
当运行到擦除处理的调用代码时,跳转至保存有擦除处理的处理代码的第二指定格式的文件以执行擦除处理。具体可以从文件的某个字节、某个位置以指定的字节大小进行擦除。根据处理结果生成加密转换代码,具体地,可根据上述插入了调用代码的第一代码以及上述第二指定格式的文件(ELF文件)生成加密转换代码。
本实施例中,擦除处理可以指将内存区域中转换代码运行时的内存数据设置为预设数值,具体地,跳转至第二指定格式的文件以执行将内存区域中的还原处理所恢复的与转换代码相对应的二进制文件设置为预设数值的步骤。由于转换代码均被擦除为预设数值,进行反编译所得到的结果为nop,因此无法得到转换代码的真实信息。在运行完转换代码之后,擦除内存区域中产生的与转换代码相关的内存数据,保证该转换代码静态不可见。
进一步地,在后续运行程序的过程中,当调用上述还原处理代码(保存了二进制文件的还原处理的处理代码)时,执行利用系统函数获取第一代码中调用还原处理代码的返回地址,根据返回地址将还原处理代码中的二进制文件对所对应的预设数值进行替换的步骤。在后续运行程序的过程中,由于转换代码经过了还原以及擦除处理,内存中转换代码被擦除为预设数值,因此当调用还原处理代码时,获取第一代码调用该还原处理代码的返回地址,并将还原处理代码中所保存的二进制文件替换至第一代码中被擦除为预设数值的位置处。其中,还原处理代码是将与转换代码相对应的二进制文件保存至还原处理的处理代码所形成的,因此调用还原处理代码的返回地址也就是调用还原处理的处理代码的返回地址。通过这种方式能够保证程序可以正常运行。
在运行程序的过程中,程序必须加载进内存中进行运行,而在从外存至内存的运行过程中,系统每次的加载地址是变化的,该加载地址是由操作系统的加载机制动态决定的,因此,还原处理的处理代码在内存中的运行地址是变化的,因此在每次运行的过程中,可以采用系统函数来获取第一代码中调用该还原处理代码的返回地址,该系统函数具体可以为__builtin_return_address(0),其功能就是获取当前运行函数的返回地址。当进行还原处理时,还原函数需要知道带还原的具体位置,而待还原的位置就是还原函数的返回地址。
步骤S205,针对待保护代码所对应的程序代码,将待保护代码替换为本地代码,并擦除程序代码中待保护代码所对应的方法数据,得到替换后的程序代码。
该步骤即针对待保护代码所对应的程序代码进行替换处理,以待保护代码为Java代码为例,当待保护代码为Java代码时,将Java代码转换为C代码,则程序代码中的该待保护Java代码修改为native(本地代码),并擦除该待保护Java代码的方法数据,得到替换后的程序代码,其中,本地代码就是Java调用非Java代码的接口,由其他非Java语言实现。
步骤S206,预先构建第一指定格式的文件,将加密转换代码写入第一指定格式的文件中,在抽象语法树中添加用于加载写入加密转换代码的第一指定格式的文件的静态代码块。
其中,在Linux系统中,该预先构建的第一指定格式的文件可以为ELF或者.so文件,在抽象语法树中添加用于加载写入转换代码的预设指定文件的静态代码块。其中,静态代码块先于主方法执行,因此,当有些代码必须在项目启动的时候就执行的时候,可以使用静态代码块,通过添加静态代码块,在运行依据经过代码转换的应用安装包文件时,首先会执行该静态代码块,从而将上述第一指定格式的文件中的内容加载至内存。其中,ELF文件是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件,也是Linux的主要可执行文件格式。
以第一指定格式的文件为.so文件为例,本实施例的方法通过将待保护代码转换为反编译难度较高的代码以及将转换得到的代码进行加密,从而实现对待保护代码进行保护,保护是针对程序里面的函数为单位进行的,从技术上来讲,将待保护代码转移到了动态链接库(.so文件)中。
步骤S207,根据写入加密转换代码的第一指定格式的文件、添加了静态代码块的抽象语法树以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
将写入了加密转换代码的第一指定格式的文件、添加了静态代码块的抽象语法树以及替换后的程序代码打包生成经过代码转换的应用安装包文件。在运行该经过代码转换的应用安装包文件时,首先会执行静态代码块,从而将上述第一指定格式的文件的内容加载至内存中,之后当运行至待保护代码时,可以直接从内存中调用相应的内容。
运行过程中,需要先对第一指定格式的文件中的加密转换代码进行解密,并在解密之后的代码运行完毕之后再重新进行加密。因此,在运行该经过代码转换的应用安装包文件的过程中,内存中的备份文件系统在任何时刻都无法得到待保护代码的完整进行,从而达到保护代码的目的。
综上所述,一方面,该方式通过将应用安装包文件中待保护代码进行转换,将待保护代码转换为难以被反编译的形式的代码,增加了反编译的难度以及复杂度;另一方面,该方式还提供了一种将转换之后的代码进行加密的方法,也即转换代码自修改的方法,首先对转换代码进行擦除处理,在执行被擦除之后的转换代码之前,先进行还原处理,从而恢复原文件中被擦除的代码,在运行完转换代码之后,再对该转换代码进行擦除处理,得到的转换代码被设置为预设数值。因此,当对该擦除处理之后的文件进行反编译时无法获取到真实的源码,同时,由于放置于ELF文件中的转换代码为二进制文件进行编译后所得到的文件,该文件放置于ELF文件中的数据区,对数据文件进行反编译时无法得到真实的源码,通过上述两个方面的操作,达到保护转换代码安全的目的,处理后的转换代码静态不可见,动态难调试。综上,基于加密的转换代码生成新的应用安装包文件,从而提高了应用的安全性。
图5示出了根据本发明另一个实施例的基于应用安装包文件的代码转换装置的功能模块图,如图5所示,该装置包括:反编译模块51、代码转换模块52、加密模块53、替换处理模块54、生成模块55。
其中,反编译模块51,适于对应用安装包文件进行反编译,得到抽象语法树;
代码转换模块52,适于按照预设的转换规则对抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;
加密模块53,适于按照预设的加密规则对转换代码进行加密处理,得到加密转换代码;
替换处理模块54,适于针对待保护代码所对应的程序代码进行代码替换处理,得到替换后的程序代码;
生成模块55,适于根据加密转换代码以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,加密模块53进一步适于:按照预设的程序执行顺序在转换代码的相应位置处插入预设加密处理的调用代码,得到第一代码;对第一代码进行编译,在编译得到的文件中将与转换代码相对应的二进制文件提取出来,并将编译得到的文件被提取出二进制文件之后所得到的文件确认为应用编译文件;在运行应用编译文件的过程中,当运行到预设加密处理的调用代码时,根据预设加密处理的处理代码以及二进制文件完成加密处理,根据加密处理结果确定加密转换代码。
可选地,装置进一步包括:第一文件构建模块,适于预先构建第一指定格式的文件,将加密转换代码写入第一指定格式的文件中;生成模块55进一步适于:根据写入加密转换代码的第一指定格式的文件以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,装置进一步包括:第二文件构建模块,适于预先构建第二指定格式的文件,将预设加密处理的处理代码存储在第二指定格式的文件中;则加密模块53进一步适于:当运行到预设加密处理的调用代码时,跳转至第二指定格式的文件以完成预设加密处理。
可选地,预设加密处理包括:还原处理、擦除处理;
则加密模块53进一步适于:在转换代码之前插入还原处理的调用代码,以及在转换代码之后插入擦除处理的调用代码,得到第一代码。
可选地,加密模块53进一步适于:当运行到还原处理的调用代码时,跳转至第二指定格式的文件以执行还原处理;或者,当运行到擦除处理的调用代码时,跳转至第二指定格式的文件以执行擦除处理。
可选地,加密模块53进一步适于:将二进制文件放置于还原处理的处理代码中,得到还原处理代码,将还原处理代码进行编译,并将编译得到的文件保存至第二指定格式的文件中。
可选地,加密模块53进一步适于:跳转至第二指定格式的文件以执行将二进制文件恢复至内存区域中相应的位置的步骤。
可选地,装置进一步包括:权限修改模块,适于调用系统函数修改内存区域中的内存数据的执行权限。
可选地,加密模块53进一步适于:跳转至第二指定格式的文件以执行将内存区域中的还原处理所恢复的与转换代码相对应的二进制文件设置为预设数值的步骤。
可选地,装置进一步包括:执行模块,适于在完成擦除处理之后,当调用还原处理代码时,执行利用系统函数获取第一代码中调用还原处理代码的返回地址,根据返回地址将还原处理代码中的二进制文件对所对应的预设数值进行替换的步骤。
可选地,生成模块55进一步适于:在抽象语法树中添加用于加载写入加密转换代码的第一指定格式的文件的静态代码块;根据写入加密转换代码的第一指定格式的文件、添加了静态代码块的抽象语法树以及替换后的程序代码打包生成经过代码转换的应用安装包文件。
可选地,替换处理模块54进一步适于:针对待保护代码所对应的程序代码,将待保护代码替换为本地代码,并擦除程序代码中待保护代码所对应的方法数据,得到替换后的程序代码。
可选地,代码转换模块52进一步适于:根据待保护代码的类型将抽象语法树划分为多个节点。
可选地,当待保护代码的类型为表达式类型时,代码转换模块52进一步适于:基于抽象语法树的类型,根据待保护代码中的表达式中的各个变量将抽象语法树划分为多个节点;或者,当待保护代码的类型为多维数组类型时,代码转换模块52进一步适于:根据本地接口将多维数组进行变换,根据变换之后的多维数组将抽象语法树划分为多个节点。
可选地,第一指定格式的文件包括:ELF文件,第二指定格式的文件包括:ELF文件。
可选地,反编译模块51进一步适于:对应用安装包文件进行过滤处理,对过滤后的应用安装包文件进行反编译,得到待保护代码对应的抽象语法树。
图6示出了根据本发明实施例的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图6所示,该电子设备可以包括:处理器(processor)602、通信接口(Communications Interface)604、存储器(memory)606、以及通信总线608。
其中:
处理器602、通信接口604、以及存储器606通过通信总线608完成相互间的通信。
通信接口604,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器602,用于执行程序610,具体可以执行上述基于应用安装包文件的代码转换方法实施例中的相关步骤。
具体地,程序610可以包括程序代码,该程序代码包括计算机操作指令。
处理器602可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器606,用于存放程序610。存储器606可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序610具体可以用于使得处理器602执行上述任意方法实施例中的基于应用安装包文件的代码转换方法。程序610中各步骤的具体实现可以参见上述基于应用安装包文件的代码转换方法实施例中的相应步骤和单元中对应的描述,在此不赘述。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应该被理解和认定为覆盖了所有这些其他变型或修改。
本领域技术人员应当理解,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。此外,本发明也不针对任何特定编程语言,应当明白,可以利用各种编程语言实现本发明描述的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
需要注意的是,尽管在上面的说明中详细描述了一种基于应用安装包文件的代码转换装置的若干模块,但是这种划分仅仅是示例性的,并非是强制性的。本领域的技术人员可以理解,实际上,可以对实施例中的模块进行自适应性地改变,将实施例中的多个模块组合成一个模块,也可将一个模块划分成多个模块。
此外,尽管在附图中以特定顺序描述了本发明实施操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。可以省略某些步骤,将多个步骤合并为一个步骤执行,或者将一个步骤分成多个步骤执行。
以上对本发明的方法和具体实施方法进行了详细的介绍,并给出了相应的实施例。当然,除上述实施例外,本发明还可以有其它实施方式,凡采用等同替换或等效变换形成的技术方案,均落在本发明所要保护的范围之内。

Claims (28)

1.一种基于应用安装包文件的代码转换方法,其特征在于,包括:
对应用安装包文件进行反编译,得到抽象语法树;
按照预设的转换规则对所述抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;
按照预设的程序执行顺序在所述转换代码的相应位置处插入预设加密处理的调用代码,得到第一代码;其中,所述预设加密处理包括:还原处理、擦除处理,则在所述转换代码之前插入所述还原处理的调用代码,以及在所述转换代码之后插入所述擦除处理的调用代码;
其中,所述还原处理是指加载所述转换代码运行时的内存数据;所述擦除处理是指擦除所述转换代码运行时的内存数据;
对所述第一代码进行编译,在编译得到的文件中将与所述转换代码相对应的二进制文件提取出来,并将所述编译得到的文件被提取出所述二进制文件之后所得到的文件确认为应用编译文件;
在运行所述应用编译文件的过程中,当运行到所述还原处理的调用代码或者所述擦除处理的调用代码时,根据所述还原处理的处理代码或所述擦除处理的处理代码以及所述二进制文件完成还原处理或者擦除处理,根据处理结果确定加密转换代码;
针对所述待保护代码所对应的程序代码,将所述待保护代码替换为本地代码,并擦除所述程序代码中所述待保护代码所对应的方法数据,得到替换后的程序代码;其中,所述本地代码为Java调用非Java代码的接口;
根据所述加密转换代码以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件。
2.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
预先构建第一指定格式的文件,将所述加密转换代码写入所述第一指定格式的文件中;
则根据所述加密转换代码以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件进一步包括:
根据写入所述加密转换代码的第一指定格式的文件以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件。
3.根据权利要求2所述的方法,其特征在于,所述方法进一步包括:
预先构建第二指定格式的文件,将所述预设加密处理的处理代码存储在所述第二指定格式的文件中;
则当运行到所述还原处理的调用代码或者所述擦除处理的调用代码时,根据所述还原处理的处理代码或所述擦除处理的处理代码以及所述二进制文件完成还原处理或者擦除处理进一步包括:
当运行到所述还原处理的调用代码时,跳转至所述第二指定格式的文件以执行还原处理;
或者,当运行到所述擦除处理的调用代码时,跳转至所述第二指定格式的文件以执行擦除处理。
4.根据权利要求3所述的方法,其特征在于,所述当运行到所述还原处理的调用代码时,跳转至所述第二指定格式的文件以执行还原处理的步骤之前,所述方法进一步包括:
将所述二进制文件放置于所述还原处理的处理代码中,得到还原处理代码,将所述还原处理代码进行编译,并将编译得到的文件保存至所述第二指定格式的文件中。
5.根据权利要求3所述的方法,其特征在于,所述跳转至所述第二指定格式的文件以执行还原处理进一步包括:
跳转至所述第二指定格式的文件以执行将所述二进制文件恢复至内存区域中相应的位置的步骤。
6.根据权利要求3-5中任一项所述的方法,其特征在于,所述跳转至所述第二指定格式的文件执行还原处理的步骤之前,所述方法进一步包括:
调用系统函数修改内存区域中的内存数据的执行权限。
7.根据权利要求5所述的方法,其特征在于,所述跳转至所述第二指定格式的文件以执行擦除处理进一步包括:
跳转至所述第二指定格式的文件以执行将内存区域中的还原处理所恢复的与转换代码相对应的二进制文件设置为预设数值的步骤。
8.根据权利要求7所述的方法,其特征在于,在完成所述擦除处理之后,所述方法进一步包括:
当调用还原处理代码时,执行利用系统函数获取所述第一代码中调用所述还原处理代码的返回地址,根据所述返回地址将所述还原处理代码中的二进制文件对所对应的预设数值进行替换的步骤。
9.根据权利要求2所述的方法,其特征在于,所述根据写入所述加密转换代码的第一指定格式的文件以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件进一步包括:
在所述抽象语法树中添加用于加载所述写入所述加密转换代码的第一指定格式的文件的静态代码块;
根据所述写入所述加密转换代码的第一指定格式的文件、添加了所述静态代码块的抽象语法树以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件。
10.根据权利要求1所述的方法,其特征在于,所述按照预设的转换规则对所述抽象语法树的节点中的内容进行处理的步骤之前,所述方法进一步包括:
根据所述待保护代码的类型将所述抽象语法树划分为多个节点。
11.根据权利要求10所述的方法,其特征在于,所述根据所述待保护代码的类型将所述抽象语法树划分为多个节点进一步包括:
当所述待保护代码的类型为表达式类型时,基于所述抽象语法树的类型,根据所述待保护代码中的表达式中的各个变量将所述抽象语法树划分为多个节点;
或者,当所述待保护代码的类型为多维数组类型时,根据本地接口将多维数组进行变换,根据变换之后的多维数组将所述抽象语法树划分为多个节点。
12.根据权利要求3所述的方法,其特征在于,所述第一指定格式的文件包括:ELF文件,所述第二指定格式的文件包括:ELF文件。
13.根据权利要求1所述的方法,其特征在于,所述对应用安装包文件进行反编译,得到抽象语法树进一步包括:
对应用安装包文件进行过滤处理,对过滤后的应用安装包文件进行反编译,得到待保护代码对应的抽象语法树。
14.一种基于应用安装包文件的代码转换装置,其特征在于,包括:
反编译模块,适于对应用安装包文件进行反编译,得到抽象语法树;
代码转换模块,适于按照预设的转换规则对所述抽象语法树的节点中的内容进行处理,得到与待保护代码相对应的转换代码;
加密模块,适于按照预设的程序执行顺序在所述转换代码的相应位置处插入预设加密处理的调用代码,得到第一代码;
其中,所述预设加密处理包括:还原处理、擦除处理,在所述转换代码之前插入所述还原处理的调用代码,以及在所述转换代码之后插入所述擦除处理的调用代码;其中,所述还原处理是指加载所述转换代码运行时的内存数据;所述擦除处理是指擦除所述转换代码运行时的内存数据;
对所述第一代码进行编译,在编译得到的文件中将与所述转换代码相对应的二进制文件提取出来,并将所述编译得到的文件被提取出所述二进制文件之后所得到的文件确认为应用编译文件;
在运行所述应用编译文件的过程中,当运行到所述还原处理的调用代码或者所述擦除处理的调用代码时,根据所述还原处理的处理代码或所述擦除处理的处理代码以及所述二进制文件完成还原处理或者擦除处理,根据处理结果确定加密转换代码;
替换处理模块,适于针对所述待保护代码所对应的程序代码,将所述待保护代码替换为本地代码,并擦除所述程序代码中所述待保护代码所对应的方法数据,得到替换后的程序代码;其中,所述本地代码为Java调用非Java代码的接口;
生成模块,适于根据所述加密转换代码以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件。
15.根据权利要求14所述的装置,其特征在于,所述装置进一步包括:
第一文件构建模块,适于预先构建第一指定格式的文件,将所述加密转换代码写入所述第一指定格式的文件中;
所述生成模块进一步适于:根据写入所述加密转换代码的第一指定格式的文件以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件。
16.根据权利要求15所述的装置,其特征在于,所述装置进一步包括:
第二文件构建模块,适于预先构建第二指定格式的文件,将所述预设加密处理的处理代码存储在所述第二指定格式的文件中;
则所述加密模块进一步适于:
当运行到所述还原处理的调用代码时,跳转至所述第二指定格式的文件以执行还原处理;
或者,当运行到所述擦除处理的调用代码时,跳转至所述第二指定格式的文件以执行擦除处理。
17.根据权利要求16所述的装置,其特征在于,所述加密模块进一步适于:
将所述二进制文件放置于所述还原处理的处理代码中,得到还原处理代码,将所述还原处理代码进行编译,并将编译得到的文件保存至所述第二指定格式的文件中。
18.根据权利要求16所述的装置,其特征在于,所述加密模块进一步适于:
跳转至所述第二指定格式的文件以执行将所述二进制文件恢复至内存区域中相应的位置的步骤。
19.根据权利要求16-18中任一项所述的装置,其特征在于,所述装置进一步包括:
权限修改模块,适于调用系统函数修改内存区域中的内存数据的执行权限。
20.根据权利要求18所述的装置,其特征在于,所述加密模块进一步适于:
跳转至所述第二指定格式的文件以执行将内存区域中的还原处理所恢复的与转换代码相对应的二进制文件设置为预设数值的步骤。
21.根据权利要求20所述的装置,其特征在于,所述装置进一步包括:
执行模块,适于在完成所述擦除处理之后,当调用还原处理代码时,执行利用系统函数获取所述第一代码中调用所述还原处理代码的返回地址,根据所述返回地址将所述还原处理代码中的二进制文件对所对应的预设数值进行替换的步骤。
22.根据权利要求15所述的装置,其特征在于,所述生成模块进一步适于:
在所述抽象语法树中添加用于加载所述写入所述加密转换代码的第一指定格式的文件的静态代码块;
根据所述写入所述加密转换代码的第一指定格式的文件、添加了所述静态代码块的抽象语法树以及所述替换后的程序代码打包生成经过代码转换的应用安装包文件。
23.根据权利要求14所述的装置,其特征在于,所述代码转换模块进一步适于:
根据所述待保护代码的类型将所述抽象语法树划分为多个节点。
24.根据权利要求23所述的装置,其特征在于,所述代码转换模块进一步适于:
当所述待保护代码的类型为表达式类型时,基于所述抽象语法树的类型,根据所述待保护代码中的表达式中的各个变量将所述抽象语法树划分为多个节点;
或者,当所述待保护代码的类型为多维数组类型时,根据本地接口将多维数组进行变换,根据变换之后的多维数组将所述抽象语法树划分为多个节点。
25.根据权利要求16所述的装置,其特征在于,所述第一指定格式的文件包括:ELF文件,所述第二指定格式的文件包括:ELF文件。
26.根据权利要求14所述的装置,其特征在于,所述反编译模块进一步适于:
对应用安装包文件进行过滤处理,对过滤后的应用安装包文件进行反编译,得到待保护代码对应的抽象语法树。
27.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-13任一项所述的基于应用安装包文件的代码转换方法对应的操作。
28.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求1-13任一项所述的基于应用安装包文件的代码转换方法对应的操作。
CN201811426377.8A 2018-11-20 2018-11-27 一种基于应用安装包文件的代码转换方法及装置 Active CN109598107B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201811384829 2018-11-20
CN2018113848290 2018-11-20

Publications (2)

Publication Number Publication Date
CN109598107A CN109598107A (zh) 2019-04-09
CN109598107B true CN109598107B (zh) 2021-02-02

Family

ID=65959816

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811426377.8A Active CN109598107B (zh) 2018-11-20 2018-11-27 一种基于应用安装包文件的代码转换方法及装置

Country Status (1)

Country Link
CN (1) CN109598107B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110298146B (zh) * 2019-06-27 2022-04-22 北京奇艺世纪科技有限公司 一种应用程序的处理、运行方法及装置
CN110598379B (zh) * 2019-09-23 2021-06-08 北京智游网安科技有限公司 一种实现字符串混淆的方法、设备及存储介质
WO2021208867A1 (zh) * 2020-04-14 2021-10-21 华为技术有限公司 一种跨平台的代码转换方法及设备
CN112256279A (zh) * 2020-09-29 2021-01-22 深圳市广和通无线股份有限公司 源码转换方法、装置、计算机设备及可读存储介质
CN113553587B (zh) * 2021-06-21 2024-02-23 深信服科技股份有限公司 一种文件检测方法、装置、设备及可读存储介质
CN113704706B (zh) * 2021-09-23 2023-10-27 深圳市腾讯信息技术有限公司 代码加固方法、装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106845167A (zh) * 2016-12-12 2017-06-13 北京奇虎科技有限公司 一种apk的加固方法和装置,及动态加载方法和装置
CN107977553A (zh) * 2017-12-25 2018-05-01 中国电子产品可靠性与环境试验研究所 移动应用程序的安全加固的方法及装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104462959B (zh) * 2014-12-04 2017-09-01 北京奇虎科技有限公司 一种安卓应用的加固保护方法、服务器和系统
CN104463002B (zh) * 2014-12-24 2017-04-05 北京奇虎科技有限公司 一种加固apk的方法和装置以及apk加固客户端和服务器
WO2018194196A1 (ko) * 2017-04-20 2018-10-25 라인 가부시키가이샤 Elf 파일의 난독화 적용 여부의 탐지 및 보안성 평가를 위한 방법 및 시스템

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106845167A (zh) * 2016-12-12 2017-06-13 北京奇虎科技有限公司 一种apk的加固方法和装置,及动态加载方法和装置
CN107977553A (zh) * 2017-12-25 2018-05-01 中国电子产品可靠性与环境试验研究所 移动应用程序的安全加固的方法及装置

Also Published As

Publication number Publication date
CN109598107A (zh) 2019-04-09

Similar Documents

Publication Publication Date Title
CN109598107B (zh) 一种基于应用安装包文件的代码转换方法及装置
US10853270B2 (en) Cryptographic pointer address encoding
KR101518420B1 (ko) 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
US20160203087A1 (en) Method for providing security for common intermediate language-based program
CN106203006A (zh) 基于dex与so文件动态执行的Android应用加固方法
CN106599629B (zh) 一种安卓应用程序加固方法及装置
WO2021217980A1 (zh) java代码的加壳方法与系统
KR101623096B1 (ko) 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
KR102433011B1 (ko) Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체
WO2016078130A1 (zh) 一种防逆向apk文件的动态加载方法
CN105095771B (zh) 一种共享目标文件的保护方法及装置
CN104573416A (zh) 一种生成应用安装包、执行应用的方法及装置
CN109614772B (zh) 基于应用安装包文件的代码转换方法及装置
CN110059456B (zh) 代码保护方法、代码保护装置、存储介质与电子设备
WO2011134207A1 (zh) 软件保护方法
CN110309630B (zh) 一种Java代码加密方法及装置
CN109840400B (zh) 提供安全性的设备和方法以及针对通用中间语言执行安全性的设备和方法
US8533826B2 (en) Method for protecting the source code of a computer program
CN108133147B (zh) 可执行代码的保护方法、设备及可读存储介质
US8838996B2 (en) Non-transitory computer readable medium, program protection apparatus, and program protection method
CN114398598A (zh) 一种库文件加密方法、解密方法以及加密装置
US20130275688A1 (en) Data processing device and method
CN108021790B (zh) 文件保护方法、装置、计算设备及计算机存储介质
CN109614773B (zh) 代码自修改方法、装置及电子设备
KR101863325B1 (ko) 역공학 방지 방법 및 장치

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
TA01 Transfer of patent application right

Effective date of registration: 20201224

Address after: 4f, building C2, Suzhou 2.5 Industrial Park, 88 Dongchang Road, Suzhou Industrial Park, Jiangsu Province, 215000

Applicant after: JIANGSU TONGFUDUN INFORMATION SECURITY TECHNOLOGY Co.,Ltd.

Applicant after: JIANGSU PAY EGIS TECHNOLOGY Co.,Ltd.

Address before: 215021 4 building, 2.5 Industrial Park, building 2.5, Dongchang Road, Suzhou Industrial Park, Jiangsu, China, C2

Applicant before: JIANGSU TONGFUDUN INFORMATION SECURITY TECHNOLOGY Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant