代碼屬性圖之-joern初探

本文僅作交流學習使用,嚴謹轉載!!!

一 Joern安裝

參考上篇博客https://blog.csdn.net/water_likly/article/details/88415127

二 Joern的初步使用

Joern的使用主要涉及到python-joern,neo4j的操作,本文僅作初步的學習。參考鏈接:Joern

首先,Joern是用來分析C/C++程序的,因此,我們先從網上或者自己編寫一個簡單的C程序,我直接從github上下載一個自己感興趣的項目。

1 cd $JOERN //轉入你安裝的joern目錄(這個目錄比較重要,下面會用到!

2 插入代碼:代碼原型:java -jar $JOERN/bin/joern.jar $CodeDirectory

    要是分析大型程序的話,需要指定內存:java -Xmx$SIZEg -jar $JOERN/bin/joern.jar $CodeDirectory

    $JOERN:joern安裝目錄,$CodeDirectory:待分析的程序目錄,$SIZE:給jvm分配內存

   本文的代碼爲:sudo java -jar /home/****/joern-0.3.1/bin/joern.jar /home/****/testcode/giri-master

   該命令運行完後會在該目錄(joern-0.3.1)下生成一個 .joernIndex隱藏文件(ctrl+h可以查看)。注意,如果此目錄已經存在,則joern.jar就會在其中添加代碼,因此在每次你想要創建一個新的數據庫之前需要刪除.joernIndex,然後重複此步驟。

3 設置neo4j,該部分爲重點,如果你按照我上篇博客來安裝的話,應該在/usr下發現neo4j目錄,裏面應該是neo4j的社區2.1.8版(我記得應該是2.1.5,但是2.1.8是完好的)。在/usr/Neo4j/neo4j-community-2.1.8/conf目錄下找到neo4j-server.properties文件,並修改爲上面.joernIndex的目錄,之後保存退出。

   4 嘗試啓動neo4j,首先轉到neo4j的bin目錄:cd /usr/Neo4j/neo4j-community-2.1.8/bin

      之後運行:sudo ./neo4j start

      啓動失敗,使用sudo ./neo4j start-no-wait

     打開瀏覽器,localhost:7474

     成功啓動 neo4j。

5 驗證neo4j能夠正常啓動後,先將neo4j關閉,運行:sudo ./neo4j stop即可。

6 運行joern:在joern的安裝目錄下,運行:sudo  ./joern  /home/*****/testcode/giri-master,結果如下:

7 之後轉到neo4j的目錄打開neo4j:sudo ./neo4j console //控制檯下運行neo4j

   8 打開瀏覽器,輸入127.0.0.1:7474或者localhost:7474查看,按下圖點擊頁面:

9 出現的效果:

至此,我們完成了joern對代碼的初步分析,joern是藉助neo4j來顯示代碼、文件之間的相關性的。

對上面的一些解釋:

IS_PARENT_DIR_OF:爲每個目錄創建一個節點,並使用IS_PARENT_DIR_OF邊連接這些節點,可以公開目錄層次結構。

IS_FILE_OF:爲每個文件創建一個節點,並使用IS_PARENT_DIR_OF邊連接這些節點,結合IS_PARENT_DIR_OF可以公開目錄層次結構。

IS_CLASS_OF:屬性和方法聲明通過IS_CLASS_OF邊連接到類節點,可以通過IS_FILE_OF邊和文件節點相連接。

IS_AST_PARENT_OF:抽象語法樹節點通過IS_AST_PARENT_OF邊連接到它們的子節點。

IS_FUNCTION_OF_AST:通過IS_FUNCTION_OF_AST邊將對應的函數節點連接到AST根節點。

FLOWS_TO、REACHES:語句節點通過FLOWS_TO以及REACHES邊連接到其他語句節點抽象語法樹節點的子集,分別表示控制和數據流。

USE、DEF:符號節點通過use -edge連接到使用符號的所有語句節點,並通過def -edge連接到分配給符號的所有語句節點。

其他的信息:DECLERAS,POST_DOM,CONTROLS,IS_FUNCTION_OF_CFG等還沒有找到具體的說明。看官們可以自行理解,要是有好的解釋,可以留言,我會添加並修改。

property keys是指節點的屬性。

三 小結

Joern有很多優點,我會在後面的學習中慢慢掌握,希望在學習joern的同時,也能對neo4j這個圖數據庫有所瞭解。本文的內容比較簡單,但卻是後面分析的基礎。好啦,今天到此爲止!

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