如何模糊C ++变量和函数

时间:2012-02-10 10:34:38

标签: comparison obfuscation plagiarism-detection

我正在尝试对抄袭进行一些算法比较。我找到了很多关于抄袭的TEXT比较。

但是在算法中它是非常不同的。假设某些算法使用了大量的变量,函数和用户定义的结构。如果有人从某人那里复制源代码,他至少会更改变量和函数名称。使用简单的文本比较算法,函数和变量字母的这种差异将被视为“差异”,使得算法给出了抄袭的“假”。

我想要做的是“概括”(我不知道这是否是正确的词)C ++源代码中的所有变量,函数和用户定义的结构名称。所以varibles将被命名为“a”,“b”,功能相同“... fa(...)”,“... fb(...)”。 我在PHP中的字符串变量中使用c ++源算法进行比较。

我知道应该分析许多其他内容以进行准确的源代码比较,但这对我来说已经足够了。

2 个答案:

答案 0 :(得分:1)

这是一个有趣的问题。然而,根据算法的复杂程度,变量名称可能会导致抄袭。例如,您可以通过多少种方式对树遍历进行编码?

我认为几年前有一篇关于通过他们的风格识别编码员的文章 - 查看所有像空白一样的小事情,{}放置在哪里等等。谁知道但也许这就是通往去寻找与学生之前的风格的负面匹配,而不是与已知来源的积极匹配。说到这一点,学生在学习的早期阶段就不太可能形成一种非常个人的编码风格。

一想法 - 写的例子是什么语言?可以编译吗?如果编译C然后对可执行文件进行二进制比较,那么具有不同本地变量名的相同程序是否具有完全相同的二进制文件? (不过,全球变量和函数不会)。

答案 1 :(得分:0)

我过去使用过MOSS:http://theory.stanford.edu/~aiken/moss/来检测剽窃代码。由于它在语义级别上工作,因此它将检测您在上面呈现的情况。该工具具有语言感知能力,因此在分析中不考虑注释,并且在检测通过简单搜索和替换变量和/或函数名称而修改的代码方面有很长的路要走。

注意:几年前,当我在研究生院教授计算机科学时,我使用了这个工具,并且它在检测从互联网上拔出的代码时非常有效。以下是类似应用程序的详细记录:http://fie2012.org/sites/fie2012.org/history/fie99/papers/1110.pdf

如果你谷歌"测量软件相似性",你应该找到一些更有用的点击:http://www.ics.heacademy.ac.uk/resources/assessment/plagiarism/detectiontools_sourcecode.html