本文僅作交流學習使用,嚴謹轉載!!!
一 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這個圖數據庫有所瞭解。本文的內容比較簡單,但卻是後面分析的基礎。好啦,今天到此爲止!