Skip to main content

A tool generating and comparing control flow graphs of GO samples.

Project description

GoResolver

GoResolver is a Go analysis tool using both Go symbol extraction and Control Flow Graph (CFG) similarity to identify and resolve the function symbols of an obfuscated Go binary.

This tool supports all three major operating systems, Windows, MacOS and Linux as well as their respective executables formats, PE, ELF and Mach-O for the X86, AMD64, ARM and ARM64 architectures.

Dependencies

GoResolver depends on the "GoGrapher" and "GoStrap" projects. The latter also depending on "GoProjectManager". Please make sure the above dependencies are installed before using GoResolver.

Build & Install

To build GoResolver use Hatch's usual build command :

hatch build

The built archive will be placed in the "dist" directory as a .whl file. To install GoResolver, simply install the .whl file using pip.

pip install dist/goresolver-*.whl

Command Line Usage

Once installed, a new utility goresolver will be available.

usage: goresolver [-h] [-l [LIBS ...]] [-v [VERSIONS ...]] [-f] [-s] [-r COMPARE_REPORT] [-b BACKUP_PATH] [-o OUTPUT] [-t THRESHOLD] [-q] [-x] [-g] sample_path [reference_path]

positional arguments:
  sample_path                          Path to the GO sample to analyze.
  reference_path                       Path to the GO reference sample to compare to (if any).

options:
  -h, --help                           show this help message and exit
  -l, --libs [LIBS ...]                List of GO libs to include in the generated samples.
  -v, --go-version VERSION             The GO version to build the reference samples with.
  -f, --force                          Force build existing samples.
  -s, --show                           Show available go versions.
  -r, --compare-report COMPARE_REPORT  Path to an already generated GoGrapher report.
  -b, --backup-path BACKUP_PATH        Path where to save the intermediary GoGrapher report.
  -o, --output OUTPUT                  Path of the output JSON report.
  -t, --threshold THRESHOLD            Value at which matches are considered significant.
  -q, --quiet                          Reduce the amount of logs.
  -x, --extract                        Extract symbols from the Go sample.
  -g, --graph                          Compare the Go sample against generated references.

Here is a typical workflow using GoResolver :

goresolver "path/to/sample.exe" -o "path/to/report.json"

Options

-l, --libs [LIBS ...]                List of GO libs to include in the generated samples.
-v, --go-version VERSION             The GO version to build the reference samples with.

The --libs and --go-version options allows you to tweak which Go version and libraries are used to generate the reference sample.

By default, GoResolver will attempt to identify to GoVersion used to generate the sample and failing that test a range of Go version and select the closest one.

-t, --threshold THRESHOLD            Value at which matches are considered significant.

The --threshold allow you to tweak the confidence threshold necessary to consider symbols obtained through the graph algorithm in a range of 0.0 to 1.O. The default value is 0.9.

-x, --extract                        Extract symbols from the Go sample.
-g, --graph                          Compare the Go sample against generated references.

The --extract and --graph options allow you to toggle either algorithm in isolation. Best result are achieved when both options are turned on, which is the default behavior.

Plugins

GoResolver comes with plugins for both IDA and Ghidra in the Plugin directory of this repository. Theses plugins make using GoResolver in conjunction with theses tools easier, by giving an easy way to import reports generated by the CLI tool into their respective databases.

Both plugins share the same common directory. When installing one or the other be sure to copy the accompanying ida or ghidra files as well.

IDA

To install the IDA plugin copy the following files to the ~/.idapro/plugins/goresolver directory :

common/
goresolver_ida.py
ida-plugin.json
ida_config_form.py

Ghidra

To Install the Ghidra plugin copy the following files to your choosed plugin directory, Ex: ~/.ghidra/plugins/goresolver :

common/
goresolver_ghidra.py

Then add the directory to Ghidra's Script Manager.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

goresolver-1.1.0.tar.gz (27.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

goresolver-1.1.0-py3-none-any.whl (33.9 kB view details)

Uploaded Python 3

File details

Details for the file goresolver-1.1.0.tar.gz.

File metadata

  • Download URL: goresolver-1.1.0.tar.gz
  • Upload date:
  • Size: 27.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for goresolver-1.1.0.tar.gz
Algorithm Hash digest
SHA256 4c95209428ec445cfbfde91e6f4c3a2e8c91d8b0ecdd48d944003d21fef7ef9e
MD5 d0eea2eec2a176257c7fd75f87ea8cd5
BLAKE2b-256 01eba628bfd814b721372dcbfa77d24582152ecbf0244ffd8ace3ee436697521

See more details on using hashes here.

Provenance

The following attestation bundles were made for goresolver-1.1.0.tar.gz:

Publisher: publish.yml on volexity/GoResolver

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file goresolver-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: goresolver-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 33.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for goresolver-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9cf7ca29e6295d89910c85da8d3be8380d576a25ee58f45d7df67bd0c5136e4c
MD5 b4efadea9fbad9e900bbc716c8964bbb
BLAKE2b-256 a88c385af8aae5fce5941f451b89e1fb35f0064b784d78860826a55b1f285b55

See more details on using hashes here.

Provenance

The following attestation bundles were made for goresolver-1.1.0-py3-none-any.whl:

Publisher: publish.yml on volexity/GoResolver

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page