Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- PHP
- 파이썬
- 도구모음
- 불법유통근절
- 기타정보
- Service
- 프로젝트
- HTML
- 화학물질불법유통온라인감시단
- 경기팀
- Los
- codeup
- webhacking
- 여행
- 국가정보원
- UKPT level
- 연구모임
- 국정원
- 웹 해킹 입문
- 국가기록원
- 화학물질안전원
- 불법유통
- MITRE ATT&CK
- nurisec
- 12기
- suninatas
- 정보보안
- UKPT
- 대외활동
- 화학물질
Archives
- Today
- Total
agencies
Joern을 이용한 CPG node edge 생성하기 (deepdfa) 1.1.1072 version 본문
https://github.com/ISU-PAAL/DeepDFA
https://arxiv.org/pdf/2212.08108
※ 논문에 존재하는 before 파일 중 일부
우리는 c 파일로 cpg 파일을 생성하고
생성된 cpg 파일로 nodes 와 edges를 생성해야 합니다.
본 실습은 colab 환경에서 진행되었습니다.
!wget https://github.com/joernio/joern/releases/download/v1.1.1072/joern-cli.zip
!unzip joern-cli.zip -d joern-cli
%cd joern-cli/joern-cli
joern 1.1.1072 버전 설치
!./joern-parse /content/100016.c
cpg 생성하기
생성된 cpg.bin 파일은 위의 경로에 존재한다.
서로 내용이 거의 동일하다
이제 노드를 생성하기 위해
colab 터미널에서 joern 을 실행한다.
(이것도 joern 스크립트로 진행할 수 있으나 지금은 테스트 중이기때문에 터미널 환경에서 진행했다)
joern> 에 아래의 명령을 입력한다.
importCpg(”cpg.bin”)
cpg.all.l
생성된 노드를 before 파일의 nodes 와 비교를 해본다.
내용이 똑같다 (순서만 다르다)
이제 엣지를 생성해보자
%%writefile script3.sc
import java.io.PrintWriter
import scala.jdk.CollectionConverters._
importCpg("cpg.bin")
// 결과를 JSON 파일로 출력할 준비
val writer = new PrintWriter("/content/cpg_edges.json")
writer.print("[")
// 모든 에지 추출
val edges = cpg.graph.edges.l
edges.foreach { edge =>
val inNodeId = edge.inNode.id // inNode ID 추출
val outNodeId = edge.outNode.id // outNode ID 추출
val edgeType = edge.label // 에지의 타입 (예: REACHING_DEF, AST 등)
// VARIABLE 속성에서 값 추출
val extraDataValue = if (edge.propertyKeys.contains("VARIABLE")) {
edge.property("VARIABLE").toString
} else {
"null"
}
// 에지 정보를 JSON 형식으로 출력
if (extraDataValue != "null") {
writer.print(s"""[$inNodeId,$outNodeId,"$edgeType","$extraDataValue"],""")
} else {
writer.print(s"""[$inNodeId,$outNodeId,"$edgeType",null],""")
}
}
// JSON 형식의 배열 닫기
writer.print("]")
writer.close()
이번꺼는 joern 스크립트로 작성되었다.
생성된 스크립트는
!./joern --script script3.sc
명령으로 실행할 수 있다.
순서만 다르지 내용은 똑같다.
'Ⅲ. 정보보안' 카테고리의 다른 글
Joern (Deepdfa : nodes edges cpg) 생성 (완료) (2) | 2024.10.09 |
---|---|
joern으로 생성한 노드를 before 형식에 맞게 정렬 (0) | 2024.10.08 |
WSL2 그래픽 환경 사용하기 (1) | 2024.09.09 |
WSL2 재설치 (파일을 찾을 수 없습니다) (0) | 2024.09.09 |
윈도우에 WSL2 설치하기 (0) | 2024.09.09 |