All Projects → joernio → joern

joernio / joern

Licence: Apache-2.0 license
Open-source code analysis platform for C/C++/Java/Binary/Javascript/Python/Kotlin based on code property graphs

Programming Languages

scala
5932 projects
java
68154 projects - #9 most used programming language
shell
77523 projects
PHP
23972 projects - #3 most used programming language
c
50402 projects - #5 most used programming language
SuperCollider
123 projects

Projects that are alternatives of or similar to joern

Joern
Open-source code analysis platform for C/C++/Java based on code property graphs
Stars: ✭ 386 (-60.12%)
Mutual labels:  code-analysis, syntax-tree, dataflow, query-language
llvm2cpg
LLVM meets Code Property Graphs
Stars: ✭ 62 (-93.6%)
Mutual labels:  llvm, cpg, code-property-graph
ghidra2cpg
Code Property Graph (CPG) frontend for binary applications and libraries.
Stars: ✭ 52 (-94.63%)
Mutual labels:  binary, cpg, code-property-graph
Javaparser
Java 1-15 Parser and Abstract Syntax Tree for Java, including preview features to Java 13
Stars: ✭ 3,972 (+310.33%)
Mutual labels:  code-analysis, syntax-tree
Chigraph
A visual systems language for beginners compiled using LLVM
Stars: ✭ 247 (-74.48%)
Mutual labels:  llvm, dataflow
llvm-semantics
Formal semantics of LLVM IR in K
Stars: ✭ 42 (-95.66%)
Mutual labels:  llvm
Angr Tutorial For CTF
angr tutorial for ctf
Stars: ✭ 97 (-89.98%)
Mutual labels:  binary
python-cstruct
C-style structs for Python
Stars: ✭ 38 (-96.07%)
Mutual labels:  binary
libdemangle
A simple library focusing on demangling symbols for different programing languages
Stars: ✭ 34 (-96.49%)
Mutual labels:  binary
gpkg
🌎 A global Node binary manager written in Rust
Stars: ✭ 53 (-94.52%)
Mutual labels:  binary
GhidraEmu
Native Pcode emulator
Stars: ✭ 25 (-97.42%)
Mutual labels:  ghidra
Bali
A fast and lightweight .Net library for reading and writing .class files.
Stars: ✭ 35 (-96.38%)
Mutual labels:  binary
Batch-First
A JIT compiled chess engine which traverses the search tree in batches in a best-first manner, allowing for neural network batching, asynchronous GPU use, and vectorized CPU computations.
Stars: ✭ 27 (-97.21%)
Mutual labels:  llvm
manyclangs
Repository hosting unofficial binary pack files for many commits of LLVM
Stars: ✭ 125 (-87.09%)
Mutual labels:  llvm
CorBinian
CorBinian: A toolbox for modelling and simulating high-dimensional binary and count-data with correlations
Stars: ✭ 15 (-98.45%)
Mutual labels:  binary
harmony-ecs
A small archetypal ECS focused on compatibility and performance
Stars: ✭ 33 (-96.59%)
Mutual labels:  binary
Log4j-CVE-Detect
Detections for CVE-2021-44228 inside of nested binaries
Stars: ✭ 33 (-96.59%)
Mutual labels:  binary
verificarlo
A tool for debugging and assessing floating point precision and reproducibility.
Stars: ✭ 51 (-94.73%)
Mutual labels:  llvm
e9afl
AFL binary instrumentation
Stars: ✭ 234 (-75.83%)
Mutual labels:  binary
xquery-power
A list of resources built on or with XQuery
Stars: ✭ 25 (-97.42%)
Mutual labels:  query-language

Joern - The Bug Hunter's Workbench

release Joern SBT Github All Releases Gitter

Joern is a platform for analyzing source code, bytecode, and binary executables. It generates code property graphs (CPGs), a graph representation of code for cross-language code analysis. Code property graphs are stored in a custom graph database. This allows code to be mined using search queries formulated in a Scala-based domain-specific query language. Joern is developed with the goal of providing a useful tool for vulnerability discovery and research in static program analysis.

Website: https://joern.io

Documentation: https://docs.joern.io/

Specification: https://cpg.joern.io

Requirements

  • JDK 11 (newer versions might work, but have not been properly tested)
  • optional: gcc and g++ (for auto-discovery of C/C++ system header files if included/used in your C/C++ code)

Development Requirements

Quick Installation

wget https://github.com/joernio/joern/releases/latest/download/joern-install.sh
chmod +x ./joern-install.sh
sudo ./joern-install.sh
joern

Compiling (synthetic)/ammonite/predef/interpBridge.sc
Compiling (synthetic)/ammonite/predef/replBridge.sc
Compiling (synthetic)/ammonite/predef/DefaultPredef.sc
Compiling /home/tmp/shiftleft/joern/(console)

     ██╗ ██████╗ ███████╗██████╗ ███╗   ██╗
     ██║██╔═══██╗██╔════╝██╔══██╗████╗  ██║
     ██║██║   ██║█████╗  ██████╔╝██╔██╗ ██║
██   ██║██║   ██║██╔══╝  ██╔══██╗██║╚██╗██║
╚█████╔╝╚██████╔╝███████╗██║  ██║██║ ╚████║
 ╚════╝  ╚═════╝ ╚══════╝╚═╝  ╚═╝╚═╝  ╚═══╝

joern>

If the installation script fails for any reason, try

./joern-install --interactive

Developers: IDE setup

Intellij IDEA

  • Download Intellij Community
  • Install and run it
  • Install the Scala Plugin - just search and install from within Intellij
  • Important: run sbt in your local joern clone and keep it open - this will allow us to use the BSP build in the next step
  • Back to Intellij: open project: select your local joern clone: select to open as BSP project (i.e. not sbt project!)
  • Await the import and indexing to complete, then you can start, e.g. Build -> build project or run a test

VSCode

  • Install VSCode and Docker
  • Install the plugin ms-vscode-remote.remote-containers
  • Open Joern project folder in VSCode Visual Studio Code detects the new files and opens a message box saying: Folder contains a Dev Container configuration file. Reopen to folder to develop in a container.
  • Select the Reopen in Container button to reopen the folder in the container created by the .devcontainer/Dockerfile file
  • Switch to scalameta.metals sidebar in VSCode, and select import build in BUILD COMMANDS
  • After import build succeeds, you are ready to start writing code for Joern

QueryDB (queries plugin)

Quick way to develop and test QueryDB:

sbt stage
./querydb-install.sh
./joern-scan --list-query-names

The last command prints all available queries - add your own in querydb, run the above commands again to see that your query got deployed. More details in the separate querydb readme

Benchmarks

Various static analysis benchmarks that measure Joern are contained under the benchmarks. The benchmarks are implemented in ScalaTest and can be run using the joern-benchmarks script. The benchmark results can be found on the benchmarks subproject's README. The currently implemented benchmarks along with the language frontends tested are:

For more instructions on how to run benchmarks individually head over to the benchmarks subproject. If you would like the benchmark results to be written to a file instead of printed to STDOUT, set the path to the environment variable JOERN_BENCHMARK_RESULT_FILE.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].