【问题标题】:How to obfuscate C++ variables and functions如何混淆 C++ 变量和函数
【发布时间】:2012-03-02 20:08:25
【问题描述】:

我正在尝试对抄袭进行一些算法比较。我发现了很多抄袭的 TEXT 比较。

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

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

我知道为了准确比较源代码,还需要分析许多其他内容,但这对我来说已经足够了。

【问题讨论】:

    标签: comparison obfuscation plagiarism-detection


    【解决方案1】:

    这是一个有趣的问题。然而,根据算法的复杂程度,变量名可能是让剽窃消失的原因。例如,您可以用多少种方法编写树遍历?

    我认为几年前有一篇关于通过他们的风格识别编码人员的论文 - 查看所有的小东西,比如空格,{}s 的位置等等。谁知道,但也许这就是要走的路,寻找与学生以前风格的否定匹配,而不是与已知来源的肯定匹配。话虽如此,学生不太可能在学习的早期阶段就形成了非常个人化的编码风格。

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

    【讨论】:

    • 我还想在换行符、“;”之后的换行符和大括号位置方面给予一些额外的重视。我知道某种算法很难以某种“不同的方式”来制作,比如在一些简单的初始示例中,“2 个值的总和”。但所有文本比较也是一个问题。而且由于它在网络主机中运行,我无法编译代码。
    【解决方案2】:

    我过去使用过 MOSS:http://theory.stanford.edu/~aiken/moss/ 来检测抄袭代码。由于它在语义级别上工作,因此它将检测您上面介绍的情况。该工具是语言感知的,因此在分析中不考虑 cmets,并且它在检测通过变量和/或函数名称的简单搜索和替换修改的代码方面大有帮助。

    注意:几年前,我在研究生院教授计算机科学时使用了该工具,它在检测从互联网上下载的代码方面表现出色。这是类似应用程序的详细记录:http://fie2012.org/sites/fie2012.org/history/fie99/papers/1110.pdf

    如果你谷歌“测量软件相似度”,你应该会发现一些更有用的点击:http://www.ics.heacademy.ac.uk/resources/assessment/plagiarism/detectiontools_sourcecode.html

    【讨论】:

      猜你喜欢
      • 2016-01-14
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多