代码混淆方法、装置、设备、介质以及程序产品与流程

文档序号:30790182发布日期:2022-07-16 09:43阅读:128来源:国知局
代码混淆方法、装置、设备、介质以及程序产品与流程

1.本公开涉及计算机技术领域,具体信息安全技术领域,更具体地涉及一种代码混淆方法、装置、设备、介质和程序产品。


背景技术:

2.随着应用软件逆向、反编译技术的快速发展,不法分子可以通过这些技术对发布后的应用代码进行调试分析,盗取软件核心算法、挖掘软件漏洞、甚至进行二次打包销售。利用代码混淆技术防止软件被非法用户恶意破解是一个非常有效的手段。但现有技术中,对于代码混淆往往在提升反编译难度的同时,会出现报错情况,同时,现有的代码混淆方法在操作系统的兼容性方面表现欠佳。
3.因此,如何在保证程序正常运行和操作系统兼容的前提下,提高反混淆难度,保证应用代码的安全性是本领域技术人员亟待解决的技术问题。


技术实现要素:

4.鉴于上述问题,本公开提供了提高场景兼容性和反混淆难度的代码混淆方法、装置、设备、介质和程序产品。
5.根据本公开的第一个方面,提供了一种代码混淆方法,包括:获取第一待混淆函数和第二待混淆函数;对所述第一待混淆函数执行第一混淆处理,得到第一代码片段,所述第一混淆处理包括改写所述第一待混淆函数的函数内容和调用关系;对所述第二待混淆函数执行第二混淆处理,得到第二代码片段,所述第二混淆处理包括改写所述第二待混淆函数的调用关系;以及在所述第一待混淆函数和所述第二待混淆函数完成相应的混淆处理后,得到混淆后的代码。
6.根据本公开的实施例,所述获取第一待混淆函数和第二待混淆函数包括:基于预设的关键函数清单,通过字符正则匹配筛选出所述第一待混淆函数和所述第二待混淆函数。
7.根据本公开的实施例,所述对所述第一待混淆函数执行第一混淆处理,得到第一代码片段,包括:提取所述第一待混淆函数中的函数内容,所述函数内容包括函数逻辑体信息;通过脚本语言的语法形式对所述函数逻辑体信息执行改写操作,得到第一脚本片段;遍历待混淆代码中调用所述第一待混淆函数的第一调用点;将所述第一调用点的所述第一待混淆函数替换为所述第一脚本片段;以及将所述第一调用点的调用关系改造成为反射调用,得到第一代码片段。
8.根据本公开的实施例,在所述通过脚本语言的语法形式对所述函数逻辑体信息执行改写操作,得到第一脚本片段后,所述方法还包括:基于预设的第一加密算法对所述第一脚本片段进行加密处理,得到加密后的第一脚本片段。
9.根据本公开的实施例,所述对所述第二待混淆函数执行第二混淆处理,得到第二代码片段,包括:识别所述第二待混淆函数的函数调用关系;基于不同的函数调用关系采用
相应的反射调用改造手段进行改造,得到所述第二代码片段。
10.根据本公开的实施例,在所述基于不同的函数调用关系采用相应的反射调用改造手段进行改造,得到所述第二代码片段后,所述方法还包括:提取反射调用涉及的第一关键词;基于预设的第二加密算法对所述第一关键词进行加密处理,得到第二关键词;以及基于预设的第二加密算法对应的解密算法添加解密函数调用,所述解密函数调用用于在运行第二代码片段时,解密所述第二关键词。
11.本公开的第二个方面,提供了一种代码混淆装置,包括:待混淆函数获取模块、第一混淆处理模块、第二混淆处理模块以及混淆代码获取模块,其中,所述待混淆函数获取模块,用于获取第一待混淆函数和第二待混淆函数;
12.所述第一混淆处理模块,用于对所述第一待混淆函数执行第一混淆处理,得到第一代码片段,所述第一混淆处理包括改写所述第一待混淆函数的函数内容和调用关系;所述第二混淆处理模块,用于对所述第二待混淆函数执行第二混淆处理,得到第二代码片段,所述第二混淆处理包括改写所述第二待混淆函数的调用关系;以及所述混淆代码获取模块,用于在所述第一待混淆函数和所述第二待混淆函数完成相应的混淆处理后,得到混淆后的代码。
13.本公开的第三方面提供了一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行上述代码混淆方法。
14.本公开的第四方面还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行上述代码混淆方法。
15.本公开的第五方面还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述代码混淆方法。
附图说明
16.通过以下参照附图对本公开实施例的描述,本公开的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
17.图1示意性示出了根据本公开实施例的代码混淆方法、装置、设备、介质和程序产品的应用场景图。
18.图2示意性示出了根据本公开实施例的代码混淆方法的流程图。
19.图3a示意性示出了根据本公开实施例的一种第一混淆处理方法的流程图。
20.图3b示意性示出了根据本公开实施例的另一种第一混淆处理方法的流程图。
21.图4a示意性示出了本公开实施例的一种第二混淆处理方法的流程图。
22.图4b示意性示出了本公开实施例的另一种第二混淆处理方法的流程图。
23.图5示意性示出了根据本公开实施例的代码混淆装置的结构框图。
24.图6示意性示出了根据本公开实施例的适于实现代码混淆方法的电子设备的方框图。
具体实施方式
25.以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性
的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
26.在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
27.在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
28.在使用类似于“a、b和c等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有a、b和c中至少一个的系统”应包括但不限于单独具有a、单独具有b、单独具有c、具有a和b、具有a和c、具有b和c、和/或具有a、b、c的系统等)。
29.以下对本公开实施例中所涉及的技术属于进行一一解释:
30.c++:一种面向对象编程的语言。
31.java:一种面向对象编程的语言。
32.javascript:一种广泛流行的脚本语言。
33.ruby:一种为简单快捷的面向对象编程而创的脚本语言。
34.超文本预处理器:(personal home page,缩写为php),一种服务器端脚本语言,具有面向对象的概念。
35.正则表达式:又称规则表达式,常用语检索、替换某些符合某个(规则)的文本。
36.正则匹配:一种通过正则表达式进行匹配的匹配规则。
37.反射机制:一种动态获取的信息和动态调用对象的方法的功能。
38.代码混淆:能够提高反编译难度且对代码进行操作的手段都可以叫做代码混淆。
39.现有技术中,传统的基于字符替换的代码混淆方法可能导致反射、类加载等功能出现异常;而基于内容的混淆并未能直接隐藏函数调用关系,只是增加了函数调用的复杂度,进而,对于白盒分析工具,仍能还原出程序调用流进而实现漏洞分析,另外对于java本地调用(java native interface,jni)方式的混淆方法,又缺乏良好的操作系统兼容性。
40.为解决现有技术中存在的技术问题,本公开的实施例提供了一种代码混淆方法,包括:获取第一待混淆函数和第二待混淆函数;对所述第一待混淆函数执行第一混淆处理,得到第一代码片段,所述第一混淆处理包括改写所述第一待混淆函数的函数内容和调用关系;对所述第二待混淆函数执行第二混淆处理,得到第二代码片段,所述第二混淆处理包括改写所述第二待混淆函数的调用关系;以及在所述第一待混淆函数和所述第二待混淆函数完成相应的混淆处理后,得到混淆后的代码。
41.在本公开的实施例中,筛选关键的第一待混淆函数和非关键的待混淆函数,并对第一待混淆函数的函数内容与调用关系做混淆,使得重要的函数在内容与调用关系都进行了混淆,而非关键的第二待混淆函数仅改造其调用关系,减少了工作量。同时,适当改写调用关系能够减少程序在运行过程中出现异常情况,使得程序能够正常运行。
42.图1示意性示出了根据本公开实施例的代码混淆方法的应用场景图。
43.如图1所示,根据该实施例的应用场景100可以包括终端设备101、102、103、网络104以及服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
44.用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
45.终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
46.服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。
47.需要说明的是,本公开实施例所提供的代码混淆方法一般可以由服务器105执行。相应地,本公开实施例所提供的代码混淆装置一般可以设置于服务器105中。本公开实施例所提供的代码混淆方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本公开实施例所提供的代码混淆装置也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群中。
48.应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
49.以下将基于图1描述的场景,通过图2~图4b对公开实施例的代码混淆方法进行详细描述。
50.图2示意性示出了根据本公开实施例的代码混淆方法的流程图。
51.如图2所示,该实施例的代码混淆方法包括操作s210~操作s240,该代码混淆方法可以服务器105执行。
52.在操作s210,获取第一待混淆函数和第二待混淆函数。
53.具体地,所述第一待混淆函数是对安全性要求较高的函数,所述第一待混淆函数可以看做是核心函数,该核心函数与业务策略高度关联,不同的业务策略中有不同的核心函数,例如,所述第一待混淆函数至少包括:加解密函数、配置函数、权限控制函数等;而第二待混淆函数可以看做是非核心函数,同样的,该非核心函数与业务策略高度关联,不同的业务策略中有不同的非核心函数,例如,所述第二待混淆函数至少包括:请求接收函数、页面渲染函数以及属性赋值函数等。
54.根据本公开的实施例,所述获取第一待混淆函数和第二待混淆函数包括:基于预设的关键函数清单通过字符正则匹配筛选所述第一待混淆函数和所述第二待混淆函数。
55.具体地,以字符正则匹配的方式识别出用户事先配置的需要进行混淆的函数清单。其中,一个函数可以由函数基本信息进行标识,所述函数基本信息包括:类名、函数名以及参数类型。也就是说,通过确定类名、函数名以及参数类型便能找到对应的函数。因此,基于预先设定的关键函数清单,通过字符正则匹配快速且全面地筛选出的第一待混淆函数和
第二待混淆函数。
56.在操作s220,对所述第一待混淆函数执行第一混淆处理,得到第一代码片段,所述第一混淆处理包括改写所述第一待混淆函数的函数内容和调用关系。
57.在操作s230,对所述第二待混淆函数执行第二混淆处理,得到第二代码片段,所述第二混淆处理包括改写所述第二待混淆函数的调用关系。
58.需要说明的是,在本公开的实施例中,所述第一待混淆函数可以看做是该段待混淆代码的核心函数,而第二待混淆函数即为非核心函数。因此,对于核心函数和非核心函数采用不同的混淆处理。对于第一待混淆函数不仅仅只对其调用关系做改造,还要对第一待混淆函数的函数内容做改造。将第一待混淆函数的函数内容改写成为脚本语言,然后,在对该第一待混淆函数的调用点的调用关系,改写为反射调用。对于第二待混淆函数,则直接改写其调用点的调用关系,改写为反射调用。
59.在操作s240,在所述第一待混淆函数和所述第二待混淆函数完成相应的混淆处理后,得到混淆后的代码。
60.具体地,所述第一待混淆函数和所述第二待混淆函数中包括多个函数,对于这些待混淆函数,可以基于具体场景,对这些函数的混淆数量进行设置。例如,可以选择混淆部分的第一待混淆函数和部分的第二待混淆函数。又例如,可以选择混淆所有的第一待混淆函数和所有的第二待混淆函数。在此不再赘述。
61.需要说明的是,在本公开的实施例中,所述待混淆代码可以由编程语言编写,尤其是面向对象的编程语言。例如,面向对象的编程语言可以是java、c++等常用的面向对象的编程语言。第一混淆处理改写的内容,可以是改写为脚本语言,所述脚本语言可以是任意的脚本语言。例如,可以是javascript、ruby以及php等常用的脚本语言。
62.在本公开的实施例中,筛选关键的第一待混淆函数和非关键的待混淆函数,并对第一待混淆函数的函数内容与调用关系做混淆,使得重要的函数在内容与调用关系都进行了混淆,而非关键的第二待混淆函数仅改造其调用关系,减少了工作量。同时,适当改写调用关系能够减少程序在运行过程中出现异常情况,使得程序能够正常运行。
63.图3a示意性示出了本公开实施例的一种第一混淆处理方法的流程图。
64.如图3a所示,该实施例的第一混淆处理方法对应操作s220,所述操作s220包括:操作s310~操作s350。
65.在操作s310,提取所述第一待混淆函数中的函数内容,所述函数内容包括函数逻辑体信息。
66.在操作s320,通过脚本语言的语法形式对所述函数逻辑体信息执行改写操作,得到第一脚本片段。
67.具体地,根据提取第一待混淆函数中的逻辑体信息,所述逻辑体信息可以理解为用于实现函数功能的代码。该代码用原编程语言的语法形式编写,将其改写为脚本语言的语法形式。例如,基于javascript脚本语言的语法形式,将java语言中的函数进行改写,得到javascript脚本的第一脚本片段。
68.需要说明的是,由于第一待混淆函数的函数内容进行了脚本语法转换,因此,所得到的第一脚本片段便以文本形式存在。而文本形式的数据又可存在于不同的操作系统当中,使得本公开的代码混淆方法提高了泛化性且具有广泛的应用场景。同时,现有的分析工
具多是面向例如java等常用的编程语言进行分析,在关键函数转化为javascript脚本语言后,缺乏对此类脚本语言的分析工具,一定程度上也提升了反编译难度。
69.在操作s330,遍历待混淆代码中调用所述第一待混淆函数的第一调用点。
70.在操作s340,将所述第一调用点的所述第一待混淆函数替换为所述第一脚本片段。
71.在操作s350,将所述第一调用点的调用关系改造成为反射调用,得到第一代码片段。
72.根据本公开的实施例,采用预设的传参函数执行在所述第一脚本片段和所述待混淆代码之间的传参。
73.具体地,在java的实施场景中,所述第一源函数和所述第一代码片段之间的传参函数可以是例如,engine.put(

name



value

)的方式完成值信息输入,另外,通过engine.get(

output")的方式带出脚本执行结果。其中,engine为java中的一个类,其中包括put函数和get函数,该put函数用于在将java语言中的输入参数传入javascript脚本,在javascript脚本执行相应逻辑后,执行结果由get函数传出至java语言。
74.举个简单的例子,在java的实时场景中,第一待混淆函数是以下add类的add(integer a,interger b)方法:
[0075][0076]
将上述add(integer a,integer b)的方法体(即函数逻辑体信息)改写成为以下第一脚本片段(以javascript脚本为例):
[0077]
var org;function add(a,b){return a+b+org}
[0078]
进一步地,在所述待混淆代码中所有调用到该add类的add(integer a,integer b)方法的地方改写成如下反射调用的形式:
[0079]
在本公开的实施例中,对关键的第一待混淆函数的内容改写为脚本语言,使得改写后的函数能够运行于多个系统,大大提高了代码的兼容性。并且,相应地,将该调用该函数的调用点找出,并改造为反射调用,增加了代码阅读难度,使得代码反编译的难度大大提升,同时反射调用自身还能降低程序运行的错误率。
[0080]
图3b示意性示出了本公开实施例的另一种第一混淆处理方法的流程图。
[0081]
如图3b所示,该实施例的另一种第一混淆处理方法除了操作s310~操作s350,还包括:操作s360。所述操作s360执行于操作s320后。
[0082]
在操作s360,基于预设的第一加密算法对所述第一脚本片段进行加密处理,得到加密后的第一脚本片段。
[0083]
具体地,所述预设的第一加密算法可以是现有的任意一种加密算法,通过该第一加密算法对第一脚本片段进行加密。可以理解的是,所述第一脚本片段作为一段文字和符号,对其执行加密处理。在正常执行相应代码时,获取密钥对加密后的第一脚本片段执行解密操作即可。
[0084]
在本公开的实施例中,对脚本片段加密,保证数据安全,在未获取到密钥的情况下,难以进行反编译。
[0085]
图4a示意性示出了本公开实施例的一种第二混淆处理方法的流程图。
[0086]
如图4a所示,该实施例的一种第二混淆处理方法的对应操作s230,操作s230包括:操作s410~操作s420。
[0087]
在操作s410,识别所述第二待混淆函数的函数调用关系。
[0088]
在操作s420,基于不同的函数调用关系采用相应的反射调用改造手段进行改造,得到所述第二代码片段。
[0089]
根据本公开的实施例,所述函数调用关系包括无参构造方法调用、带参构造方法调用、静态函数调用、非静态函数调用以及反射调用。
[0090]
具体地,所述相应的反射调用改造手段对于不同的调用关系不同,在不同的编程语言中的语法也不同。
[0091]
其中,以java的实施环境为例,无参构造方法调用改造为class.forname(

classname

).newinstance(),带参构造方法调用改造为class.forname(

classname

).getconstructor(参数类型).newinstance(参数值)。静态函数调用改造为class.forname(

classname

).getdeclaredmethod(

函数名

,参数类型).invoke(null,参数值)。非静态函数调用改造为class.forname(

classname

).getdeclaredmethod(

函数名

,参数类型).invoke(类对象,参数值)。对于本身即为反射的调用,则不进行函数调用结构的改造。
[0092]
举个例子,下面以eatfood函数为例,对该函数进行混淆的过程包括:首先提取eatfood函数存在的函数调用情况;可以提取出两条调用关系:1.new food(),即调用food类的无参构造函数;2.food.eated(

mearat"),即调用food类的非静态函数eated(string)。对其采用相应规则完成反射调用改造。
[0093][0094]
需要说明的是,在操作s340,对于调用关系的改造不需要识别函数调用关系,原因在于,当被调用点的调用关系为脚本时,则不属于无参构造方法调用、带参构造方法调用、静态函数调用、非静态函数调用以及反射调用的调用方式中的任一项,直接转化为反射调用即可。
[0095]
在本公开的实施例中,对于非关键的第二待混淆函数仅改造其调用关系,在未转化为脚本的情况下,其调用关系需要进行识别,在针对不同的调用关系采用不同的改造手段,改造为反射调用增加了代码阅读难度,使得代码反编译的难度大大提升,同时反射调用自身还能降低程序运行的错误率。
[0096]
图4b示意性示出了本公开实施例的另一种第二混淆处理方法的流程图。
[0097]
如图4b所示,该实施例的另一种第二混淆处理方法处理操作s410~操作s420,还包括:操作s430~操作s450。所述操作s430~操作s450执行于操作s420后。
[0098]
在操作s430,提取反射调用涉及的第一关键词。
[0099]
根据本公开的实施例,所述第一关键词包括类名、函数名以及字符型参数。
[0100]
在操作s440,基于预设的第二加密算法对所述第一关键词进行加密处理,得到第
二关键词。
[0101]
具体地,所述预设的第二加密算法可以是现有的任意一种加密算法,通过该第二加密算法对第一关键词进行加密,即分别对类名、函数名以及字符型参数进行加密,得到加密后的类名、加密后的函数名以及加密后的字符型参数。
[0102]
在操作s450,基于预设的第二加密算法对应的解密算法添加解密函数调用,所述解密函数调用用于在运行第二代码片段时,解密所述第二关键词。
[0103]
具体地,在获取到相关密钥的情况下,即可完成解密。
[0104]
例如,以上述eatfood函数为例,加密后的代码如下所示:
[0105]
在本公开的实施例中,除函数调用结构改造外,还会对反射中涉及的类名、函数名、字符型参数进行密文替代密文替代。加密隐藏第一关键词,使得未获取到秘钥的用户无法正常运行程序,对能获取到正确秘钥的合法用户,也能大幅提高其反混淆分析的难度,有效保障应用代码对外输出时的安全性。替代后增加解密函数调用,以保证正常功能的运行。
[0106]
基于上述代码混淆方法,本公开还提供了一种代码混淆装置。以下将结合图5对该装置进行详细描述。
[0107]
图5示意性示出了根据本公开实施例的代码混淆装置的结构框图。
[0108]
如图5所示,该实施例的代码混淆装置500包括待混淆函数获取模块510、第一混淆处理模块520、第二混淆处理模块530以及混淆代码获取模块540,其中,
[0109]
所述待混淆函数获取模块510,用于获取第一待混淆函数和第二待混淆函数。在一实施例中,所述待混淆函数获取模块510可以用于执行前文描述的操作s210,在此不再赘述。
[0110]
所述第一混淆处理模块520,用于对所述第一待混淆函数执行第一混淆处理,得到第一代码片段,所述第一混淆处理包括改写所述第一待混淆函数的函数内容和调用关系。
在一实施例中,所述第一混淆处理模块520可以用于执行前文描述的操作s220,在此不再赘述。
[0111]
所述第二混淆处理模块530,用于对所述第二待混淆函数执行第二混淆处理,得到第二代码片段,所述第二混淆处理包括改写所述第二待混淆函数的调用关系。在一实施例中,所述第二混淆处理模块530可以用于执行前文描述的操作s230,在此不再赘述。
[0112]
所述混淆代码获取模块540,用于在所述第一待混淆函数和所述第二待混淆函数完成相应的混淆处理后,得到混淆后的代码。在一实施例中,所述混淆代码获取模块540可以用于执行前文描述的操作s240,在此不再赘述。
[0113]
在本公开的实施例中,筛选关键的第一待混淆函数和非关键的待混淆函数,并对第一待混淆函数的函数内容与调用关系做混淆,使得重要的函数在内容与调用关系都进行了混淆,而非关键的第二待混淆函数仅改造其调用关系,减少了工作量。同时,适当改写调用关系能够减少程序在运行过程中出现异常情况,使得程序能够正常运行。
[0114]
根据本公开的实施例,所述待混淆函数获取模块510、所述第一混淆处理模块520、所述第二混淆处理模块530以及所述混淆代码获取模块540中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,所述待混淆函数获取模块510、所述第一混淆处理模块520、所述第二混淆处理模块530以及所述混淆代码获取模块540中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,所述待混淆函数获取模块510、所述第一混淆处理模块520、所述第二混淆处理模块530以及所述混淆代码获取模块540中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
[0115]
图6示意性示出了根据本公开实施例的适于实现代码混淆方法的电子设备的方框图。
[0116]
如图6所示,根据本公开实施例的电子设备600包括处理器601,其可以根据存储在只读存储器(rom)602中的程序或者从存储部分608加载到随机访问存储器(ram)603中的程序而执行各种适当的动作和处理。处理器601例如可以包括通用微处理器(例如cpu)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(asic))等等。处理器601还可以包括用于缓存用途的板载存储器。处理器601可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
[0117]
在ram 603中,存储有电子设备600操作所需的各种程序和数据。处理器601、rom 602以及ram 603通过总线604彼此相连。处理器601通过执行rom 602和/或ram 603中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除rom 602和ram 603以外的一个或多个存储器中。处理器601也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
[0118]
根据本公开的实施例,电子设备600还可以包括输入/输出(i/o)接口605,输入/输出(i/o)接口605也连接至总线604。电子设备600还可以包括连接至i/o接口605的以下部件
中的一项或多项:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至i/o接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
[0119]
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
[0120]
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的rom 602和/或ram 603和/或rom 602和ram 603以外的一个或多个存储器。
[0121]
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的物品推荐方法。
[0122]
在该计算机程序被处理器601执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
[0123]
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分609被下载和安装,和/或从可拆卸介质611被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
[0124]
在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被处理器601执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
[0125]
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如java,c++,python,“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备
(例如利用因特网服务提供商来通过因特网连接)。
[0126]
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0127]
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
[0128]
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1