代码相似性检查机制

创建时间.png 2025-11-12
标签.png JavaScript
阅读量.png 3

背景

在某些情况下,我们可能会检查两个APP 的代码是否相似,来判断代码是否有cx的问题。但是cx方,为了规避这些问题,会做代码混淆,JS 代码混淆方法可以看下这个工具 https://webfem.com/tools/js-decode/index.html 。代码混淆之后,会大大增加我们判断相似度的难度。

基于这种情况,这里给出一种基于 AST ,查找相同代码类型的方法判断。

分析

我们给一个示例:

源代码是

const b = 2;
function add (a) {
  return a + b
}

修改一些变量之后的代码如下:

const c = 2;
function sss(r) {return r+c}

两个代码在变量名,代码规范上都不一致,人眼能一下看出来二者是一样的代码,但是通过字符串对比的方式很难去写匹配关系。如果代码一多,这个事情就进行不下去了。

那如果我们把他们都转换为 AST block,结果又是怎么样的呢

示例1的 block

示例1block

// const b = 2;
VariableDeclaration-VariableDeclarator-Identifier-Literal

示例二

示例二block

// var c = 2;
VariableDeclaration-VariableDeclarator-Identifier-Literal

同样的逻辑,通过 AST 分析之后的代码 lock 是一致的。

因此,我们可以直接将整个文档先 转换为 AST 再便利,找到所有的 节点信息。

然后再对比两个文件的节点信息的一致性,再将所有文件汇总,就行判断整个项目的一致性。

总结

本文只是提供一个检查方案,具体代码如果需要可以联系我。

原文地址:https://webfem.com/post/code-similar,转载请注明出处

webfem 头像
webfem 博客
🧰 最新工具