《基于动态关键指令序列胎记的软件抄袭检测方法.pdf》由会员分享,可在线阅读,更多相关《基于动态关键指令序列胎记的软件抄袭检测方法.pdf(13页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103577323 A (43)申请公布日 2014.02.12 CN 103577323 A (21)申请号 201310449858.1 (22)申请日 2013.09.27 G06F 11/36(2006.01) (71)申请人 西安交通大学 地址 710049 陕西省西安市咸宁西路 28 号 (72)发明人 郑庆华 田振洲 刘烃 范铭 (74)专利代理机构 西安通大专利代理有限责任 公司 61200 代理人 汪人和 (54) 发明名称 基于动态关键指令序列胎记的软件抄袭检测 方法 (57) 摘要 本发明提出了一种基于动态关键指令序列胎 记的软件抄袭检测方法, 。
2、包括 : 1) 基于动态插桩 对待分析的程序进行监控, 结合动态污点分析, 实 时地对关键指令进行识别和记录 ; 2) 对记录的关 键指令序列进行预处理, 剥离操作数, 抽取助记符 序列 ; 3) 在此基础之上为待检测的两个软件分别 生成其动态关键指令序列胎记 ; 4) 计算胎记的相 似性 ; 5) 通过胎记相似性的均值及给定的阈值, 做出抄袭与否的决策。该方法直接针对二进制代 码, 无需源码存在, 更具有现实意义 ; 检测手段不 依赖于特定平台或编程语言, 具有更广阔的应用 范围 ; 对于语义保留的代码混淆技术具有很好的 抵抗力, 提高了对深度抄袭的检测能力。 (51)Int.Cl. 权利要。
3、求书 2 页 说明书 6 页 附图 4 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书6页 附图4页 (10)申请公布号 CN 103577323 A CN 103577323 A 1/2 页 2 1. 基于动态关键指令序列胎记的软件抄袭检测方法, 其特征在于, 包括如下步骤 : 1) 基于动态插桩技术, 对待分析程序实施运行时监控 ; 同时结合数据流分析, 进行动态 关键指令的识别和记录, 生成动态关键指令序列 ; 2) 对抽取的动态关键指令序列进行预处理, 剥离操作数, 生成助记符序列 ; 3) 基于助记符序列, 利用 k-gram 算法, 分别为待。
4、分析的第一程序及第二程序生成动态 关键指令序列胎记 ; 4) 进行第一程序及第二程序胎记相似性的计算 ; 5) 依据多次输入下生成的胎记相似性的均值, 及给定的阈值判断是否抄袭。 2. 根据权利要求 1 所述的方法, 其特征在于, 所述步骤 1) 中动态关键指令定义及识别 原则为 : 令 trace(p,I) 表示程序 p 在输入 I 下的一条执行 trace, 对于该 trace 中的任一 条汇编指令 ins, 当满足如下两个条件时, 认为 ins 是程序 p 在输入 I 下的一条关键指令 , 即 a)ins 属于值更新指令 b)ins 属于输入关联指令。 3. 根据权利要求 1 所述的方法。
5、, 其特征在于, 所述步骤 1) 中监控实施方法为 : 针对二 进制的待分析程序, 使用动态插桩技术, 在待分析程序的每条指令执行之前植入相应的分 析代码, 实现运行时监控, 捕获指令级执行信息。 4.根据权利要求1所述的方法, 其特征在于, 所述步骤1) 中关键指令序列生成方法为 : 通过指令级的运行时监控, 捕获每一条待执行的汇编指令, 分析该指令的类型, 是否为值更 新指令 ; 同时结合动态污点分析技术, 通过污点源的识别及污点信息的传播扩散, 辅助识别 输入关联指令 ; 最后根据分析结果, 对关键指令进行记录, 将其加入动态关键指令序列, 否 则不进行记录。 5. 根据权利要求 1 所。
6、述的方法, 其特征在于, 所述步骤 1) 具体包括以下步骤 : 步骤 S201 : 判断是否还存在待执行的指令, 如果有则跳至步骤 S202, 否则直接转入步 骤 S208 ; 步骤 S202 : 对于待分析的指令, 解析指令类型, 判断其是否为污点传播指令, 如果是则 转入步骤 S203, 否则转入步骤 S204 ; 步骤 S203 : 依据预定义的污点传播规则, 进行污点数据的扩散传播 ; 步骤 S204 : 对指令进行解析, 据其操作符判断是否为值更新指令 ; 如果是则转入步骤 S205, 不是则转入步骤 S207 ; 步骤 S205 : 根据污点的扩散状态, 识别该指令是否为输入关联指。
7、令 ; 如果为输入关联 指令则转入步骤 S206, 否则转入步骤 S207 ; 步骤 S206 : 识别出该指令为关键指令, 并将之加入动态关键指令序列中 ; 步骤 S207 : 执行该指令, 并转入步骤 S201 进行下一轮的分析 ; 步骤 S208 : 输出动态关键指令序列。 6.根据权利要求1所述的方法, 其特征在于, 所述步骤2) 中指令序列预处理方法为 : 对 抽取的关键指令序列中的每条汇编指令, 解析其语法结构, 剥离其操作数, 保留其助记符, 生成相应的助记符序列。 7. 根据权利要求 1 所述的方法, 其特征在于, 所述步骤 3)中动态关键指令序 列 胎 记 生 成 方 法 为。
8、 : 令 s(p,I)= 为 程 序 p 在 输 入 I 下 抽 取 得 到的一条关键指令序列 ,t(p,I)= 表示与 s(p,I) 对应的助记符序列, 权 利 要 求 书 CN 103577323 A 2 2/2 页 3 即 对 于 其 中 每 个 元 素 ei, 都 有 ei=mnemonicOf(insi) ; 对 t(p,I) 应 用 k-gram 算 法 得 到 一 个 长 度 为 k 子 序 列 的 集 合 Set(p,I)=gj|gj=(ej,ej,ej+k-1),j 1,2, ,n-k+1 ; 然 后 统 计 独 有 的 k-gram 的 个 数 及 其 频 率, 最 终 生。
9、 成 一 个 键 值 对 集 合 其中 freq(gm) 表示 gm在集合 set(p,I) 中出现的次数, 则将称为程序 p 在输入 I 下的动态关键指令序列胎记。 8. 根据权利要求 1 所示的方法, 其特征在于, 所述步骤 4) 中选用 cosine 距离衡量第一 程序及第二程序胎记的相似性, 首先从二者胎记中构造长度相等的两个特征向量, 然后计 算它们的 cosine 值作为相似性的值。 9. 根据权利要求 1 所示的方法, 其特征在于, 所述步骤 5) 中抄袭决策模块将多次输入 下得到的第一程序及第二程序胎记相似性的值作为输入, 计算其均值相似性作为程序的相 似性 ; 并依据输入的可。
10、调节阈值 做出抄袭与否的判断, 输出检测结果。 10. 根据权利要求 9 所示的方法, 其特征在于, 步骤 5)中阈值 的取值范围为 0.2-0.3 ; 其中 sim(PA,PB) 为第一程序及第二程序胎记相似性的均值。 权 利 要 求 书 CN 103577323 A 3 1/6 页 4 基于动态关键指令序列胎记的软件抄袭检测方法 技术领域 : 0001 本发明涉及程序特征发现及软件抄袭检测领域, 特别涉及一种基于动态软件胎记 的抄袭检测方法。 背景技术 : 0002 自由或开源软件项目允许用户在遵守 License 的情况下使用、 修改或者发布软 件, 比如 GPL 公共许可作为最广泛使用。
11、的自由软件的许可, 它允许用户可以自由的修改软 件, 但要求基于 GPL 程序的演绎作品也要服从 GPL, 比如 gcc 及 Linux 核心都遵从 GPL。这 一方面促进了软件工业的大力发展。另一方面一些公司为了自身利益, 违背软件的许可而 私自的将开源软件的代码集成到自己的商业产品中 ; 当然还存在一些公司, 特别是大公司, 它们经常接收来自上游公司的一些软件组件以集成到自己项目中, 而这些组件通常是以二 进制代码的形式提交的, 很难保证其中不包含第三方代码。这在很大程度上对大公司的利 益构成了威胁, 经常看到软件侵权事件的发生。由于很多软件开发人员的代码保护意识不 强, 行业道德参差不齐。
12、, 再加上越来越强大的自动化代码混淆工具的出现, 使得软件抄袭的 现象越来越严重 ; 同时很多情况下特别是商业软件都是以二进制形式发布的, 通常无法获 取源码的, 这使得软件抄袭的检测更加困难, 也使得抄袭现象更加猖獗。 0003 为此人们提出了一系列手段防止及检测软件抄袭。 其中软件水印是出现比较早的 一种抄袭检测技术, 它通过在软件发布之前在其中植入特定的水印标记, 这 种标记很容易 验证但较难被破坏, 尽管它不能防止软件抄袭, 但在对抄袭软件提起法律诉讼的时候可以 作为有力证据, 不过 Collberg 等人认为 “一个有决心的攻击者始终能够破坏任何的水印” 。 因为采用水印的话需要植入。
13、额外的代码, 所以很多开发人员并不使用水印, 而是采用代码 混淆技术, 使得代码晦涩难懂。 然而代码混淆仅仅能防止其他人员难以理解程序的逻辑, 无 法阻止抄袭人员实现完成的拷贝, 而且抄袭人员可以反过来利用混淆技术对代码进行进一 步的混淆, 以躲避抄袭的嫌疑, 毕竟现在自动化源码及二进制代码的混淆工具变得越来越 强大。 0004 最近人们提出基于软件胎记的抄袭检测技术, 软件胎记是能够反映程序固有属性 的可以唯一标识程序的特征, 相关的研究都是通过将抄袭检测转换为两个程序的相似性分 析问题, 并基于胎记的相似性计算来衡量程序的相似性, 关键技术主要涉及到高质量的软 件胎记的提取及其相似性计算过。
14、程。根据其胎记生成方式, 可以分为静态及动态两种。前 者主要是基于程序的语法特性而非语义特性, 很容易遭受语义保留混淆技术的蒙骗 ; 动态 软件胎记则是在程序执行过程中提取出来的, 它依赖于程序的运行时行为, 反映了程序对 输入的处理方式, 更多程度上是程序语义的反映。尽管现有研究在一定程度上解决了抄袭 检测的问题, 但还存在一系列的局限性 : 1) 大部分已有的软件胎记难以应付深度的代码混 淆技术 ; 2) 很多方法是基于源代码的, 而在无确凿证据之前, 通常只能获取可疑程序的二进 制代码 ; 3) 大部分的软件胎记依赖于特定的操作系统或者编程语言, 适用范围较小。 0005 因此针对以上问。
15、题, 需要找到一种更好的检测软件抄袭的方法。它应当能够直接 说 明 书 CN 103577323 A 4 2/6 页 5 操作二进制程序, 不依赖于特定平台、 系统或编程语言, 同时对当下流行的各种自动化代码 混淆工具具有很高的抵抗能力。 发明内容 : 0006 本发明主要目的在于提出一种基于动态关键指令序列胎记的软件抄袭检测方法, 以克服上述当前基于胎记的抄袭检测手段的局限性。 0007 本发明的目的通过以下技术方案实现 : 0008 基于动态关键指令序列胎记的软件抄袭检测方法, 包括如下步骤 : 0009 1) 基于动态插桩技术, 对待分析程序实施运行时监控 ; 同时结合数据流分析, 进行。
16、 动态关键指令的识别和记录, 生成动态关键指令序列 ; 0010 2) 对抽取的动态关键指令序列进行预处理, 剥离操作数, 生成助记符序列 ; 0011 3) 基于助记符序列, 利用 k-gram 算法, 分别为待分析的第一程序及第二程序生成 动态关键指令序列胎记 ; 0012 4) 进行第一程序及第二程序胎记相似性的计算 ; 0013 5) 依据多次输入下生成的胎记相似性的均值, 及给定的阈值判断是否抄袭。 0014 本发明进一步的改进在于 : 所述步骤 1) 中动态关键指令定义及识别原则为 : 令 trace(p,I) 表示程序 p 在输入 I 下的一条执行 trace, 对于该 trac。
17、e 中的任一条汇编指令 ins, 当满足如下两个条件时, 认为 ins 是程序 p 在输入 I 下的一条关键指令 , 即 a)ins 属 于值更新指令 b)ins 属于输入关联指令。 0015 本发明进一步的改进在于 : 所述步骤 1) 中监控实施方法为 : 针对二进制的待分析 程序, 使用动态插桩技术, 在待分析程序的每条指令执行之前植入相应的分析代码, 实现运 行时监控, 捕获指令级执行信息。 0016 本发明进一步的改进在于 : 所述步骤 1) 中关键指令序列生成方法为 : 通过指令级 的运行时监控, 捕获每一条待执行的汇编指令, 分析该指令的类型, 是否 为值更新指令 ; 同 时结合动。
18、态污点分析技术, 通过污点源的识别及污点信息的传播扩散, 辅助识别输入关联 指令 ; 最后根据分析结果, 对关键指令进行记录, 将其加入动态关键指令序列, 否则不进行 记录。 0017 本发明进一步的改进在于 : 所述步骤 1) 具体包括以下步骤 : 0018 步骤 S201 : 判断是否还存在待执行的指令, 如果有则跳至步骤 S202, 否则直接转 入步骤 S208 ; 0019 步骤 S202 : 对于待分析的指令, 解析指令类型, 判断其是否为污点传播指令, 如果 是则转入步骤 S203, 否则转入步骤 S204 ; 0020 步骤 S203 : 依据预定义的污点传播规则, 进行污点数据。
19、的扩散传播 ; 0021 步骤 S204 : 对指令进行解析, 据其操作符判断是否为值更新指令 ; 如果是则转入 步骤 S205, 不是则转入步骤 S207 ; 0022 步骤 S205 : 根据污点的扩散状态, 识别该指令是否为输入关联指令 ; 如果为输入 关联指令则转入步骤 S206, 否则转入步骤 S207 ; 0023 步骤 S206 : 识别出该指令为关键指令, 并将之加入动态关键指令序列中 ; 0024 步骤 S207 : 执行该指令, 并转入步骤 S201 进行下一轮的分析 ; 说 明 书 CN 103577323 A 5 3/6 页 6 0025 步骤 S208 : 输出动态关。
20、键指令序列。 0026 本发明进一步的改进在于 : 所述步骤 2) 中指令序列预处理方法为 : 对抽取的关键 指令序列中的每条汇编指令, 解析其语法结构, 剥离其操作数, 保留其助记符, 生成相应的 助记符序列。 0027 本发明进一步的改进在于 : 所述步骤 2) 具体包括以下步骤 : 0028 步骤 S301 : 判断抽取的动态关键指令序列中是否还存在待处理的指令, 如果存在 则转入步骤 S302, 否则转入步骤 S305 ; 0029 步骤 S302 : 从动态关键指令序列中按次序取出一条指令, 依据指令格式对其进行 解析 ; 0030 步骤 S303 : 依据解析结果, 识别并剥离指令。
21、的操作数, 保留指令助记符 ; 0031 步骤S304 : 将指令助记符加入助记符序列的末尾 ; 再转入步骤S301进行下一轮分 析 ; 0032 步骤 S305 : 输出生成的助记符序列, 以进一步生成软件胎记。 0033 本 发 明 进 一 步 的 改 进 在 于 : 所 述 步 骤 3)中 动 态 关 键 指 令 序 列 胎 记 生 成 方 法 为 : 令 s(p,I)= 表 示 与 s(p,I) 对 应 的 助 记 符 序 列,即 对 于 其 中 每 个 元 素 ei,都 有 ei=mnemonicOf(insi) ; 对 t(p,I) 应 用 k-gram 算 法 得 到 一 个 长。
22、 度 为 k 子 序 列 的 集 合 Set(p,I)=gj|gj=(ej,ej,ej+k-1),j 1,2, ,n-k+1 ; 然 后 统 计 独 有 的 k-gram 的 个 数 及 其 频 率, 最 终 生 成 一 个 键 值 对 集 合 其中 freq(gm) 表示 gm在集合 set(p,I) 中出现的次数, 则将称为程序 p 在输入 I 下的动态关键指令序列胎记 ; k=4 或 5。 0034 本发明进一步的改进在于 : 所述步骤 3) 具体包括以下步骤 : 0035 步骤 S401 : 判断未处理的子序列长度是否大于可调参数 k 的值, 如果是则转入步 骤 S402, 否则转入步。
23、骤 S408 ; 0036 步骤 S402 : 利用 k-gram 算法, 生成一个长度为 k 的助记符子序列 ; 0037 步骤 S403 : 顺序依次连接生成的长度为 k 的助记符子序列中的每个元素, 生成一 个字符串, 计算其 hash 值并将之作为键值查找集合 B(初始集合 B 为空) 中是否已存在相 应元素 ; 如果存在则转入步骤 S406, 不存在则转入步骤 S404 ; 0038 步骤 S404 : 创建一新的以该子序列的 hash 值为键的元素, 并设置键值为 1 ; 0039 步骤 S405 : 将新生成的键值对元素加入集合 B 中, 转入步骤 S407 ; 0040 步骤 。
24、S406 : 依据 hash 键值在集合 B 中查找到该元素, 并更新该元素的键值 ; 0041 步骤 S407 : 删除助记符序列的首元素, 转入步骤 S401 开展下一轮的处理 ; 0042 步骤 S408 : 输出由键值对构成的集合 B, 即动态关键指令序列胎记。 0043 本发明进一步的改进在于 : 所述步骤 4) 中选用 cosine 距离衡量第一程序及第 二程序胎记的相似性, 首先从二者胎记中构造长度相等的两个特征向量, 然后计算它们的 cosine 值作为相似性的值。 0044 本发明进一步的改进在于 : 所述步骤 5) 中抄袭决策模块将多次输入下得到的第 说 明 书 CN 10。
25、3577323 A 6 4/6 页 7 一程序及第二程序胎记相似性的值作为输入, 计算其均值相似性作为程序的相似性 ; 并依 据输入的可调节阈值 做出抄袭与否的判断, 输出检测结果。 0045 本发明进一步的改进在于 : 步骤 5) 中阈值 的取值范围为 0.2-0.3 ; 0046 0047 其中 sim(PA,PB) 为第一程序及第二程序胎记相似性的均值。 0048 相对于现有技术, 本发明具有以下优点 : 0049 (1) 本发明检测对象无需源码存在, 可直接对二进制代码进行分析, 更具实用价 值 : 大部分情况下, 可疑抄袭程序是以二进制代码形式发布的, 在无确凿证据之前, 无法获 取。
26、其源码, 传统的基于源码的抄袭检测手段就失效了。本发明基于动态插桩对软件进行监 控, 分析对象直接为二进制代码, 不存在这种局限性。 0050 (2) 本发明最底层的分析对象是每一条汇编指令, 不依赖于特定的操作系统和编 程语言, 具有更广阔的适用范围。 0051 (3) 本发明通过在软件胎记生成过程中引入数据流分析, 使得胎记与程序语义紧 密关联, 从而对各种各样语义保留的混淆技术具有更强的抵抗力。 0052 (4) 本发明基于监控抽取的动态关键指令序列生成软件胎记, 属于动态胎记的范 畴, 对加密、 压缩、 封装等浅层混淆手段具有天生的抵抗力, 因为这类混淆后的程序最终要 想执行, 必须在。
27、运行时先进行解密、 解压缩或解封装。 附图说明 0053 图 1 为本发明基于动态关键指令序列胎记的软件抄袭检测方法整体流程图 ; 0054 图 2 为基于运行时监控的动态关键指令序列抽取过程流程图 ; 0055 图 3 为预处理过程流程图 ; 0056 图 4 为动态关键指令序列胎记生成流程图。 具体实施方式 0057 以下结合附图详细说明本发明基于动态关键指令序列胎记的软件抄袭检测方法 的实施方式。 0058 图 1 为基于动态关键指令序列胎记的软件抄袭检测方法的处理流程, 其中第一程 序 (原告程序) 指的是程序所有者开发的原始程序, 第二程序 (被告程序) 指被认为抄袭了原 始程序的可。
28、疑程序。 0059 本发明一种基于动态关键指令序列胎记的软件抄袭检测方法, 包括以下步骤 : 0060 步骤 S101 : 使用动态插桩工具如 Pin、 Valgrind 等, 在待分析程序的每条指令执行 之前植入分析代码, 实现对二进制程序指令级信息的监控 ; 同时在待分析程序执行过程中, 进行动态污点分析, 实现污点源的识别和污点的传播扩散, 以辅 助关键指令的识别。 0061 结合图 2, 具体而言, 在每条指令执行之前植入分析代码, 实现对二进制程序指令 说 明 书 CN 103577323 A 7 5/6 页 8 级信息的监控具体包括以下步骤 : 0062 步骤 S201 : 判断待。
29、分析程序是否还存在待执行的指令, 如果有则跳至步骤 S202, 否则直接转入步骤 S208 ; 0063 步骤 S202 : 对于待分析的指令, 解析指令类型, 判断其是否为污点传播指令, 如果 是则转入步骤 S203, 否则转入步骤 S204; 0064 步骤 S203 : 依据预定义的污点传播规则, 进行污点数据的扩散传播 ; 0065 步骤 S204 : 对指令进行解析, 据其操作符判断是否为值更新指令 (指令的执行会 造成 CPU 或者内存单元中数据值的变化) , 如算数运算指令、 位移指令、 逻辑运算指令等等。 如果是则转入步骤 S205, 不是则转入步骤 S207; 0066 步骤。
30、 S205 : 根据污点的扩散状态, 识别该指令是否为输入关联指令, 即判断该指 令的执行是否会导致与 CPU 或内存单元关联的污点标记的改变, 具体而言即是否会导致该 指令目的操作数污点标记的更新。如果为输入关联指令则转入步骤 S206, 否则转入步骤 S207; 0067 步骤 S206 : 识别出该指令为关键指令, 并将之加入动态关键指令序列中 ; 0068 步骤 S207 : 执行该指令, 并转入步骤 S201 进行下一轮的分析 ; 0069 步骤 S208 : 输出动态关键指令序列, 作为下一步分析的基础。 0070 步骤 S102 : 对抽取的动态关键指令序列中的每条汇编指令, 解。
31、析其语法结构, 剥 离操作数, 保留其助记符, 生成相应的助记符序列。具体流程如图 3 所示 : 0071 步骤 S301 : 判断抽取的动态关键指令序列中是否还存在待处理的指令, 如果存在 则转入步骤 S302, 否则转入步骤 S305。 0072 步骤 S302 : 从动态关键指令序列中按次序取出一条指令, 依据指令格式对其进行 解析。 0073 步骤 S303 : 依据解析结果, 识别并剥离指令的操作数, 保留指令助记符。 0074 步骤S304 : 将指令助记符加入助记符序列的末尾 ; 再转入步骤S301进行下一轮分 析 ; 0075 步骤 S305 : 输出生成的助记符序列, 以进一。
32、步生成软件胎记。 0076 步骤 S103 : 基于预处理得到的助记符序列和可调参数 k(一般取 4 或 5) , 应用 k-gram 算法生成一系列长度为 k 的子序列, 同时统计各个不同的子序列出现的频率, 则将 子序列及其出现频率构成的键值对集合作为动态关键指令序列胎记。具体而言, 胎记生成 流程如图 4 所示 : 0077 步骤 S401 : 判断未处理的子序列长度是否大于可调参数 k 的值, 如果是则转入步 骤 S402, 否则转入步骤 S408 ; 0078 步骤 S402 : 利用 k-gram 算法, 生成一个长度为 k 的助记符子序列 ; 0079 步骤 S403 : 顺序依。
33、次连接生成的长度为 k 的助记符子序列中的每个元素, 生成一 个字符串, 计算其 hash 值并将之作为键值查找集合 B(初始集合 B 为空) 中是否已存在相 应元素 ; 如果存在则转入步骤 S406, 不存在则转入步骤 S404。 0080 步骤 S404 : 创建一新的以该子序列的 hash 值为键的元素, 并设置键值为 1。 0081 步骤 S405 : 将新生成的键值对元素加入集合 B 中, 转入步骤 S407。 0082 步骤 S406 : 依据 hash 键值在集合 B 中查找到该元素, 并更新该元素的键值。 说 明 书 CN 103577323 A 8 6/6 页 9 0083 。
34、步骤 S407 : 删除助记符序列的首元素, 转入步骤 S401 开展下一轮的处理。 0084 步骤 S408 : 输出由键值对构成的集合 B, 即动态关键指令序列胎记。 0085 执行两次步骤 S101-S103, 以获得第一程序和第二程序的动态关键指令序列 胎 记。 0086 步骤 S104 : 通过计算 cosine 距离来衡量第一程序和第二程序的动态关键指 令序列胎记的相似性, 计算方法描述如下 : 假定为要检测的两个程序分别生成的胎 记为 A=, 和 B=, ; 令 S=keySet(A) keySet(B), 构建, 其中 vi为键Si的元素的键值, l表示S的长度 ; 按照同样的。
35、方式构造则第一与 第二程序的胎记的相似值为 0087 步骤 S105 : 不同输入下生成的胎记可能会不一样, 提供多次输入, 会计算得到一 系列的相似值 (S1,S2,Sn) , 取其均值作为最终衡量两个程序相似性的依据, 以减小随机 因素的影响 ; 并依据输入的可调节阈值 (取值 0.2-0.3) 做出抄袭与否的决策, 输出检测 结果。 0088 具体描述为 : 对于两个软件 PA和 PB, 为它们提供一系列的输入 I1,I2,In(第一 程序和第二程序每次的输入相同) , 生成的一系列胎记分别为A1,A2,An和B1,B2,Bn, 则 然后依据这两个程序的相似性和给定的可调阈值 来确定抄 袭与否, 即 : 0089 说 明 书 CN 103577323 A 9 1/4 页 10 图 1 说 明 书 附 图 CN 103577323 A 10 2/4 页 11 图 2 说 明 书 附 图 CN 103577323 A 11 3/4 页 12 图 3 说 明 书 附 图 CN 103577323 A 12 4/4 页 13 图 4 说 明 书 附 图 CN 103577323 A 13 。