前言:本题是关于源代码逆向工程和静态分析。意思是,没有可用的内置代码,但我可以访问该程序的源代码。
想象一下,我正在查看 Java 库的一些源代码。我知道在 class 中foo,有一个包含错误或调用另一个包含错误的私有方法的公共方法。bar()
在没有代码库的先验知识,仅通过查看源代码的情况下,我可以采用哪些技术来确定使用此 Java 库的给定程序是否可能调用该功能或触发代码的执行与错误在里面?
我想回答这个问题“这个程序是直接还是间接使用易受攻击的方法/函数?” 我知道从技术上讲,如果不运行程序来确定是否实际调用了该功能,可能是不可能的,因为可能存在基于外部输入在运行时解析的分支。但是,我只需要知道该方法是否有机会或可能被调用。
我知道如何确定一个方法是否被直接使用。我将在整个使用库的程序中搜索带有易受攻击/错误代码的类的名称,甚至只搜索方法本身。但是,如果该程序没有直接调用 buggy 函数,这就是我需要一些提示的地方。如果方法是private或内部的,它永远不会被消费程序直接调用,但我也看到过这样的情况,其中一个方法被public消费程序直接调用,但是,库中的另一个方法调用它。
这使得很难确定使用给定库的代码是否容易受到错误的影响。有哪些技巧可以静态搜索这些 Java 引用?如果您有关于另一种 OOP 语言的相关信息,这在这里也很有用。