0

我刚刚开始使用 CodeQL,并且在扫描 Python 项目方面取得了很多成功。现在,我开始扫描 Java 项目,但我很难扫描预编译的项目。

从我收集的信息来看,CodeQL CLI 似乎包含一个用于 Java 代码的自动构建器,并将为我构建项目。我正在尝试扫描已经从 Maven 中央存储库编译的项目。

问题:

  1. 是否可以使用 CodeQL 扫描 JAR 文件中包含的已编译 Java 源代码(即字节码、类文件)?
  2. 如果是这样,我如何调用这些属性来从 CLI 扫描 JAR 文件?

感谢您的任何见解!

4

2 回答 2

0

正如另一个答案中提到的,对于 Java,CodeQL 在编译期间观察结果并从中创建一个数据库。因此,不可能从包含已编译类的 JAR 构建数据库。然而,可以在项目中使用已编译的类(例如,以 Maven 依赖项或 JDK 使用的形式),并且 CodeQL 会记录使用这些类的信息,但它不了解这些类的作用。这意味着没有数据流或污点流可供它们使用,除非 CodeQL 明确对其进行建模,请参阅支持的框架列表

但是,由于您的计划是从 Maven Central 对项目运行查询,因此从 lgtm.com 获取数据库最容易,或者直接使用 lgtm.com 上的查询控制台,另请参阅文档。对于大多数项目,lgtm.com 能够自行构建项目。

lgtm.com 归 Semmle 所有,Semmle 最初创建了 CodeQL,并被GitHub 收购

于 2022-03-05T16:49:32.227 回答
0

根据我的阅读,它似乎不适用于已编译的类。您将需要 src 代码,无论是作为(Jar,然后您需要在处理之前解压缩)或 Github 项目存在。

通常在运行过程中你会提供构建项目的方式,例如--language=java --command='mvn clean install -DskipTests'<-- 这需要源代码。

于 2021-12-14T18:39:12.773 回答