GG_Images

module
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 17, 2026 License: GPL-3.0

README

GG_Images

Download profile photos from the GG internet messenger in full resolution

Release Go Go Report Card License BlackArch

Table of contents

About

GG (Gadu-Gadu) is a Polish internet messenger. Profile photos of GG users appear small inside the messenger, but the GG avatar server allows downloading them in much larger sizes (up to 800x800 px) through a public URL — no login required.

GG_Images is a simple GUI tool that automates this process. You enter a GG number (or a range of numbers), and the application downloads the corresponding profile photo in full resolution. The tool is straightforward but can be useful during OSINT investigations and authorized security assessments.

This application does not exploit any vulnerability. It only provides easier access to publicly available data.

You can also download any profile photo manually by entering one of these URLs in a web browser:

  • https://avatars.gg.pl/user,GG_number/s,800x800
  • https://avatars.gg.pl/user,GG_number/

Replace GG_number with the actual user number (for example 12345678).

Warning: Some application features (range and all-numbers modes) send many requests in a short time. This may cause server problems and may expose you to legal consequences. Use this application for educational purposes only and authorized security testing.

Screenshots

Dark theme

dark theme

Light theme

light theme

Features

  • Download a profile photo from:
    • One number (manual input)
    • Random number
    • Range of numbers
    • All numbers
  • Dark and light theme support
  • Multi-language interface (English, Polish, German) with automatic system language detection
  • Tree-based navigation panel
Operating systems

Program tested on the following operating systems:

Operating system Tested In official repository Link
Debian Bullseye Yes
RebornOS Yes
BlackArch Yes Yes https://blackarch.org/tools.html
Built with
  • Go 1.26
  • Fyne v2.7.3 (cross-platform GUI toolkit)

Project structure

GG_Images/
├── cmd/
│   └── gg-images/          # GUI code (Fyne screens, menus, navigation)
├── internal/
│   ├── download/           # Business logic (HTTP downloads, file I/O)
│   └── i18n/               # Internationalization (EN, PL, DE)
├── build/
│   └── docker/             # Dockerfile and docker-compose.yml
├── assets/
│   ├── logo/               # Application logo (dark and light)
│   ├── screenshots/        # README screenshots
│   └── examples/           # Example JSON files
├── go.mod                  # Go module definition
├── go.sum                  # Dependency checksums
├── .dockerignore           # Files excluded from Docker build context
├── README.md
├── LICENSE
└── .gitignore

Each directory contains its own README.md with detailed documentation.

Application navigation

The application uses a tree-based navigation panel. The diagram below shows the menu structure and available screens.

graph TD
    Root["GG Images"]

    Root --> Welcome["Welcome"]
    Root --> About["About"]
    Root --> Download["Download"]

    Download --> OneNumber["One number"]
    Download --> RandNumber["Random number"]
    Download --> RangeNumbers["Range numbers"]
    Download --> AllNumbers["All numbers"]

    OneNumber --> EnterNumber["Enter number"]
    OneNumber --> FromFile["From file"]
    RangeNumbers --> PredefinedRange["Predefined range"]
    RangeNumbers --> CustomRange["Custom range"]
    AllNumbers --> PredefinedDelay["Predefined delay"]
    AllNumbers --> CustomDelay["Custom delay"]
    AllNumbers --> WithoutDelay["Without delay"]

    style Root fill:#2d6a4f,color:#fff
    style Download fill:#1b4332,color:#fff
    style OneNumber fill:#1b4332,color:#fff
    style RangeNumbers fill:#1b4332,color:#fff
    style AllNumbers fill:#1b4332,color:#fff

How download works

sequenceDiagram
    participant User
    participant App as GG Images
    participant API as avatars.gg.pl

    User->>App: Enter GG number
    App->>App: Build URL with GG number
    App->>API: HTTP GET /user,{number}/s,800x800
    API-->>App: Image data (PNG)
    App->>App: Save file as {number}.png
    App-->>User: File saved to working directory

Building from source

Prerequisites
Requirement Minimum version Purpose
Go 1.25 Go compiler and toolchain
GCC or Clang any recent C compiler (required by CGo for OpenGL bindings)
pkg-config any Locates system libraries during build
OpenGL / Mesa dev headers any Fyne GUI rendering
X11 dev headers any Window management on Linux
Install system dependencies

The Fyne GUI toolkit uses CGo and requires system libraries for OpenGL and X11. Install them before building.

Debian / Ubuntu
sudo apt-get update
sudo apt-get install -y \
  gcc \
  pkg-config \
  libgl1-mesa-dev \
  libx11-dev \
  libxcursor-dev \
  libxrandr-dev \
  libxinerama-dev \
  libxi-dev \
  libxxf86vm-dev
Fedora / RHEL / CentOS
sudo dnf install -y \
  gcc \
  pkgconf-pkg-config \
  mesa-libGL-devel \
  libX11-devel \
  libXcursor-devel \
  libXrandr-devel \
  libXinerama-devel \
  libXi-devel \
  libXxf86vm-devel
Arch Linux / BlackArch
sudo pacman -S --needed \
  gcc \
  pkg-config \
  mesa \
  libx11 \
  libxcursor \
  libxrandr \
  libxinerama \
  libxi \
  libxxf86vm
Alpine Linux
sudo apk add \
  gcc \
  musl-dev \
  pkgconf \
  mesa-dev \
  libx11-dev \
  libxcursor-dev \
  libxrandr-dev \
  libxinerama-dev \
  libxi-dev \
  libxxf86vm-dev
Compile the binary
graph LR
    A["Clone repository"] --> B["Download Go modules"]
    B --> C["Build binary"]
    C --> D["Run"]

Step 1. Clone the repository:

git clone https://codeberg.org/nanoory/GG_Images.git
cd GG_Images

Step 2. Download dependencies:

go mod download

Step 3. Build the binary:

CGO_ENABLED=1 go build -o gg-images ./cmd/gg-images

Step 4. Run:

./gg-images

The compiled binary gg-images is a single self-contained file. You can copy it to any machine with the same OS and architecture. It only requires the OpenGL and X11 runtime libraries listed above.

Verify the build

After building, confirm the binary works:

# Check that the binary was created
file gg-images

# Show linked libraries
ldd gg-images

# Run
./gg-images
Optional: install to system PATH
sudo install -m 755 gg-images /usr/local/bin/gg-images
Cross-compilation

Fyne uses CGo, so cross-compilation requires a C cross-compiler for the target platform. The table below shows common targets.

Target GOOS GOARCH C compiler Command
Linux x86_64 linux amd64 gcc CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o gg-images-linux-amd64 ./cmd/gg-images
Linux ARM64 linux arm64 aarch64-linux-gnu-gcc CGO_ENABLED=1 GOOS=linux GOARCH=arm64 CC=aarch64-linux-gnu-gcc go build -o gg-images-linux-arm64 ./cmd/gg-images
Windows x86_64 windows amd64 x86_64-w64-mingw32-gcc CGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC=x86_64-w64-mingw32-gcc go build -o gg-images.exe ./cmd/gg-images

Note: Cross-compilation also requires the target platform's development libraries (headers and .a/.so files). The simplest approach for multi-platform builds is to use the fyne-cross tool, which handles cross-compilation inside Docker containers:

go install github.com/fyne-io/fyne-cross@latest
fyne-cross linux -arch amd64,arm64 ./cmd/gg-images
fyne-cross windows -arch amd64 ./cmd/gg-images
Install with go install

If you have Go installed, you can build and install directly:

go install codeberg.org/nanoory/GG_Images/cmd/gg-images@latest

The binary is placed in $GOPATH/bin/ (or $HOME/go/bin/ by default).

Running with Docker or Podman

This is a GUI application. It requires X11 forwarding from the host to display the window.

graph LR
    subgraph Host
        X11["X11 Display"]
    end
    subgraph Container
        App["GG Images"]
    end
    App -- "/tmp/.X11-unix" --> X11
Prerequisites

Allow the container to access your X11 display:

xhost +local:
Docker

Build and run with Compose:

docker compose -f build/docker/docker-compose.yml up --build

Or without Compose:

docker build -t gg-images -f build/docker/Dockerfile .
docker run --rm \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix:ro \
  --network host \
  gg-images
Podman

Build and run with podman-compose:

podman-compose -f build/docker/docker-compose.yml up --build

Or without Compose:

podman build -t gg-images -f build/docker/Dockerfile .
podman run --rm \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix:ro \
  --network host \
  gg-images

Note: The Dockerfile uses docker.io/ prefixed base images for Podman compatibility. Both docker compose and podman-compose work with the provided docker-compose.yml.

Docker build stages

The Dockerfile uses a multi-stage build to keep the final image small.

graph LR
    A["Stage 1: golang:1.26-bookworm<br/>Install deps + compile"] --> B["Stage 2: debian:bookworm-slim<br/>Copy binary + runtime libs"]
    B --> C["Final image"]

BlackArch / OSINT usage

GG_Images is included in BlackArch Linux as an OSINT tool for authorized security testing and penetration testing engagements.

GG is widely used in Poland. During security assessments, profile photos can help verify identities, correlate accounts across platforms, or confirm that a GG number belongs to a specific person. The tool is simple but useful when you need to quickly retrieve a full-resolution photo that appears tiny inside the messenger.

Install from BlackArch repository
sudo pacman -S gg-images
Typical OSINT workflow
graph TD
    A["Obtain target GG number<br/>from public sources"] --> B["Run GG Images"]
    B --> C{"Choose download mode"}
    C --> D["Single number<br/>Known target"]
    C --> E["Range of numbers<br/>Targeted scan"]
    D --> F["Analyze downloaded<br/>profile photos"]
    E --> F
    F --> G["Reverse image search<br/>Face matching<br/>Cross-platform correlation"]
  1. Obtain target GG numbers from public sources (forums, social media, public directories).
  2. Run GG Images and enter the number(s).
  3. The tool downloads profile photos at full resolution (800x800 px) — much larger than they appear inside the GG messenger.
  4. Analyze the photos: reverse image search, face matching, or cross-platform account correlation.

Important: Use this tool only during authorized security assessments. Bulk downloading without authorization may violate terms of service and local laws.

Configuration and settings

The application stores user preferences (theme, last selected panel) using the Fyne preference system. The app ID is gg.images.

Settings file locations

Fyne writes preferences to a JSON file. The path depends on the operating system.

OS Path
Linux ~/.config/fyne/gg.images/preferences.json
BSD (FreeBSD, OpenBSD) ~/.config/fyne/gg.images/preferences.json
macOS ~/Library/Preferences/fyne/gg.images/preferences.json
Windows %APPDATA%\fyne\gg.images\preferences.json

On Linux and BSD, the path follows the XDG Base Directory specification. If $XDG_CONFIG_HOME is set, Fyne uses $XDG_CONFIG_HOME/fyne/gg.images/ instead of ~/.config/fyne/gg.images/.

graph TD
    A["User changes settings<br/>(theme, font size)"] --> B["Fyne Preferences API"]
    B --> C{Operating system?}
    C -->|Linux / BSD| D["~/.config/fyne/gg.images/preferences.json"]
    C -->|macOS| E["~/Library/Preferences/fyne/gg.images/preferences.json"]
    C -->|Windows| F["%APPDATA%\\fyne\\gg.images\\preferences.json"]
Stored preferences
Key Type Description
currentWindow string ID of the last selected navigation panel (restored on next launch)
lang string Language code ("en", "pl", "de"). If empty, the app detects the system language.
theme string Selected theme: "dark" or "light"
font_size float Font scale set in File > Settings > Appearance
animation string Animation setting from Fyne appearance settings

You can edit the preferences.json file manually with any text editor. Delete the file to reset all settings to defaults.

Downloaded photos

Downloaded profile photos are saved to a gg_images_download/ folder in the directory where the binary is launched. This is not inside the settings directory — it is always relative to the current working directory.

./gg_images_download/
├── 12345678.png
└── ...

TODO

  • Base functions
  • Read GG numbers from JSON file
  • Progress bars for download windows

Licensing

GPL-3.0 only

Directories

Path Synopsis
cmd
gg-images command
internal
i18n
Package i18n provides internationalization support.
Package i18n provides internationalization support.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL