CN117009931A - 水印添加和水印应用方法、装置、设备及存储介质 - Google Patents

水印添加和水印应用方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN117009931A
CN117009931A CN202211338785.4A CN202211338785A CN117009931A CN 117009931 A CN117009931 A CN 117009931A CN 202211338785 A CN202211338785 A CN 202211338785A CN 117009931 A CN117009931 A CN 117009931A
Authority
CN
China
Prior art keywords
code
target
information
watermark
application
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
Application number
CN202211338785.4A
Other languages
English (en)
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202211338785.4A priority Critical patent/CN117009931A/zh
Publication of CN117009931A publication Critical patent/CN117009931A/zh
Pending legal-status Critical Current

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/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/16Program or content traceability, e.g. by watermarking

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Editing Of Facsimile Originals (AREA)
  • Image Processing (AREA)

Abstract

本申请涉及计算机技术领域,提供一种水印添加和水印应用方法、装置、设备及存储介质,用以提升水印对应用程序的版权保护。其中,方法包括:获取目标应用的源代码的标识信息,以及开发目标应用的目标对象的身份信息;基于标识信息、身份信息和预设密钥,随机生成多个水印对应的字节序列;基于源代码的结构信息,分别将多个字节序列嵌入到源代码的对应位置,得到目标代码;基于目标代码,生成目标应用对应的多个水印。由于各水印的字节序列是随机生成的,互不相同,从而将多个字节序列分别嵌入到目标应用的源代码后,增加了水印的破解难度,提升了水印对目标应用版权的保护性能。

Description

水印添加和水印应用方法、装置、设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及水印添加和水印应用方法、装置、设备及存储介质。
背景技术
随着互联网技术和网络传输技术的发展,应用程序的复制越来越便利,相应地,针对应用程序版权的保护也越来越难。通过为应用程序添加水印,来达到版权保护的目的。
目前,相关技术为应用程序添加水印时,一般使用采用较长的文本串来生成水印,由于文本串较长,该文本串中的字符与伪水印的文本串中的字符的重合度较高,会增加该水印与伪水印的相似度,保护性较低,且相关技术中水印的生成方式较为单一,很容易被破解。
因此,保护应用程序的版权成为网络媒体时代亟待解决的问题。
发明内容
本申请实施例提供了水印添加和水印应用方法、装置、设备及存储介质,用于提升水印对应用程序的版权保护。
一方面,本申请实施例提供一种水印添加方法,包括:
获取目标应用的源代码的标识信息,以及开发所述目标应用的目标对象的身份信息;
基于所述标识信息、所述身份信息和预设密钥,随机生成多个字节序列;其中,每个字节序列包含所述标识信息和所述身份信息中,用于生成所述目标应用中添加的相应水印的元素;
基于所述源代码的结构信息,分别将所述多个字节序列嵌入到所述源代码的对应位置,得到目标代码;
基于所述目标代码,生成所述目标应用对应的多个水印。
另一方面,本申请实施例提供一种水印应用方法,所述方法包括:
获取添加多个水印的目标应用的目标代码;
基于所述目标代码中所述目标应用的源代码的结构信息,从各水印在所述目标代码中的对应位置,分别获取相应的字节序列;其中,每个字节序列是基于所述源代码的标识信息、开发所述目标应用的目标对象的身份信息和预设密钥随机生成的,包含所述标识信息和所述身份信息中用于生成所述目标应用中相应水印的元素;
基于获取的各字节序列包含的所述标识信息和所述身份信息中的元素,确定所述目标应用的版权。
另一方面,本申请实施例提供一种水印添加装置,包括:
获取模块,用于获取目标应用的源代码的标识信息,以及开发所述目标应用的目标对象的身份信息;
第一生成模块,用于基于所述标识信息、所述身份信息和预设密钥,随机生成多个字节序列;其中,每个字节序列包含所述标识信息和所述身份信息中,用于生成所述目标应用中添加的相应水印的元素;
嵌入模块,用于基于所述源代码的结构信息,分别将所述多个字节序列嵌入到所述源代码的对应位置,得到目标代码;
第二生成模块,用于基于所述目标代码,生成所述目标应用对应的多个水印。
可选的,所述结构信息至少包含:所述源代码中各函数块的位置信息,则所述嵌入模块具体用于:
针对每个字节序列,分别执行以下任意一种操作:
基于所述各函数块的位置信息,选取两个相邻的目标函数块,将一个字节序列嵌入到所述源代码的两个相邻的目标函数块之间;
基于所述各函数块的位置信息,选取一个目标函数块,将一个字节序列嵌入到所述源代码的一个目标函数块之前;
基于所述各函数块的位置信息,选取一个目标函数块,将一个字节序列嵌入到所述源代码的一个目标函数块之后。
可选的,所述结构信息至少包含:所述源代码中各逻辑功能块的位置信息,则所述嵌入模块具体用于:
针对每个字节序列,分别执行以下任意一种操作:
基于所述各逻辑功能块的位置信息,选取两个相邻的目标逻辑功能块,将一个字节序列嵌入到所述源代码的两个相邻的目标逻辑功能块之间;
基于所述各逻辑功能块的位置信息,选取一个目标逻辑功能块,将一个字节序列嵌入到所述源代码的一个目标逻辑功能块之前;
基于所述各逻辑功能块的位置信息,选取一个目标逻辑功能块,将一个字节序列嵌入到所述源代码的一个目标逻辑功能块之后。
可选的,所述源代码包含多个代码文件,且每个代码文件对应一个子标识信息;
则所述第一生成模块具体用于:
针对每个代码文件,执行以下操作:
基于一个代码文件的子标识信息、相应目标对象的身份信息和所述预设密钥,分别随机生成至少一个字节序列;
则所述嵌入模块具体用于:
基于所述一个代码文件的结构信息,分别将所述一个代码文件对应的至少一个字节序列嵌入到所述一个代码文件的对应位置,得到目标子代码;基于各个目标子代码,得到所述目标代码。
可选的,得到所述目标代码之前,所述嵌入模块还用于:
通过查询接口,获取各代码文件的水印添加任务信息,其中,所述水印添加任务信息至少包含水印添加失败的代码文件的子标识信息;
基于所述添加任务信息包含的子标识信息,重新生成所述子标识信息对应的代码文件的目标子代码。
可选的,所述添加任务信息至少还包含所述代码文件中水印添加失败的位置信息,则所述嵌入模块具体用于:
基于所述添加任务信息包含的子标识信息,从所述子标识信息对应的代码文件中水印添加失败的位置处开始,继续生成所述子标识信息对应的代码文件的目标子代码。
可选的,所述目标应用为应用程序中的小程序。
另一方面,本申请实施例提供一种水印应用装置,包括:
获取模,用于获取添加多个水印的目标应用的目标代码;以及,基于所述目标代码中所述目标应用的源代码的结构信息,从各水印在所述目标代码中的对应位置,分别获取相应的字节序列;其中,每个字节序列是基于所述源代码的标识信息、开发所述目标应用的目标对象的身份信息和预设密钥随机生成的,包含所述标识信息和所述身份信息中用于生成所述目标应用中相应水印的元素;
确定模块,用于基于获取的各字节序列包含的所述标识信息和所述身份信息中的元素,确定所述目标应用的版权。
可选的,所述目标代码包含多个代码文件,且每个代码文件对应一个子标识信息;
则所述获取模块具体用于:
将所述目标代码拆分为多个代码文件,针对每个代码文件,执行以下操作:
基于一个代码文件的结构信息,从各水印在所述一个代码文件中的对应位置,分别获取相应的字节序列,每个字节序列是基于所述一个代码文件的子标识信息、相应目标对象的身份信息和所述预设密钥随机生成的。
可选的,所述目标应用为应用程序中的小程序。
另一方面,本申请实施例提供一种电子设备,包括处理器和存储器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,实现上述水印添加方法和水印应用方法的步骤。
另一方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机可执行指令,所述计算机可执行指令被电子设备执行时实现上述水印添加方法和水印应用方法的步骤。
另一方面,本申请实施例提供一种计算机程序产品,包含计算机程序,所述计算机程序被电子设备执行时实现上述水印添加方法和水印应用方法的步骤。
本申请实施例的有益效果如下:
本申请实施例提供的水印添加方法和水印应用方法、装置、设备及存储介质,针对目标应用,通过目标应用的源代码的标识信息、开发目标应用的目标对象的身份信息和预设密钥,来生成用于对目标应用进行版权管理的水印对应的字节序列,由于标识信息和身份信息占据的数据量较小,字节序列中字符被重合的偶然性较低,因此,水印被破坏的可能性较低,对目标应用版权的保护性更强;同时,根据标识信息、身份信息和预设密钥随机生成了多个字节序列,由于是随机生成的,保证了各字节序列互不相同,从而将多个字节序列分别嵌入到目标应用的源代码后,增加了水印的破解难度,进一步提升了水印对目标应用版权的保护性能。另一方面,基于目标应用中添加的各个水印的字节序列中的元素,可以追溯到目标应用的发布平台、开发者等信息,作为侵犯版权的依据,更好的保护目标应用的版权。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例适用的一种应用场景图;
图2为本申请实施例提供的一种水印添加方法流程图;
图3A为本申请实施例提供的一种基于函数块的水印嵌入方法示意图;
图3B为本申请实施例提供的另一种基于函数块的水印嵌入方法示意图;
图3C为本申请实施例提供的另一种基于函数块的水印嵌入方法示意图;
图4A为本申请实施例提供的一种基于逻辑功能块的水印嵌入方法示意图;
图4B为本申请实施例提供的另一种基于逻辑功能块的水印嵌入方法示意图;
图4C为本申请实施例提供的另一种基于逻辑功能块的水印嵌入方法示意图;
图4D为本申请实施例提供的多种嵌入方式融合示意图;
图4E为本申请实施例提供的水印更新方式示意图;
图4F为本申请实施例提供的另一水印更新方式示意图;
图5为本申请实施例提供的为目标应用的源代码批量添加水印的示意图;
图6为本申请实施例提供的为水印批量添加的方法流程图;
图7A为本申请实施例提供的另一为目标应用的源代码批量添加水印的示意图;
图7B为本申请实施例提供的另一为目标应用的源代码批量添加水印的示意图;
图7C为本申请实施例提供的水印添加失败的告警示意图;
图8为本申请实施例提供的为水印应用方法的流程图;
图9为本申请实施例提供的为小程序添加水印的整体架构图;
图10为本申请实施例提供的为提取小程序中水印的整体架构图;
图11A为本申请实施例提供的水印添加前小程序的源代码示意图;
图11B为本申请实施例提供的水印添加后小程序的目标代码示意图;
图12为本申请实施例提供的一种水印添加装置的结构图;
图13为本申请实施例提供的一种水印应用装置的结构图;
图14为本申请实施例提供的一种电子设备的结构图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请技术方案的一部分实施例,而不是全部的实施例。基于本申请文件中记载的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请技术方案保护的范围。
为了方便理解,下面对本申请实施例中涉及的名词进行解释。
小程序:一种不需要下载安装即可使用的应用,通过扫一扫或者搜索即可打开的应用,如支付小程序、游戏小程序等。
虚拟机保护:将需要保护的原始代码转换为一种私有格式的字节码,由对应的虚拟机翻译、解释及运行,转换后的字节码能够完成与原始代码相同的功能和逻辑,是强度最高的代码保护方式之一。
逆向破解:通过分析受到保护的代码,获取其内部蕴含的功能和逻辑,防止目标应用被复制,保护目标应用的数字版权。
代码加固:通过虚拟机保护或其它方案,保护小程序、客户端应用或浏览器应用的源代码,提升逆向破解的难度。
代码水印:指对代码中插入特定的代码片段,经加固转换后,依然可以提取的标记,能够作为判断侵权行为的依据。
水印值:需要写入代码中用于追溯目标应用版权的信息(如:本申请实施例中目标应用的标识信息和开发目标应用的目标对象的身份信息等),即通常意义上的“水印”。
水印魔数:用于将水印值转换成字节序列的种子,可以理解为加密水印值的“密钥”。
云安全(Cloud Security):是指基于云计算商业模式应用的安全软件、硬件、用户、机构、安全云平台的总称。云安全融合了并行处理、网格计算、未知病毒行为判断等新兴技术和概念,通过网状的大量客户端对网络中软件行为的异常监测,获取互联网中木马、恶意程序的最新信息,并发送到服务端进行自动分析和处理,再把病毒和木马的解决方案分发到每一个客户端。
云安全主要研究方向包括:1、云计算安全,主要研究如何保障云自身及云上各种应用的安全,包括云计算机系统安全、用户数据的安全存储与隔离、用户接入认证、信息传输安全、网络攻击防护、合规审计等;2、安全基础设施的云化,主要研究如何采用云计算新建与整合安全基础设施资源,优化安全防护机制,包括通过云计算技术构建超大规模安全事件、信息采集与处理平台,实现对海量信息的采集与关联分析,提升全网安全事件把控能力及风险控制能力;3、云安全服务,主要研究各种基于云计算平台为用户提供的安全服务,如防病毒服务等。本申请实施例中的应用溯源管理方法可应用于云安全场景。
下面对本申请实施例的设计思想进行概述:
随着互联网技术和网络传输技术的发展,应用程序的复制越来越便利,通过添加水印来保护目标应用的版权也越来越难,目前主要面临以下两方面的问题:
第一、水印被检测的问题。
通过对水印进行检测,使水印暴露出来(Cropout),并将水印的文本串从代码中去除,或者用等价表达式来代替,从而破坏原始水印,版权保护失效。
第二、水印被攻击的问题。
被攻击的水印会导致水印无法被识别,从而导致版权保护失效。常见的水印攻击包括以下至少一种:
加性攻击:将新水印添加到代码中,使得无法再提取出原始水印,或者使得无法确定哪个水印是原始水印;
扭曲攻击:使代码经受诸如代码迷惑或代码优化的保留语义的变换,以期望水印被扭曲而无法识别;
减性攻击:确定水印在代码中的位置并将水印从代码中去除;
共谋攻击:使用不同的添加水印的代码来混淆原始水印的位置。
为了更好的保护版权,相关技术对应用程序进行水印处理时,大多采用代码混淆的方法,通过将多个字符(包含应用程序的字符,甚至还包含与应用程序无关的通用字符)生成较长的文本串,并将该文本串以水印形式添加到应用程序的代码中。一方面,由于文本串较长,该文本串中的字符与伪水印的文本串中的字符的重合度较高,会增加该水印与伪水印的相似度,对版权的保护性较低;另一方面,相关技术中水印的生成方式较为单一,很容易被破解;再一方面,相关技术通常使用外部工具或在线工具将文本串添加到应用程序的源代码中,完成后再将添加了文本串的目标代码下载到本地替换源代码,这样,水印添加过程中应用程序的源代码会暴露到外网,被破坏的风险较大,代码加固的安全等级较低。
鉴于此,本申请实施例提供一种水印添加方法和水印应用方法、装置、设备及存储介质,针对目标应用,通过目标应用的源代码的标识信息、开发目标应用的目标对象的身份信息和预设密钥,来生成用于对目标应用进行版权管理的水印对应的字节序列,由于标识信息和身份信息占据的数据量较小,字节序列中字符被重合的偶然性较低,因此,水印被破坏的可能性较低,对目标应用版权的保护性更强;同时,根据标识信息、身份信息和预设密钥随机生成了多个字节序列,由于是随机生成的,保证了各字节序列互不相同,从而将多个字节序列分别嵌入到目标应用的源代码后,增加了水印的破解难度,进一步提升了水印对目标应用版权的保护性能。此外,为目标应用添加水印后,基于水印的字节序列中的元素,可以追溯到目标应用的发布平台、开发者等信息,作为侵犯版权的依据,更好的保护目标应用的版权。
以下结合说明书附图对本申请的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本申请,并不用于限定本申请,并且在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
参考图1,其为本申请实施例的一种应用场景示意图,该应用场景图中包括两个终端设备110和一个服务器120。
在本申请实施例中,终端设备210包括但不限于手机、平板电脑、笔记本电脑、台式电脑、电子书阅读器、智能语音交互设备、智能家电、车载终端等设备;终端设备110中预先安装目标应用,其中,目标应用的类型可以为客户端应用、浏览器应用,还可以为应用程序中的小程序。小程序可以是支付小程序、办公小程序、短视频小程序、游戏小程序、美食小程序等。终端设备110可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能家电、智能语音交互设备、智能车载设备、飞行器等,但并不局限于此。
服务器120是目标应用的后台服务器,服务器120可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端设备110与服务器120可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
在一种可选的实施方式中,终端设备110与服务器120之间可以通过通信网络进行通信。
在一种可选的实施方式中,通信网络是有线网络或无线网络。
本申请实施例中的水印添加方法和水印应用方法可以是终端设备110执行,也可以由服务器120执行,还可以由终端设备110与服务器120交互执行。
以终端设备110执行本申请实施例中的水印添加方法举例来说,包括以下步骤:
终端设备110加载用于为目标应用添加水印的编辑器插件,并获取目标应用的源代码的标识信息和开发目标应用的目标对象的身份信息,通过软件开发工具包(SoftwareDevelopment Kit,简称SDK)中配置好的编辑器插件,采用水印随机生成函数,对获取的信息使用预设密钥加密后生成多个字节序列,并将多个字节序列分别嵌入到目标应用的源代码的不同位置处,完成对目标应用的代码加固,从而基于加固后的目标代码,自动为目标应用添加水印,保护目标应用的版权。整个水印添加过程开发者自身不需要进行任何冗余操作,目标应用所在的服务平台会对目标应用的源代码进行加固,预埋水印。
本申请实施例中,为目标应用添加水印时所使用的目标对象的身份信息(如目标对象的名字、头像、工号、以及目标对象所属的平台、部门等),是经过目标对象同意且授权的。本申请实施例对授权方式不做限制性要求。例如,授权方式可以在目标对象登陆目标应用的开发工具时,给出目标对象的身份信息用于生成水印的提示,或者,目标对象登陆目标应用的开发工具后,在个人中心的隐私设置中开启将身份信息用于生成水印的权限。
需要说明的是,图1所示只是举例说明,实际上终端设备和服务器的数量不受限制,在本申请实施例中不做具体限定。
本申请实施例中,当服务器的数量为多个时,多个服务器可组成为一区块链,而服务器为区块链上的节点;如本申请实施例所公开的水印添加和水印应用方法,其中所涉及的水印的数据可保存于区块链上,例如,标识信息和身份信息等。
此外,本申请实施例可应用于各种场景,包括但不限于云技术、人工智能、智慧交通、辅助驾驶等场景。
下面结合上述描述的应用场景,参考附图来描述本申请示例性实施方式提供的水印添加方法,需要注意的是,上述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施方式在此方面不受任何限制。
参阅图2所示,为本申请实施例提供的一种水印添加方法的实施流程图,以终端设备110为执行主体为例,该方法的具体实施流程如下:
S21:终端设备获取目标应用的源代码的标识信息,以及开发目标应用的目标对象的身份信息。
在一些实施例中,开发目标应用时,加载为目标应用添加水印的编辑器插件,编辑器插件可以作为通用的组件,嵌入到开发目标应用的SDK中,通过目标应用的源代码的标识信息以及开发目标应用的目标对象的身份信息,实现为目标应用添加水印的功能。
针对保护目标应用的全部或部分代码的版权的开发需求,通过引入轻量的编辑器插件,自动为目标应用添加水印,开发者自身不需要进行任何开发操作,操作十分便捷,且该编辑器插件能够满足不同开发者对代码保护的需求。
其中,编辑器插件在使用流程上,提供了主动配置和右键加入配置两种模式,降低开发者的使用门槛。
可选的,目标应用可以是客户端应用,也可以是浏览器应用,还可以是应用程序上的小程序,目标应用的源代码的标识信息包括但不限于源代码的ID号、名称、发布平台和存储路径,目标对象的身份信息包括但不限于目标对象的ID号和名称。
S22:终端设备基于标识信息、身份信息和预设密钥,随机生成多个字节序列。
在一些实施例中,将目标应用的源代码的标识信息和开发目标应用的目标对象的身份信息作为水印值,将预设密钥作为用于对水印值加密的水印魔数,通过将水印值和水印魔数输入到水印随机生成函数中,采用基于虚拟机保护的方式,生成多个不可读的字节序列(也称为字节码)。
其中,本申请实施例对字节序列的随机生成方式不做限制性要求。例如,可以标识信息中的元素打乱顺序后与身份信息拼接,还可以将身份信息中的元素打乱顺序后与标识信息拼接,还可以将标识信息中的元素和身份信息中的元素混合拼接。
通过多次调用水印随机生成函数,可以生成多个不同的字节序列,每个字节序列包含标识信息和身份信息中,用于生成目标应用中添加的相应水印的元素。相对于代码混淆方法中基于JavaScript语言编写的文本串,虚拟机保护方法生成的字节码形式,无可读性可言,难以进行逆向破解;且针对代码混淆的代码加固方法,有可用的调试工具便于对水印进行分析,而目前市面上还没有对虚拟机保护的代码加固方法进行分析的工具。
可选的,本申请的实施例中的水印魔数为一段固定且复杂的字符串。
由于水印随机生成函数是一个随机函数,由携带用于追溯目标应用版权的加密后的水印值来产生随机的字节序列,也就是说,每次调用水印随机生成函数的输入是相同的,但每次生成的字节序列是唯一的,与其他随机序列不同,这样,可以避免用于生成水印的字节序列重复而容易被侵权者发现水印规律,提高被破解的难度。同时,通过使用水印魔数对包含目标应用的标识信息和目标对象的身份信息的水印值进行加密,进一步提高了水印被逆向破解的难度。
需要说明的是,本申请实施例在生成字节序列时,可以使用目标应用的源代码的标识信息和目标对象的身份信息中的全部元素,也可以是使用从目标应用的源代码的标识信息和目标对象的身份信息中截取的部分元素。
S23:终端设备基于源代码的结构信息,分别将多个字节序列嵌入到源代码的对应位置,得到目标代码。
本申请的实施例中,基于目标应用的源代码的结构信息的不同,多个字节序列嵌入到源代码的位置也就不同。
可选的,源代码的结构信息至少包含各函数块的位置信息。其中,各函数块的位置信息可以用各函数块在源代码中的行号表示,不同函数块之间分别用至少一个分割符(如空格、{})分割,因此,可以基于源代码中的分隔符区分不同的函数块。
在一些实施例中,当结构信息包含源代码中各函数块的位置信息时,执行S23中基于源代码的结构信息,分别将多个字节序列嵌入到源代码中的对应位置时,针对每个字节序列,可以采用以下任意一种嵌入方式:
方式一:基于各函数块的位置信息,选取两个相邻的目标函数块,将一个字节序列嵌入到源代码的两个相邻的目标函数块之间。
以目标应用为美食小程序为例,如图3A所示,该美食小程序的源代码包含“插入美食图片1的函数块”、“插入美食图片2的函数块”、“美食配料表的函数块”、“第一步做法的函数块”、“第二步做法的函数块”、“第三步做法的函数块”和“推荐适合人群的函数块”共7个函数块,每两个函数块之间用空格分割,将调用6次水印随机生成函数生成的6个字节序列,分别嵌入到每两个函数块之间。
方式二:基于各函数块的位置信息,选取一个目标函数块,将一个字节序列嵌入到源代码的一个目标函数块之前。
仍以目标应用为美食小程序为例,如图3B所示,该美食小程序的源代码包含“插入美食图片1的函数块”、“插入美食图片2的函数块”、“美食配料表的函数块”、“第一步做法的函数块”、“第二步做法的函数块”、“第三步做法的函数块”和“推荐适合人群的函数块”共7个函数块,将调用7次水印随机生成函数生成的7个字节序列,分别嵌入到每个函数块之前。
方式三:基于各函数块的位置信息,选取一个目标函数块,将一个字节序列嵌入到源代码的一个目标函数块之后。
仍以目标应用为美食小程序为例,如图3C所示,该美食小程序的源代码包含“插入美食图片1的函数块”、“插入美食图片2的函数块”、“美食配料表的函数块”、“第一步做法的函数块”、“第二步做法的函数块”、“第三步做法的函数块”和“推荐适合人群的函数块”共7个函数块,将调用7次水印随机生成函数生成的7个字节序列,分别嵌入到每个函数块之后。
需要说明的是,本申请实施例在根据各函数块的位置信息,嵌入用于生成多个水印的字节序列时,嵌入方式可以采用以上方式一至方式三中的任意两种或三种的组合。
可选的,源代码的结构信息至少包含各逻辑功能块的位置信息,各逻辑功能块的位置信息可以有多种表示方式。
例如,各逻辑功能块的位置信息可以用各逻辑功能块在源代码中的工程模块名表示,不同逻辑功能块的工程模块名不同,因此,可以基于源代码中的工程模块名区分不同的逻辑功能块。
再例如,各逻辑功能块的位置信息可以用各逻辑功能块在源代码中的代码类型(如HTML、Java、JS等)表示,不同逻辑功能块的代码类型不同,因此,可以基于源代码中的代码类型区分不同的逻辑功能块。
在一些实施例中,当结构信息包含源代码中各逻辑功能块的位置信息时,执行S23中基于源代码的结构信息,分别将多个字节序列嵌入到源代码中的对应位置时,针对每个字节序列,可以采用以下任意一种嵌入方式:
方式一:基于各逻辑功能块的位置信息,选取两个相邻的目标逻辑功能块,将一个字节序列嵌入到源代码的两个相邻的目标逻辑功能块之间。
仍以目标应用为美食小程序为例,如图4A所示,该美食小程序的源代码包含“插入美食图片的逻辑功能块”、“美食配料表的逻辑功能块”、“美食做法的逻辑功能块”和“推荐适合人群的逻辑功能块”共4个逻辑功能块,将调用3次水印随机生成函数生成的3个字节序列,分别嵌入到每两个逻辑功能块之间。
方式二:基于各逻辑功能块的位置信息,选取一个目标逻辑功能块,将一个字节序列嵌入到源代码的一个目标逻辑功能块之前。
仍以目标应用为美食小程序为例,如图4B所示,该美食小程序的源代码包含“插入美食图片的逻辑功能块”、“美食配料表的逻辑功能块”、“美食做法的逻辑功能块”和“推荐适合人群的逻辑功能块”共4个逻辑功能块,将调用4次水印随机生成函数生成的4个字节序列,分别嵌入到每个逻辑功能块之前。
方式三:基于各逻辑功能块的位置信息,选取一个目标逻辑功能块,将一个字节序列嵌入到源代码的一个目标逻辑功能块之后。
仍以目标应用为美食小程序为例,如图4C所示,该美食小程序的源代码包含“插入美食图片的逻辑功能块”、“美食配料表的逻辑功能块”、“美食做法的逻辑功能块”和“推荐适合人群的逻辑功能块”共4个逻辑功能块,将调用4次水印随机生成函数生成的4个字节序列,分别嵌入到每个逻辑功能块之后。
需要说明的是,本申请实施例在根据各逻辑功能块的位置信息,嵌入用于生成多个水印的字节序列时,嵌入方式可以采用以上方式一至方式三中的任意两种或三种的组合。
在一些实施例中,可以基于各函数块的位置信息和各逻辑功能块的位置信息,在源代码中嵌入不同的字节序列。
仍以目标应用为美食小程序为例,如图4D所示,该美食小程序的源代码包含“插入美食图片的逻辑功能块”、“美食配料表的逻辑功能块”、“美食做法的逻辑功能块”和“推荐适合人群的逻辑功能块”共4个逻辑功能块,其中,“美食做法的逻辑功能块”中又包含“第一步做法的函数块”、“第二步做法的函数块”、“第三步做法的函数块”,当需要在各逻辑功能块之间和各函数块之间嵌入用于生成水印的字节序列时,则调用5次水印随机生成函数,将每次生成的字节序列分别嵌入各逻辑功能块之间以及各函数块之间。
本申请实施例中,采用基于虚拟机保护方法随机生成的多个字节序列,将多个字节序列,“多次少量”的自动嵌入到目标应用的源代码中,且每次嵌入的字节序列不同,加固后地目标代码的复杂度较高、可读性很低,抗干扰能力强,可以提高了水印的逆向破解难度,使得侵权行为(如复制、转发等)无法准确的定位到水印的位置和内容,因此无法对水印进行攻击。
由于生成多个水印的字节序列包含目标应用的标识信息和目标对象的身份信息这两个轻量级的数据,因此,将不同的字节序列“多次少量”的嵌入到目标应用的源代码的缝隙(如函数块之间、之前和之后,或者逻辑功能块之间、之前和之后)时,不会影响目标应用的源代码的结构,代码加固后对源代码的性能影响较低,能够保证源代码的正常运行。随着嵌入次数的增加,逆向破解难度增大,且由于字节序列数据量较轻,每次生成的字节序列各不相同,即便多次嵌入,也不会增加源代码的数据冗余量。
本申请实施例中,在对目标应用的源代码进行加固时,可以记录用于生成多个水印的字节序列的嵌入位置,并将用于生成多个水印的字节序列与源代码进行关联,以便后续用于判断是否侵犯版权的依据。
可选的,在一些实施例中,将多个字节序列嵌入到目标应用的源代码的对应位置后,还可以使用生成字节序列时的水印魔数,对目标应用的源代码进行加密,得到目标代码,从而通过水印值和源代码的双重加密,提高目标代码被解的难度。
S24:终端设备基于目标代码,生成目标应用对应的多个水印。
本申请的实施例中,为目标应用添加水印时,通过简单的编辑器插件配置便可自动实现代码加固,目标应用的开发者对水印是无感的;并且,通过采用虚拟机保护的代码加固方法为目标应用添加多个水印,由于加固后的目标代码是不可读的且侵权者不可见,侵权者无法感知水印的存在,无法辨识目标应用的水印,只能复用目标应用加固后的目标代码,降低了水印被破坏的可能性,从而提高了目标应用版权保护的安全性。再者,虚拟机保护方法通过虚拟机保护目标应用的源代码,逆向破解需要首先攻破虚拟机本身,才能攻击目标应用的目标代码,因此,虚拟机自身构成了对抗逆向破解的第一道防线,而代码混淆方法则不存在第一道全防线,侵权者可以直接对目标应用的代码进行攻击。
在实际开发过程中,目标应用通常会通过升级进行版本更新,这样,目标应用的源代码就会发生更新,此时,可以对目标应用的水印进行更新。其中,根据源代码更新方式和更新对象的不同,水印更新的方式也不同。
可选的,当目标应用版本更新时增加代码的情况下,基于目标应用的源代码中的新增代码的位置信息,在相应位置处增加用于生成水印的字节序列。
例如,以目标应用为通信APP为例,目标应用版本更新时,目标对象增加了新的代码,如图4E中的(a)所示,版本更新前,通信APP的源代码包含语音逻辑功能块、视频逻辑功能块、文字输入逻辑功能块这三个逻辑功能块的代码,各功能块之间分别嵌入了用于生成水印的字节序列。在进行版本更新后,如图4E中的(b)所示,通信APP的源代码中增加了表情管理逻辑功能块的代码,此时,在调用一次水印随机生成函数,基于源代码的标识和目标对象的身份信息,生成用于生成水印的字节序列3,并将字节序列3嵌入到文字输入逻辑功能块和表情管理逻辑功能块之间。
可选的,当目标应用版本更新时修改源代码的情况下,基于修改目标应用的源代码的目标对象的身份信息,重新生成字节序列,并用新的字节序列替换原来的字节序列。
例如,仍以目标应用为通信APP为例,目标应用版本更新时,目标对象2修改了目标对象1开发的源代码,如图4F中的(a)所示,版本更新前,通信APP的源代码包含语音逻辑功能块、视频逻辑功能块、文字输入逻辑功能块这三个逻辑功能块的代码均是目标对象1开发的,各功能块之间分别嵌入了用于生成水印的字节序列。在进行版本更新后,如图4F中的(b)所示,目标对象2修改了视频逻辑功能块的代码,使得目标应用能够从视频模式切换为语音模式,此时,在调用一次水印随机生成函数,基于源代码的标识、目标对象1的身份信息和目标对象2的身份信息,生成用于生成水印的字节序列1’,并用字节序列1’替换原来的字节序列1,并嵌入到语音逻辑功能块和视频逻辑功能块之间。
针对复杂的目标应用的开发,其源代码包含多个代码文件,当需要为目标应用添加水印时,多个代码文件可能会被一次性提交到编辑器插件。而多个代码文件是相互独立的,因此,可以将一次性提交的源代码进行拆解,将源代码拆解为多个代码文件,从而将为目标应用添加水印的任务拆解为多个独立的小任务并行执行,实现批处理功能,从而将源代码的水印添加耗时,减少到为单个代码文件添加水印所需的时间。
在一种可选的实施方式中,当需要保护目标应用的全部代码,且该目标应用由同一目标对象开发时,将目标应用的源代码拆分为多个代码文件,针对每个代码文件,将使用该目标应用的源代码的标识信息和开发该目标应用的目标对象的身份信息生成的至少一个字节序列,分别嵌入到该代码文件中。
例如,批处理过程如图5所示,假设该目标应用的源代码的标识信息为“Program_123”,开发该目标应用的目标对象的身份信息为“Developer_lili”,该目标应用的源代码可拆解为3个代码文件,则使用标识信息“Program_123”和身份信息“Developer_lili”生成的多个字节序列,并行嵌入到这3个代码文件中,每个代码文件中可嵌入N个字节序列,N为大于等于1的整数。
在另一种可选的实施方式中,针对目标应用的源代码包含多个代码文件,且每个代码文件对应一个子标识信息的情况,可使用异步消息队列来对批量添加水印。
为该目标应用添加水印的批处理过程参见图6,主要包括以下几步:
S61:将源代码拆分为多个代码文件。
其中,源代码拆分为多个代码文件的依据包括但不限于代码文件的名称、代码文件的大小、代码文件的功能,每个子代码文件对应一个的子标识信息。
可选的,将目标应用的源代码拆分为多个代码文件的过程中,会为每个代码文件生成一个添加水印的任务ID,并任务ID与相应的代码文件绑定在一起存储到消息队列中。
可选的,不同子代码文件可以对应一个目标对象,也可以对应不同的目标对象,也就是说,一个目标对象可以开发目标应用的一个或多个代码文件。
进一步地,针对每个代码文件,同时执行S62-S63的操作。
S62:基于一个代码文件的子标识信息、相应目标对象的身份信息和预设密钥,分别随机生成至少一个字节序列。
其中,一个子代码文件的对应的至少一个字节序列的生成方式参见前述实施例,在此不再描述。
得到每个代码文件对应的至少一个字节序列后,将至少一个字节序列与相应的代码文件进行关联,也存储到多个代码文件的消息队列中。
S63:基于一个代码文件的结构信息,分别将一个代码文件对应的至少一个字节序列嵌入到一个代码文件的对应位置,得到目标子代码。
其中,为每个子代码文件嵌入对应的至少一个字节序列方式参见前述实施例,在此不再描述。
可选的,为消息队列中的各个代码文件添加水印时,消息队列的各贮列记录了相应代码文件的水印添加任务信息。其中,水印添加任务信息包括但不限于:水印添加失败的代码文件的子标识信息、水印添加成功的代码文件的子标识信息、水印添加失败的位置信息、水印添加失败(包括字节序列生成失败或者字节序列嵌入失败)的次数、水印添加的耗时。
S64:基于各个目标子代码,得到目标代码。
S65:基于目标代码,生成目标应用对应的多个水印。
本申请实施例中,通过将目标应用的源代码拆分为多个代码文件,并把每个代码文件与对应的用于生成水印的至少一个字节序列放入到消息队列中,由于消息队列本身时异步的,每一个贮列记录了一个代码文件的水印添加任务信息,这样,目标对象在开发过程中无需等待水印添加完成便可继续执行下一步骤的开发,当需要获取水印的添加任务信息时,通过读取消息队列便可以获得水印添加的详情,便于目标对象对代码文件进行水印添加任务的自测。同时,由于多个水印添加任务在消息队列中是相互独立、互补干扰、同时进行的,因此,多个代码文件的水印添加任务的耗时几乎接近一个代码文件的水印任务的耗时,水印添加效率更高。
下面结合具体示例描述图6所示的批处理过程。
例如,当目标应用源代码包含的多个代码文件为同一目标对象开发的时,批处理过程如图7A所示,假设该目标应用的源代码的标识信息为“Program_123”,开发该目标应用的目标对象的身份信息为“Developer_lili”,该目标应用的源代码可拆解为3个代码文件,这3个代码文件的标识信息分别为“Program_1”、“Program_2”和“Program_3”,则使用标识信息“Program_1”和身份信息“Developer_lili”随机生成N个字节序列1,使用标识信息“Program_2”和身份信息“Developer_lili”随机生成N个字节序列2,使用标识信息“Program_3”和身份信息“Developer_lili”随机生成N个字节序列3,将N个字节序列1、2、3分别同时嵌入到代码文件1、2、3中。
再例如,当目标应用源代码包含的多个代码文件为不同目标对象开发的时,批处理过程如图7B所示,假设该目标应用的源代码的标识信息为“Program_123”,该目标应用的源代码可拆解为3个代码文件,这3个代码文件的标识信息分别为“Program_1”、“Program_2”和“Program_3”,且分别为“zhangsan”、“lisi”和“wangwu”开发的时,则使用标识信息“Program_1”和身份信息“Developer_zhangsan”随机生成N个不同的字节序列1,使用标识信息“Program_2”和身份信息“Developer_lisi”随机生成N个字节序列2,使用标识信息“Program_3”和身份信息“Developer_wangwu”随机生成N个字节序列3,将N个字节序列1、2、3同时嵌入到代码文件1、2、3中。
为目标应用添加水印的过程中,可能会有各种突发的程序异常导致水印的字节序列生成或者嵌入失败的情况,而消息队列的各贮列分别记录了目标应用的源代码包含的各代码文件的水印添加任务信息,通过SDK提供的查询接口,获取各代码文件的水印添加任务信息,从而获得水印添加的详情,保证水印能够可靠地嵌入到目标应用的源代码中。
具体实施时,通过第一查询接口,获取各代码文件的水印添加任务信息,由于水印添加任务信息至少包含水印添加失败的代码文件的子标识信息,因此,基于添加任务信息包含的子标识信息,重新生成子标识信息对应的代码文件的目标子代码。其中,重新生成目标子代码的信息也会被记录在消息队列中。
水印对应的字节序列生成失败或者字节序列嵌入失败,均会导致水印添加失败。可选的,当某个代码文件的水印添加失败时,可基于水印任务添加信息中代码文件中水印添加失败的位置信息(如代码的步骤),重新生成该代码文件对应的目标子代码。
具体实施时,基于添加任务信息包含的子标识信息,从子标识信息对应的代码文件中水印添加失败的位置处开始,继续生成子标识信息对应的代码文件的目标子代码。
可选的,重新为水印添加失败的代码文件生成目标子代码时,若水印任务添加信息中水印添加失败的次数超过预设次数,或者,水印任务添加信息中水印添加的耗时超过预设时长,则显示告警信息,该告警信息包含水印添加失败的详细信息,以便目标对象根据水印添加失败的详细信息进行定位和修复。
例如,如图7C所示,当水印添加失败时,会在开发界面弹出告警信息,目标对象通过点击“详细信息”左方的三角,可以查看水印添加失败的详细信息,从而定位水印添加失败的原因。
可选的,详细信息包括但不限于水印添加失败的代码文件的子标识信息,水印添加失败的代码行数,水印随机生成函数调用失败等。
例如,当详细信息给出水印添加失败的代码行数,目标对象快速定位出到目标应用的源代码的相应位置处,并对该行代码进行修改,从而保证水印被成功添加。
本申请实施例中,用于水印生成的编辑器插件协同SDK在代码编译环节做了一系列超时、失败的处置,生成了水印添加任务信息,可以避免了对目标应用的源代码进行加固时遇到的问题影响上线流程,同时,编辑器插件实现了多任务并行、重新添加和检测告警等操作,能够主动进行问题定位和修复,提升水印添加的效率。
在实际应用过程中,当目标应用的版权被侵犯时,可提取目标应用的目标代码中的水印,作为判断是否侵犯版权的依据。在水印添加方法中,用于生成多个水印的字节序列已经被添加到了目标应用的源代码中,即使侵权者通过各类方法(如再次加固)破坏水印,目标应用的平台依然可以从加固后的目标代码中提取水印的信息,从而验证侵权行为。
鉴于此,本申请实施例提供了一种水印应用方法,该方法的流程可以由图1所示的终端设备110执行,也可以由图1所示的服务器120执行,也可以由二者共同执行。以终端设备110执行为例,如图8所示,包括以下步骤:
S81:终端设备获取添加多个水印的目标应用的目标代码。
为目标应用添加多个水印后,目标应用的目标代码中,包含多个水印对应的字节序列,以及目标应用的源代码。
S82:终端设备基于目标代码中目标应用的源代码的结构信息,从各水印在目标代码中的对应位置,分别获取相应的字节序列。
其中,目标应用加固后的目标代码中多个字节序列的嵌入位置,是基于目标应用的源代码的结构信息有规则嵌入的,因此,可以按照嵌入的规则,从各个水印在目标代码中的对应位置处,分别获取相应的字节序列。
可选的,当源代码的结构信息包含源代码中各函数块的位置信息时,获取相应的字节序列的方式包含以下任意一种:
以图3A所示的字节序列嵌入方式为例,可从两个相邻的目标函数块之间获取一个字节序列;
以图3B所示的字节序列嵌入方式,可从一个目标函数块之前获取一个字节序列;
以图3C所示的字节序列嵌入方式,可从一个目标函数块之后获取一个字节序列。
可选的,当源代码的结构信息包含源代码中各逻辑功能块的位置信息时,获取相应的字节序列的方式包含以下任意一种:
以图4A所示的字节序列嵌入方式,可从两个相邻的目标逻辑功能块之间获取一个字节序列;
以图4B所示的字节序列嵌入方式,可从一个目标逻辑功能块之前获取一个字节序列;
以图4C所示的字节序列嵌入方式,可从一个目标逻辑功能块之后获取一个字节序列。
S83:终端设备基于获取的各字节序列包含的标识信息和身份信息中的元素,确定目标应用的版权。
由上述字节序列的生成过程可知,每个字节序列是基于目标应用的源代码的标识信息、开发目标应用的目标对象的身份信息和预设密钥随机生成的,因此,每个字节序列包含源代码的标识信息和目标对象的身份信息中用于生成目标应用中添加的相应水印的元素,从而通过对标识信息和身份信息中的元素进行分析,可以确定目标应用的版权。
可选的,上述水印应用方法,可基于本申请实施例针对水印添加方法提供的水印提取工具实现,该工具可以为编辑器插件,也可以应用程序。通过对添加水印后的目标应用的目标代码进行逆向分析,可以快速提取出水印值,并将水印值拆解后,得到目标对象的身份信息以及目标应用的源代码的标识信息。
本申请实施例中,当需要对目标应用版权进行鉴权时,只需获取到加固后地目标代码,通过配套的水印提取工具,便可以通过逆向解析,获取目标对象的身份信息和目标应用的源代码的标识信息,根据这些信息可以方便快速的追溯到源码归属,从而判断是否存在侵权行为。同时,通过配套的水印提取工具,开发者也可以对水印添加方法进行验证。
在一些实施例中,由于为目标应用添加水印时,是基于目标应用的源代码的结构嵌入的字节序列,因此,嵌入字节序列后的目标代码并没有破坏源代码的结构,保证了源代码的完整性,这样,当获取到各字节序列包含的所述标识信息中的元素后,通过水印提取工具,还可以基于字节序列中逆向解析出的标识信息中的元素,从目标应用中的源代码。
可选的,当目标应用的目标代码包含多个代码文件,且每个代码文件对应一个子标识信息时,在S83中分别获取相应的字节序列的具体方式为:将目标代码拆分为多个代码文件,针对每个代码文件,执行以下操作:基于一个代码文件的结构信息,从各水印在一个代码文件中的对应位置,分别获取相应的字节序列,每个字节序列是基于一个代码文件的子标识信息、相应目标对象的身份信息和预设密钥随机生成的。
本申请实施例提供的水印添加和水印应用方法,不仅适用于为客户端应用中添加水印,也适用于为浏览器应用添加水印,还适用于为应用程序中的小程序添加水印。
可选的,当目标应用为小程序时,为小程序中添加水印的方法架构图如图9所示,首先小程序加载用于添加水印的编辑器插件,然后获取的小程序的源代码的标识信息和开发小程序的目标对象的身份信息,将源代码的标识信息和目标对象的身份信息,通过拼接方式组合为水印值,并使用一段固定且复杂的字符串生成用于对水印值加密的水印魔数,进一步地,将水印值和水印魔数输入到水印随机生成函数中,每次调用水印随机生成函数,会生成一个字节序列,并将该字节序列嵌入到源代码的相应位置处。通过多次调用水印随机生成函数,会在源代码的多个位置处嵌入多个字节序列,从而生成包含多个水印的小程序。其中,每次生成字节序列的过程中,会使用水印魔数对水印值进行加密。
本申请实施例提供的水印添加方法,在国内外的小程序开工具中,是首次对小程序进行基于虚拟机保护的代码水印加固方法,可以保护小程序的版权。同时,通过用于生成水印的字节序列对小程序的源代码进行加固,除了该方法的保护方式能够提高水印被破坏的难度,加大版权的保护力度外,小程序所在应用程序的平台,也提供极强的安全防护服务,能够更好的保护小程序的源代码。
可选的,当目标应用为小程序时,确定小程序版权的方法框架如图10所示,首先开启水印提取工具,进行数据加载,得到添加水印后的目标应用的目标代码,以及对用于对水印进行加密的一段固定且复杂的字符串组成水印魔数,然后用水印魔数解密出多个水印值,并对水印值进行反解,得到目标应用的源代码的标识信息,以及开发目标应用的目标对象的身份信息,最后根据标识信息获取目标应用的源代码,以及根据身份信息验证目标对象的身份,从而确定该目标应用是由目标对象开发的,侵权者是复制的,从而保护目标应用的版权。
本申请实施例提供的水印应用方法,由于添加的水印是无感的,侵权者难以发现,当复制小程序的代码时,会直接将嵌入多个水印的字节序列的目标代码进行复制,从而通过目标代码中的水印,保护小程序的版权信息。
以目标应用为美食小程序为例,如图11A所示,为水印添加前美食小程序“WeChat-Food-Mini-APP”的源代码示意图,源代码包含“main.js”代码文件,该代码文件的标识信息为“ID_one”,对应的目标对象的身份信息为“Developer_sun”,在源代码的“main.js”代码文件中,包含“onRead:function()”和“shareMessage:function()”两个函数块。基于“main.js”代码文件的标识信息“ID_one”和身份信息“Developer_sun”,采用基于虚拟机保护的方法,随机生成用于添加水印的字节序列“ID_one#Developer_sun”,将这个字节序列嵌入到“main.js”代码文件的这两个函数块之间,嵌入后的结果如图11B所示,由于“ID_one#Developer_sun”不可见,因此在图11B中用浅色字体表示。这样,侵权者在复制该美食小程序的代码时,会直接复制水印嵌入后的目标代码,通过目标代码币向分析,可以得到该美食小程序的源代码和目标对象的身份,从而保护该美食小程序的版权。
基于相同的技术构思,本申请实施例提供了一种水印添加装置的结构示意图,应用于终端设备或服务器,该水印添加装置能够实现上述水印添加方法,且能达到相同的技术效果。
如图12所示,该水印添加装置1200包括:
获取模块1201,用于获取目标应用的源代码的标识信息,以及开发目标应用的目标对象的身份信息;
第一生成模块1202,用于基于标识信息、身份信息和预设密钥,随机生成多个字节序列;其中,每个字节序列包含标识信息和身份信息中,用于生成目标应用中添加的相应水印的元素;
嵌入模块1203,用于基于源代码的结构信息,分别将多个字节序列嵌入到源代码的对应位置,得到目标代码;
第二生成模块1204,用于基于目标代码,生成目标应用对应的多个水印。
可选的,结构信息至少包含:源代码中各函数块的位置信息,则嵌入模块1203具体用于:
针对每个字节序列,分别执行以下任意一种操作:
基于各函数块的位置信息,选取两个相邻的目标函数块,将一个字节序列嵌入到源代码的两个相邻的目标函数块之间;
基于各函数块的位置信息,选取一个目标函数块,将一个字节序列嵌入到源代码的一个目标函数块之前;
基于各函数块的位置信息,选取一个目标函数块,将一个字节序列嵌入到源代码的一个目标函数块之后。
可选的,结构信息至少包含:源代码中各逻辑功能块的位置信息,则嵌入模块1230具体用于:
针对每个字节序列,分别执行以下任意一种操作:
基于各逻辑功能块的位置信息,选取两个相邻的目标逻辑功能块,将一个字节序列嵌入到源代码的两个相邻的目标逻辑功能块之间;
基于各逻辑功能块的位置信息,选取一个目标逻辑功能块,将一个字节序列嵌入到源代码的一个目标逻辑功能块之前;
基于各逻辑功能块的位置信息,选取一个目标逻辑功能块,将一个字节序列嵌入到源代码的一个目标逻辑功能块之后。
可选的,源代码包含多个代码文件,且每个代码文件对应一个子标识信息;
则第一生成模块1202具体用于:
针对每个代码文件,执行以下操作:
基于一个代码文件的子标识信息、相应目标对象的身份信息和预设密钥,分别随机生成至少一个字节序列;
则嵌入模块1203具体用于:
基于一个代码文件的结构信息,分别将一个代码文件对应的至少一个字节序列嵌入到一个代码文件的对应位置,得到目标子代码;基于各个目标子代码,得到目标代码。
可选的,得到目标代码之前,嵌入模块1203还用于:
通过查询接口,获取各代码文件的水印添加任务信息,其中,水印添加任务信息至少包含水印添加失败的代码文件的子标识信息;
基于添加任务信息包含的子标识信息,重新生成子标识信息对应的代码文件的目标子代码。
可选的,添加任务信息至少还包含代码文件中水印添加失败的位置信息,则嵌入模块1203具体用于:
基于添加任务信息包含的子标识信息,从子标识信息对应的代码文件中水印添加失败的位置处开始,继续生成子标识信息对应的代码文件的目标子代码。
可选的,目标应用为应用程序中的小程序。
基于相同的技术构思,本申请实施例提供了一种水印应用装置的结构示意图,应用于终端设备或服务器,该水印添应用置能够实现上述水印应用方法,且能达到相同的技术效果。
如图13所示,该水印应用装置1300包括:
获取模块1301,用于获取添加多个水印的目标应用的目标代码;以及,基于目标代码中目标应用的源代码的结构信息,从各水印在目标代码中的对应位置,分别获取相应的字节序列;其中,每个字节序列是基于源代码的标识信息、开发目标应用的目标对象的身份信息和预设密钥随机生成的,包含标识信息和身份信息中用于生成目标应用中相应水印的元素;
确定模块1302,用于基于获取的各字节序列包含的标识信息和身份信息中的元素,确定目标应用的版权。
可选的,目标代码包含多个代码文件,且每个代码文件对应一个子标识信息;
则获取模块1301具体用于:
将目标代码拆分为多个代码文件,针对每个代码文件,执行以下操作:
基于一个代码文件的结构信息,从各水印在一个代码文件中的对应位置,分别获取相应的字节序列,每个字节序列是基于一个代码文件的子标识信息、相应目标对象的身份信息和预设密钥随机生成的。
可选的,目标应用为应用程序中的小程序。
本申请实施例中,针对目标应用,通过目标应用的源代码的标识信息、开发目标应用的目标对象的身份信息和预设密钥,来生成用于对目标应用进行版权管理的水印对应的字节序列,由于标识信息和身份信息占据的数据量较小,字节序列中字符被重合的偶然性较低,因此,水印被破坏的可能性较低,对目标应用版权的保护性更强;同时,根据标识信息、身份信息和预设密钥随机生成了多个字节序列,由于是随机生成的,保证了各字节序列互不相同,从而将多个字节序列分别嵌入到目标应用的源代码后,增加了水印的破解难度,进一步提升了水印对目标应用版权的保护性能。另一方面,基于目标应用中添加的各个水印的字节序列中的元素,可以追溯到目标应用的发布平台、开发者等信息,作为侵犯版权的依据,更好的保护目标应用的版权。
与上述方法实施例基于同一发明构思,本申请实施例中还提供了一种电子设备。在一种实施例中,该电子设备可以是图1中的终端设备110,也可以是图1中的服务器120。在该实施例中,电子设备的结构可以如图14所示,包括存储器1401,通讯模块1403以及一个或多个处理器1402。
存储器1401,用于存储处理器1402执行的计算机程序。存储器1401可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统,以及运行即时通讯功能所需的程序等;存储数据区可存储各种即时通讯信息和操作指令集等。
存储器1401可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器1401也可以是非易失性存储器(non-volatilememory),例如只读存储器,快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);或者存储器1401是能够用于携带或存储具有指令或数据结构形式的期望的计算机程序并能够由计算机存取的任何其他介质,但不限于此。存储器1401可以是上述存储器的组合。
处理器1402,可以包括一个或多个中央处理单元(central processing unit,CPU)或者为数字处理单元等等。处理器1402,用于调用存储器1401中存储的计算机程序时实现上述水印添加方法和水印应用方法。
通讯模块1403用于与终端设备和其他服务器进行通信。
本申请实施例中不限定上述存储器1401、通讯模块1403和处理器1402之间的具体连接介质。本申请实施例在图14中以存储器1401和处理器1402之间通过总线1404连接,总线1404在图14中以粗线描述,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。总线1404可以分为地址总线、数据总线、控制总线等。为便于描述,图14中仅用一条粗线描述,但并不描述仅有一根总线或一种类型的总线。
存储器13401中存储有计算机存储介质,计算机存储介质中存储有计算机可执行指令,计算机可执行指令用于实现本申请实施例的水印添加方法和水印应用。处理器1402用于执行上述的页面渲染方法,如图2和图8所示。
基于同一发明构思,本申请实施例提供了一种计算机可读存储介质,其存储有可由电子设备执行的计算机程序,当程序在电子设备上运行时,使得电子设备执行上述水印添加方法和水印应用方法的步骤。
基于同一发明构思,本申请实施例提供了一种计算机程序产品,所述计算机程序产品包括存储在计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行上述水印添加方法和水印应用方法的步骤。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (15)

1.一种水印添加方法,其特征在于,所述方法包括:
获取目标应用的源代码的标识信息,以及开发所述目标应用的目标对象的身份信息;
基于所述标识信息、所述身份信息和预设密钥,随机生成多个字节序列;其中,每个字节序列包含所述标识信息和所述身份信息中,用于生成所述目标应用中添加的相应水印的元素;
基于所述源代码的结构信息,分别将所述多个字节序列嵌入到所述源代码的对应位置,得到目标代码;
基于所述目标代码,生成所述目标应用对应的多个水印。
2.如权利1所述的方法,其特征在于,所述结构信息至少包含:所述源代码中各函数块的位置信息;
则所述基于所述源代码的结构信息,分别将所述多个字节序列嵌入到所述源代码的对应位置,包括:
针对每个字节序列,分别执行以下任意一种操作:
基于所述各函数块的位置信息,选取两个相邻的目标函数块,将一个字节序列嵌入到所述源代码的两个相邻的目标函数块之间;
基于所述各函数块的位置信息,选取一个目标函数块,将一个字节序列嵌入到所述源代码的一个目标函数块之前;
基于所述各函数块的位置信息,选取一个目标函数块,将一个字节序列嵌入到所述源代码的一个目标函数块之后。
3.如权利要求1所述的方法,其特征在于,所述结构信息至少包含:所述源代码中各逻辑功能块的位置信息;
则所述基于所述源代码的结构信息,分别将所述多个字节序列嵌入到所述源代码的对应位置,包括:
针对每个字节序列,分别执行以下任意一种操作:
基于所述各逻辑功能块的位置信息,选取两个相邻的目标逻辑功能块,将一个字节序列嵌入到所述源代码的两个相邻的目标逻辑功能块之间;
基于所述各逻辑功能块的位置信息,选取一个目标逻辑功能块,将一个字节序列嵌入到所述源代码的一个目标逻辑功能块之前;
基于所述各逻辑功能块的位置信息,选取一个目标逻辑功能块,将一个字节序列嵌入到所述源代码的一个目标逻辑功能块之后。
4.如权利要求1所述的方法,其特征在于,所述源代码包含多个代码文件,且每个代码文件对应一个子标识信息;
则所述基于所述标识信息、所述身份信息和预设密钥,随机生成多个字节序列,基于所述源代码的结构信息,分别将所述多个字节序列嵌入到所述源代码的对应位置,得到目标代码,包括:
针对每个代码文件,执行以下操作:
基于一个代码文件的子标识信息、相应目标对象的身份信息和所述预设密钥,分别随机生成至少一个字节序列;
基于所述一个代码文件的结构信息,分别将所述一个代码文件对应的至少一个字节序列嵌入到所述一个代码文件的对应位置,得到目标子代码;
基于各个目标子代码,得到所述目标代码。
5.如权利要求4所述的方法,其特征在于,得到所述目标代码之前,所述方法还包括:
通过查询接口,获取各代码文件的水印添加任务信息,其中,所述水印添加任务信息至少包含水印添加失败的代码文件的子标识信息;
基于所述添加任务信息包含的子标识信息,重新生成所述子标识信息对应的代码文件的目标子代码。
6.如权利要求5所述的方法,其特征在于,所述添加任务信息至少还包含所述代码文件中水印添加失败的位置信息;
则所述基于所述添加任务信息包含的子标识信息,重新生成所述子标识信息对应的代码文件的目标子代码,包括:
基于所述添加任务信息包含的子标识信息,从所述子标识信息对应的代码文件中水印添加失败的位置处开始,继续生成所述子标识信息对应的代码文件的目标子代码。
7.如权利要求1~5中任一项所述的方法,其特征在于,所述目标应用为应用程序中的小程序。
8.一种水印应用方法,其特征在于,所述方法包括
获取添加多个水印的目标应用的目标代码;
基于所述目标代码中所述目标应用的源代码的结构信息,从各水印在所述目标代码中的对应位置,分别获取相应的字节序列;其中,每个字节序列是基于所述源代码的标识信息、开发所述目标应用的目标对象的身份信息和预设密钥随机生成的,包含所述标识信息和所述身份信息中用于生成所述目标应用中相应水印的元素;
基于获取的各字节序列包含的所述标识信息和所述身份信息中的元素,确定所述目标应用的版权。
9.如权利要求8所述的方法,其特征在于,所述目标代码包含多个代码文件,且每个代码文件对应一个子标识信息;
则所述基于所述目标代码中所述目标应用的源代码的结构信息,从各水印在所述目标代码中的对应位置,分别获取相应的字节序列,包括:
将所述目标代码拆分为多个代码文件,针对每个代码文件,执行以下操作:
基于一个代码文件的结构信息,从各水印在所述一个代码文件中的对应位置,分别获取相应的字节序列,每个字节序列是基于所述一个代码文件的子标识信息、相应目标对象的身份信息和所述预设密钥随机生成的。
10.如权利要求8或9所述的方法,其特征在于,所述目标应用为应用程序中的小程序。
11.一种水印添加装置,其特征在于,包括:
获取模块,用于获取目标应用的源代码的标识信息,以及开发所述目标应用的目标对象的身份信息;
第一生成模块,用于基于所述标识信息、所述身份信息和预设密钥,随机生成多个字节序列;其中,每个字节序列包含所述标识信息和所述身份信息中,用于生成所述目标应用中添加的相应水印的元素;
嵌入模块,用于基于所述源代码的结构信息,分别将所述多个字节序列嵌入到所述源代码的对应位置,得到目标代码;
第二生成模块,用于基于所述目标代码,生成所述目标应用对应的多个水印。
12.一种水印应用装置,其特征在于,包括:
获取模块,用于获取添加多个水印的目标应用的目标代码;以及,基于所述目标代码中所述目标应用的源代码的结构信息,从各水印在所述目标代码中的对应位置,分别获取相应的字节序列;其中,每个字节序列是基于所述源代码的标识信息、开发所述目标应用的目标对象的身份信息和预设密钥随机生成的,包含所述标识信息和所述身份信息中用于生成所述目标应用中相应水印的元素;
确定模块,用于基于获取的各字节序列包含的所述标识信息和所述身份信息中的元素,确定所述目标应用的版权。
13.一种电子设备,其特征在于,其包括处理器和存储器,其中,所述存储器存储有计算机程序,当所述计算机程序被所述处理器执行时,使得所述处理器执行权利要求1~10中任一所述方法的步骤。
14.一种计算机可读存储介质,其特征在于,其包括计算机程序,当所述计算机程序在电子设备上运行时,所述计算机程序用于使所述电子设备执行权利要求1~10中任一所述方法的步骤。
15.一种计算机程序产品,其特征在于,包括计算机程序,所述计算机程序存储在计算机可读存储介质中;当电子设备的处理器从所述计算机可读存储介质读取所述计算机程序时,所述处理器执行所述计算机程序,使得所述电子设备执行权利要求1~10中任一所述方法的步骤。
CN202211338785.4A 2022-10-28 2022-10-28 水印添加和水印应用方法、装置、设备及存储介质 Pending CN117009931A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211338785.4A CN117009931A (zh) 2022-10-28 2022-10-28 水印添加和水印应用方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211338785.4A CN117009931A (zh) 2022-10-28 2022-10-28 水印添加和水印应用方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN117009931A true CN117009931A (zh) 2023-11-07

Family

ID=88562475

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211338785.4A Pending CN117009931A (zh) 2022-10-28 2022-10-28 水印添加和水印应用方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN117009931A (zh)

Similar Documents

Publication Publication Date Title
US9602289B2 (en) Steganographic embedding of executable code
CN104680039B (zh) 一种应用程序安装包的数据保护方法及装置
CN105426708A (zh) 一种Android系统的应用程序的加固方法
CN112861191B (zh) 一种应用程序监控方法及装置
WO2022078366A1 (zh) 应用保护方法、装置、设备及介质
US20050154899A1 (en) Mobile software authentication and validation
CN111143877B (zh) 加密基于Python的风光预测算法文件的方法及装置
CN111585995A (zh) 安全风控信息传输、处理方法、装置、计算机设备及存储介质
WO2022116761A1 (en) Self auditing blockchain
CN108256351B (zh) 文件处理方法和装置、存储介质及终端
CN111600701B (zh) 一种基于区块链的私钥存储方法、装置及存储介质
CN111291001A (zh) 计算机文件的读取方法、装置、计算机系统及存储介质
CN117009931A (zh) 水印添加和水印应用方法、装置、设备及存储介质
CN115378605A (zh) 基于区块链的数据处理方法及装置
CN114491661A (zh) 基于区块链的日志防篡改方法及系统
CN112732676A (zh) 基于区块链的数据迁移方法、装置、设备及存储介质
CN117077180B (zh) 勒索加密数据恢复可行性评估及处理装置、方法、电子设备及存储介质
CN113591140B (zh) 资源数据防篡改方法、系统、计算机设备及存储介质
CN114466355B (zh) 云服务数据取证方法及装置
KR102618922B1 (ko) 무기체계 임베디드 시스템의 sw 역공학 방지장치 및 그 방법
EP4365763A1 (en) Certified copy paste
CN111984944B (zh) 一种源代码处理方法、相关装置及存储介质
JP6752347B1 (ja) 情報処理装置、コンピュータプログラム及び情報処理方法
CN115002191A (zh) 一种代码编辑方法、装置、计算机设备及存储介质
CN114428956A (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