Joern(版本v1.0.141) 的簡易教程


這篇文章主要介紹一下Joern v1.0.141的使用,官方文檔見這:https://joern.io/docs/。
之前的博客主要集中在講joern 0.3.1的用法,官方文檔:https://joern.readthedocs.io/en/latest/
由於joern 0.3.1的安裝比較繁瑣,我沒成功安上,倒是新版本很容易地安好了。(可能過個幾年,這個新版本也變成了老版本=_=)

言歸正傳,Joern的使用流程比較簡單,主要分爲兩個部分。

導入代碼生成代碼屬性圖CPG

首先我們可以從github上找一些源碼來分析,這裏選擇joern文檔裏給的例子。

git clone https://github.com/ShiftLeftSecurity/tarpit-c

然後我們使用joern-parse工具來創建代碼屬性圖。

cd $joern
./joern-parse $CodeDirectory --out <path/to/cpg/cpg_name>

$joern:是joern的安裝目錄。

$CodeDirectory:是你要分析的代碼的目錄路徑。

<path/to/cpg/cpg_name>:指的是你輸出cpg的文件路徑和文件名。

下面舉個例子:

./joern-parse ../tarpit-c/tarpitc --out ../output/tarpitc.bin

在這裏插入圖片描述

這裏joern就把tarpitc目錄下的代碼都拿去分析生成了CPG,生成文件tarpitc.bin.zip放在output目錄下。

查詢信息

查詢生成的CPG信息,官網文檔也給出了好多種方法,這裏簡單介紹利用joern shell和scala腳本來實現查詢操作。實際上,joern的開發者已經爲我們寫好了很多有用的腳本。都在joern安裝目錄的/script目錄下。

打開joern shell

./joern

在這裏插入圖片描述

導入CPG

importCpg("../output/tarpitc.bin.zip") 

在這裏插入圖片描述
運行外部腳本,這裏用的是joern/scripts/general文件夾下的list-funcs.sc

cpg.runScript("general/list-funcs.sc") 

可以看到列出了源碼中出現的函數。
在這裏插入圖片描述

還有很多其他的有用的腳本,比如cfg-for-funcs-dump.sc就是從導出控制流圖。

在這裏插入圖片描述

然後我們也可以看到joern安裝目錄下也出現了相應的json格式文件。

在這裏插入圖片描述

然後用json-handle插件打開這個json文件可以看到包含這些信息:

在這裏插入圖片描述

調用外部腳本

但是這個cpg.runScript好像只能運行joern自帶的腳本。官方文檔還給出了另外一種調用外部腳本的方法。下面簡單介紹一下這個用法。
首先寫一個簡單的test.sc腳本(放在joern的目錄下,比較方便),功能是接收一個cpg文件,輸出代碼中方法的名字到outFile文件中。

@main def exec(cpgFile: String, outFile: String) = {
   importCpg(cpgFile)
   cpg.method.name.l |> outFile
}

在joern的目錄下,使用如下命令運行外部腳本:

./joern --script test.sc --params cpgFile=../src.path.zip,outFile=output.log

其中cpgFile參數是你cpg文件的路徑,相對路徑和絕對路徑都可以。運行結果如下:
在這裏插入圖片描述
然後我們可以看到joern目錄下多了一個output.log文件,打開它可以看到我們列出了代碼裏所有方法的名字。
在這裏插入圖片描述


更多的joern用法,可以參考官方的github,因爲joern的更新很快,可能官網的文檔有些過時了,建議還是去看joern的github文檔,介紹地更詳細。這裏只是介紹了一種簡單的方法,實際上還可以通過REST API 和Java Library來用。
如果對joern的使用有其他問題的話,可以去這個社區提問,作者也會回覆的。

https://gitter.im/joern-code-analyzer/community?source=orgpage#

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章