joern 基本使用介绍

本文介绍了joern的基本使用,包括安装、启动、生成CPG(代码属性图)、CPG可视化及导出,还有loadCpg、runScript等操作。通过实例展示了如何解析C和Java代码,并提供了相关资源链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

看完这个有了基础之后有需要的话可以参考我的另外一篇在python中批量生成CPG等图的文章

参考文章

JOERN后续可能会有更新,如果本文和官方文档有冲突的地方建议参考最新官方文档
joern官方文档
CSDN 破落之实用户的一些文章
破落之实
破落之实

Install

Prerequisites:Java 8 or higher
Link: https://openjdk.java.net/install/
JOERN运行环境需要Java8或者以上版本支持,需要提前安装。在有Java环境之后,最简单的办法就是安装预编译的joern-cli。预编译我理解的就是类似windows下的.exe文件,可以一键安装应用
注意Joern官方目前很活跃,在持续更新,有朋友补充了自己踩的坑:Joern只支持jdk11,不支持其他jdk,大家可以作为参考。博文里面的内容执行起来有问题的话建议大家去看一下最新版的Joern官方文档,博客里面有地址。
这里我直接安装的预编译版本的joern-cli

# Install pre-built binaries of the joern-cli 
git clone https://github.com/ShiftLeftSecurity/joern
cd joern
sudo ./joern-install.sh

在这里插入图片描述

启动joern

如下图,启动joern,进入命令行界面
在这里插入图片描述

生成CPG(常用)

使用importCode生成CPG(最常用,在命令行端解析c/java代码为属性图等)

进入目录/joern-cli/,执行下列指令下载示例程序x42

git clone git@github.com:ShiftLeftSecurity/x42.git
# 上面的git clone命令不好使的话,写下面的
git clone https://github.com/ShiftLeftSecurity/x42.git

在这里插入图片描述

使用importCode指令为程序x42 下的c代码文件创建一个代码属性图

注意:joern解析c语言文件的时候,导入到指令的是folder,而不是.c或者.cpp文件,这里的"./x42/c"内容如下:
在这里插入图片描述
从上图可以看出,./x42/c是一个包含4个.c文件的文件夹

importCode(inputPath="./x42/c"
### 安装和使用 Joern 工具于 Windows 平台 Joern 是一种用于分析源代码的安全工具,它通过构建 Code Property Graph (CPG) 来支持复杂的静态代码分析。以下是关于如何在 Windows 上安装并使用 Joern 的详细说明。 #### 系统需求 为了成功运行 Joern,在 Windows 环境下需要满足以下条件: - Java Development Kit (JDK),版本建议为 8 或更高[^3]。 - Docker Desktop 应用程序已正确配置并启动,因为 Joern 使用容器化环境来执行其功能[^4]。 #### 步骤一:Docker 配置 由于 Joern 基于 Docker 构建,因此需先确认 Docker 是否正常工作以及资源分配是否充足。打开 PowerShell 终端输入命令 `docker --version` 检查 Docker 版本号,并确保服务正在运行。如果尚未安装 Docker,则可以从官方页面下载适合 Windows 的版本[^5]。 #### 步骤二:克隆 Joern 存储库 利用 Git 将 Joern 的最新代码仓库复制至本地机器上。此操作可通过如下指令完成: ```bash git clone https://github.com/joernio/joern.git cd joern ``` #### 步骤三:初始化与更新子模块 进入项目目录后,还需同步必要的子模块数据以获取全部所需组件: ```bash git submodule update --init --recursive ``` #### 步骤四:启动 Joern 容器 借助脚本来简化设置过程,只需简单调用即可加载预定义镜像并开启交互模式: ```bash ./joern-cli/bin/joern ``` 上述命令会自动拉取所需的 Docker 映像并将控制权交给内部 shell[^6]。 #### 数据导入实例演示 假设有一个 C/C++ 文件名为 test.c ,可以通过下面的方式将其转换成图结构形式以便后续查询处理: ```bash code2cpg /path/to/test.c ``` #### 查询示例 对于识别特定依赖关系的任务,比如检测是否存在 Spring Framework 关联的情况,可采用类似这样的语句实现自动化判断逻辑: ```scala cpg.dependency.name.matches(".*spring.*").l.exists() // 返回布尔值表示匹配状态 ``` 以上即完成了基本的操作流程介绍,具体更多高级特性请参阅官方文档进一步学习探索[^7]。
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值