代碼屬性圖之-joern簡易教程

一 Joern實例分析

Joern中發現了一個實例教程,本着學習的態度,嘗試復現這個過程,以增加自己的經驗!嚴謹轉載,歡迎討論!

1 正常安裝joern以及neo4j。

2 建議下載教程中的VLC版本。

cd $JOERN #joern目錄
mkdir tutorial; cd tutorial #創建並轉入tutorial
wget http://download.videolan.org/pub/videolan/vlc/2.1.4/vlc-2.1.4.tar.xz #下載vlc源碼
tar xfJ vlc-2.1.4.tar.xz//解壓
cd .. #返回上一級
./joern tutorial/vlc-2.1.4/  #導入代碼

加壓後的內容如下,這是一個完整的工程。

之後,需要更改neo4j下conf/neo4j-server.properties的變量:

org.neo4j.server.database.location=$JOERN/.joernIndex/,生成的.joernIndex在哪,就改爲哪。

3 從控制檯啓動neo4j:

cd $neo4j/bin
sudo ./neo4j console

4 另開一個終端,使用joern-tools來實現節點的查詢,-g 參數是指使用Germlin語言查詢。首先使用Germlin查詢檢索所有直接連接到根節點的所有節點:

echo 'g.v(0).out()' | joern-lookup -g

首先是目錄,或者說文件夾。n0是第一個文件夾,總目錄,也就是vlc-2.1.4,其餘的14個分別對應vlc-2.1.4中的14的文件夾。

嘗試使用joern來獲取某個函數的AST,CFG,DFG

    1 查看GetAoutBuffer函數的位置: echo 'getFunctionsByName("GetAoutBuffer").id' | joern-lookup -g | joern-location

    2 首先,使用john -plot- ast生成AST的.dot文件,如下:

echo 'getFunctionsByName("GetAoutBuffer").id' | joern-lookup -g | tail -n 1 | joern-plot-ast > foo.dot

   其次,顯示這個ast圖像:

dot -Tsvg foo.dot -o ast.svg; eog ast.svg

最左邊的一部分如下:

     3 獲取該函數的CFG:首先,利用 joern-plot-proggraph -cfg 生成CFG的dot文件

echo 'getFunctionsByName("GetAoutBuffer").id' | joern-lookup -g | tail -n 1 | joern-plot-proggraph -cfg > cfg.dot;

  其次,dot -Tsvg cfg.dot -o cfg.svg; eog cfg.svg

結果如下:

上面的一部分放大後如下:

      4 獲取該函數的CFG,首先利用 joern-plot-proggraph -ddg -cfg生成相應的dot文件

echo 'getFunctionsByName("GetAoutBuffer").id' | joern-lookup -g | tail -n 1 | joern-plot-proggraph -ddg -cfg > ddgAndCfg.dot;

  其次再用 dot -Tsvg ddgAndCfg.dot -o ddgAndCfg.svg; eog ddgAndCfg.svg 來顯示這個文件,如下:

上面部分放大後

由此可以看出,joern對數據的傳輸很明確!

以上爲joern獲取文件的AST,CFG,DFG等操作,操作關鍵在於:1 查找自己感興趣的函數;2 會使用相應的函數來獲取相應的圖,並用相應的命令來顯示。

5 通過joern獲取相應的切片:joern是通過CFG,DFG等來獲取切片的,這點和angr一樣。首先,獲取dot文件

echo 'getFunctionsByName("GetAoutBuffer").id' | joern-lookup -g | tail -n 1 | joern-plot-proggraph -ddg -cfg | joern-plot-slice 1856423 'p_buf' > slice.dot;

其次顯示這個文件:dot -Tsvg slice.dot -o slice.svg;eog slice.svg

這裏有個問題,這個dot文件顯示的和joern顯示的不一樣!!!按理來說應該用陰影顯示的,但是看不出來!

二 總結

1 從實例出發,瞭解joern是如何獲取軟件的AST,CFG,DFG的,重要的一點是,joern可以分析大型軟件,這個很有用。

2 函數切片這個存在問題,我會查下資料,看看是啥情況

3 目前只是顯示這個圖像,生成的dot文件內容也相當簡略,能否獲取簡潔的純代碼還需要繼續研究下

4 本文研究的不多,除了這些外,還有很多命令沒有涉及,以及neo4j的相關操作也沒有涉及,還需要繼續學習!

 

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