agencies

Joern (Deepdfa : nodes edges cpg) 생성 (완료) 본문

Ⅲ. 정보보안

Joern (Deepdfa : nodes edges cpg) 생성 (완료)

agencies 2024. 10. 9. 15:53

※ 드디어 찾아냈습니다.

사실 DeepDFA 파일 내부에 노드 엣지 cpg를 생성해주는 joern script가 있었습니다.

환경은 colab에서 진행했습니다.


 

 

1. joern 1.1.1072 버전 설치

2. deepdfa git으로 설치

!git clone https://github.com/ISU-PAAL/DeepDFA.git
!wget https://github.com/joernio/joern/releases/download/v1.1.1072/joern-cli.zip
!unzip joern-cli.zip -d joern-cli

 

터미널에서 joern을 사용할 수 있도록 환경변수를 설정해줍니다.

export PATH=$PATH:/content/joern-cli/joern-cli

 

그리고 노드 엣지를 생성해주는 script 파일이 위치한 경로로 이동합니다.

 

 

DeepDFA > DDFA > storage > external > get_func_graph.sc 

 

 

joern --script get_func_graph.sc --params filename=/content/100006.c

 

100006.c
0.00MB

 

 

 

위코드로 아래의 결과물 도출

 

+100006.c.cpg.bin
0.02MB
+100006.c.nodes.json
0.00MB
+100006.c.edges.json
0.00MB

 

 

 

 


 

 

(추가)

C 소스코드 여러개를 한 폴더에 넣고 output도 한 폴더에 넣는다

 

import sys, os
import subprocess

# 노드 엣지 cpg 파일 넣는 곳
try:
  os.mkdir("big-joern")
except:
  pass
try:
  os.mkdir("c_to_joern")
except:
  pass


joern = "/content/joern-cli/joern-cli/joern"

folder_path = "c_to_joern"
for filename in os.listdir(folder_path):
  if filename.endswith(".c"):
    file_path = os.path.join(folder_path, filename)
    file_path = "/content/" + file_path
    print(file_path)
    subprocess.run([joern, "--script", "/content/big-joern.sc", "--params", f"filename={file_path}"])

 

big-joern.sc 파일은

deepdfa 에 있는 스크립트 파일을 가지고 온다.

big-joern.sc
0.00MB