Skip to content

Repository files navigation

VirusTotal
BPREI Python 3.10 Python 3.11 Python 3.12

212284100-561aa473-3905-4a80-b561-0d28506553ee

Important

Windows Build
Direct Download - Windows Build

The current Windows version of the Python Reverse Engineering Inspector is available as a GitHub Actions artifact for direct download.

Download .exe

This build is only available for a limited time.

212284100-561aa473-3905-4a80-b561-0d28506553ee

BylickiLabs Python Reverse Engineering Inspector

Business Anwendung fΓΌr statische Python Codeanalyse,

  • Reverse Engineering, AbhΓ€ngigkeitsanalyse, KomplexitΓ€tsauswertung, Risikoerkennung und Bytecode Inspektion.
    • Version 1.0.0

Social Media & Contact


Deutsch English



Deutsch

Inhaltsverzeichnis

  1. ProjektΓΌbersicht
  2. Funktionsumfang
  3. Statische Analyse und Sicherheitsmodell
  4. Projekt und Symbolanalyse
  5. AbhΓ€ngigkeitsanalyse
  6. Funktionsaufrufe
  7. KomplexitΓ€tsanalyse
  8. NumPy und SciPy
  9. Risikoanalyse
  10. Bytecode Inspektion
  11. BenutzeroberflΓ€che
  12. Deutsch und Englisch
  13. SQLite Verlauf
  14. Exportformate
  15. Windows Testumgebung
  16. Windows Build
  17. Manuelle Installation
  18. Projektstruktur
  19. Technische Anforderungen
  20. Analysierte und ausgeschlossene Verzeichnisse
  21. Projektstatus



ProjektΓΌbersicht

Der BylickiLabs Python Reverse Engineering Inspector, kurz BPREI, ist eine Desktop Anwendung zur statischen Untersuchung vollstΓ€ndiger Python Projekte.

  • Die Anwendung liest Python Quellcode ein, analysiert die interne Struktur und stellt technische ZusammenhΓ€nge in mehreren spezialisierten Bereichen dar.
    • Dazu gehΓΆren Module, Klassen, Funktionen, Methoden, Imports, AbhΓ€ngigkeiten, direkte Funktionsaufrufe, KomplexitΓ€tswerte, statistische AuffΓ€lligkeiten, ausgewΓ€hlte Risikomuster und Python Bytecode.

  • Das untersuchte Zielprojekt wird nicht importiert und nicht ausgefΓΌhrt.
    • Die Analyse basiert primΓ€r auf dem Python Abstract Syntax Tree.
      • Die grafische OberflΓ€che wird mit PySide6 umgesetzt.
      • NumPy und SciPy werden funktional fΓΌr statistische Codeauswertungen eingesetzt.

Nach oben




Funktionsumfang

Aktuell implementiert sind:

πŸ”Ή Analyse kompletter Projektverzeichnisse
πŸ”Ή UnterstΓΌtzung fΓΌr .py und .pyw
πŸ”Ή Projekt Explorer
πŸ”Ή Quellcode Anzeige
πŸ”Ή Erkennung von Klassen
πŸ”Ή Erkennung von Funktionen und Methoden
πŸ”Ή Erkennung asynchroner Funktionen und Methoden
πŸ”Ή Parameteranalyse
πŸ”Ή Decorator Analyse
πŸ”Ή Import Analyse
πŸ”Ή Klassifizierung von AbhΓ€ngigkeiten
πŸ”Ή Analyse direkter Funktionsaufrufe
πŸ”Ή AST basierte KomplexitΓ€tsbewertung
πŸ”Ή NumPy Projektmetriken
πŸ”Ή SciPy Z Score Ausreißererkennung
πŸ”Ή Risk Pattern Analyse
πŸ”Ή Bytecode Disassemblierung
πŸ”Ή SQLite Analyseverlauf
πŸ”Ή JSON Export
πŸ”Ή CSV Export
πŸ”Ή HTML Export
πŸ”Ή Markdown Export
πŸ”Ή Deutsche BenutzeroberflΓ€che
πŸ”Ή Englische BenutzeroberflΓ€che
πŸ”Ή Sprachwechsel wΓ€hrend der Laufzeit
πŸ”Ή GitHub Button
πŸ”Ή LinkedIn Button
πŸ”Ή Facebook Button
πŸ”Ή ausfΓΌhrlicher Info Dialog
πŸ”Ή Analyse im Hintergrund ΓΌber QThread
πŸ”Ή Abbruch laufender Analysen

Nach oben




Statische Analyse und Sicherheitsmodell

BPREI fΓΌhrt das analysierte Python Projekt nicht aus.

  • Der Quellcode wird mit ast.parse() in einen Abstract Syntax Tree umgewandelt und anschließend strukturell ausgewertet.
  • Dadurch kΓΆnnen Projektbestandteile untersucht werden, ohne Module des Zielprojekts mit import zu laden.
    • Die Bytecode Ansicht verwendet compile() ausschließlich zur Erzeugung von Codeobjekten. Diese Codeobjekte werden anschließend mit dem Python Modul dis disassembliert. Eine AusfΓΌhrung des kompilierten Zielcodes findet innerhalb dieser Funktion nicht statt.
  • Syntaxfehler einzelner Dateien werden in den Analyseinformationen gespeichert, damit nicht automatisch das gesamte Projekt wegen einer einzelnen fehlerhaften Datei verworfen wird.

Nach oben




Projekt und Symbolanalyse

Der Projekt Analyzer untersucht jede erkannte Python Datei und erfasst unter anderem:

πŸ”Ή relativen Dateipfad
πŸ”Ή absoluten Dateipfad
πŸ”Ή Gesamtzahl der Zeilen
πŸ”Ή Codezeilen
πŸ”Ή Kommentarzeilen
πŸ”Ή Leerzeilen
πŸ”Ή Klassen
πŸ”Ή Funktionen
πŸ”Ή Methoden
πŸ”Ή asynchrone Funktionen
πŸ”Ή asynchrone Methoden
πŸ”Ή Parameter
πŸ”Ή Decorators
πŸ”Ή Startzeile
πŸ”Ή Endzeile
πŸ”Ή ΓΌbergeordnete Symbole
πŸ”Ή direkte Funktionsaufrufe
πŸ”Ή KomplexitΓ€tswert

Im Projekt Explorer kann eine Datei oder ein Symbol ausgewΓ€hlt werden. Der zugehΓΆrige Quellcode wird angezeigt und bei Symbolen springt die Ansicht direkt zur entsprechenden Codeposition.

Nach oben




AbhΓ€ngigkeitsanalyse

Imports werden automatisch analysiert und in drei Kategorien eingeordnet:

πŸ”Ή Standardbibliothek
πŸ”Ή Projektintern
πŸ”Ή Drittanbieter

FΓΌr jede erkannte AbhΓ€ngigkeit speichert BPREI:

πŸ”Ή Modulname
πŸ”Ή Kategorie
πŸ”Ή Anzahl der Verwendungen
πŸ”Ή Dateien, in denen die AbhΓ€ngigkeit vorkommt

Projektinterne AbhΓ€ngigkeiten werden anhand der vorhandenen Projektstruktur erkannt.

  • Module der Python Standardbibliothek werden ΓΌber sys.stdlib_module_names klassifiziert.
    • Alle ΓΌbrigen erkannten Imports werden als Drittanbieter AbhΓ€ngigkeiten behandelt.

Nach oben




Funktionsaufrufe

BPREI analysiert direkte Aufrufe innerhalb von Funktionen und Methoden.

  • FΓΌr einen Aufruf werden gespeichert:

πŸ”Ή aufrufendes Symbol
πŸ”Ή aufgerufenes Ziel
πŸ”Ή Datei
πŸ”Ή Codezeile

Dadurch kann nachvollzogen werden, welche Funktionen und Methoden innerhalb eines Projekts miteinander verbunden sind.

  • Verschachtelte Funktionsdefinitionen und Klassendefinitionen werden bei der direkten Aufrufanalyse bewusst separat behandelt und nicht automatisch dem Γ€ußeren FunktionskΓΆrper zugerechnet.

Nach oben




KomplexitΓ€tsanalyse

BPREI berechnet fΓΌr Funktionen und Methoden einen AST basierten KomplexitΓ€tswert.

  • In die Bewertung fließen unter anderem folgende Strukturen ein:

πŸ”Ή if
πŸ”Ή for
πŸ”Ή async for
πŸ”Ή while
πŸ”Ή bedingte AusdrΓΌcke
πŸ”Ή assert
πŸ”Ή Comprehensions
πŸ”Ή boolesche VerknΓΌpfungen
πŸ”Ή Exception Handler
πŸ”Ή try mit else
πŸ”Ή match FΓ€lle

Note

Die Anwendung zeigt unter anderem:

πŸ”Ή durchschnittliche KomplexitΓ€t
πŸ”Ή Median
πŸ”Ή 95. Perzentil
πŸ”Ή Standardabweichung
πŸ”Ή maximale KomplexitΓ€t
πŸ”Ή statistisch auffΓ€llige Symbole

Der Wert ist eine projektinterne AST basierte Bewertungsmetrik und wird nicht als vollstΓ€ndiger Ersatz fΓΌr eine spezialisierte formale Codeanalyse verstanden.

Nach oben




NumPy und SciPy

NumPy und SciPy sind funktionale Bestandteile der Anwendung.

NumPy

NumPy wird zur Verarbeitung der KomplexitΓ€tswerte und zur Berechnung folgender Kennzahlen eingesetzt:

πŸ”Ή Mittelwert mit numpy.mean()
πŸ”Ή Median mit numpy.median()
πŸ”Ή 95. Perzentil mit numpy.percentile()
πŸ”Ή Standardabweichung mit numpy.std()
πŸ”Ή Maximum mit numpy.max()

SciPy

SciPy wird für die statistische Ausreißererkennung eingesetzt.

Mit scipy.stats.zscore() werden Z Scores fΓΌr die KomplexitΓ€tswerte der analysierten Funktionen und Methoden berechnet.

  • Ein Symbol wird aktuell als statistische AuffΓ€lligkeit aufgenommen, wenn sein Z Score mindestens 2.0 betrΓ€gt.
    • FΓΌr diese Auswertung mΓΌssen mindestens drei analysierbare Funktionen oder Methoden vorhanden sein.

Nach oben




Risikoanalyse

Die Risk Pattern Analyse sucht nach ausgewΓ€hlten Konstruktionen, die bei einer manuellen CodeprΓΌfung besondere Aufmerksamkeit verdienen kΓΆnnen.

Note

Aktuell erkannt werden:

πŸ”Ή eval()
πŸ”Ή exec()
πŸ”Ή compile()
πŸ”Ή os.system()
πŸ”Ή pickle.load()
πŸ”Ή pickle.loads()
πŸ”Ή yaml.load()
πŸ”Ή tempfile.mktemp()
πŸ”Ή Aufrufe ΓΌber subprocess
πŸ”Ή shell=True bei Subprocess Aufrufen
πŸ”Ή verify=False bei erkannten HTTP Aufrufen
πŸ”Ή mΓΆglicherweise fest hinterlegte Secrets

Bei mΓΆglichen fest hinterlegten Secrets werden unter anderem Variablennamen wie diese berΓΌcksichtigt:

password, passwd, pwd, secret, token, api_key, apikey, access_token, private_key, client_secret

Gespeicherte Nachweise fΓΌr erkannte String Secrets werden maskiert.

  • Die Risikoanalyse ist eine statische Mustererkennung. Ein Treffer bedeutet nicht automatisch, dass eine konkrete SicherheitslΓΌcke vorliegt. Der Kontext des Codes muss weiterhin bewertet werden.

Nach oben




Bytecode Inspektion

Die Bytecode Ansicht verwendet das Python Modul dis.

  • Der ausgewΓ€hlte Quellcode wird mit folgenden Eigenschaften kompiliert:
compile(
    source,
    filename,
    "exec",
    dont_inherit=True,
    optimize=0,
)

Anschließend werden das Haupt Codeobjekt und enthaltene untergeordnete Codeobjekte rekursiv disassembliert.

  • Damit lassen sich unter anderem Python Instruktionen von:

πŸ”Ή Modulen
πŸ”Ή Funktionen
πŸ”Ή Methoden
πŸ”Ή verschachtelten Codeobjekten

untersuchen.

Nach oben




BenutzeroberflΓ€che

Die BenutzeroberflΓ€che basiert auf PySide6 und verwendet ein dunkles Business Design.

Note

Vorhandene Hauptbereiche:

  1. Dashboard
  2. Projekt Explorer
  3. AbhΓ€ngigkeiten
  4. Funktionsaufrufe
  5. KomplexitΓ€t
  6. Risikoanalyse
  7. Bytecode
  8. Verlauf

Das Dashboard zeigt zentrale Projektmetriken in separaten Karten.

  • Der Header enthΓ€lt Funktionen zum Γ–ffnen eines Projekts, Starten und Abbrechen einer Analyse sowie zum Exportieren.
  • Danach folgen optisch getrennt die Social Media Buttons fΓΌr GitHub, LinkedIn und Facebook.
    • Ein weiterer vertikaler Separator trennt den Social Media Bereich von Info und Sprachumschaltung.

Nach oben




Deutsch und Englisch

Die Anwendung besitzt eine zentrale Lokalisierung mit vollstÀndigen deutschen und englischen Übersetzungsschlüsseln.

  • Aktuell enthalten beide Sprachen jeweils 102 ΓΌbereinstimmende SchlΓΌssel.
  • Der Sprachwechsel erfolgt direkt wΓ€hrend der Laufzeit.

Note

Beim Umschalten werden unter anderem aktualisiert:

πŸ”Ή Navigation
πŸ”Ή Buttons
πŸ”Ή TabellenΓΌberschriften
πŸ”Ή Dashboard Beschriftungen
πŸ”Ή Symboltypen
πŸ”Ή AbhΓ€ngigkeitskategorien
πŸ”Ή Risikobeschreibungen
πŸ”Ή Statusmeldungen
πŸ”Ή Dialoge
πŸ”Ή Verlauf
πŸ”Ή Info Dialog

Nach oben




SQLite Verlauf

BPREI speichert Zusammenfassungen abgeschlossener Analysen in einer lokalen SQLite Datenbank.

Standardpfad unter dem Benutzerprofil:

~/.bprei/bprei_history.sqlite3

Gespeichert werden:

πŸ”Ή Analysezeitpunkt
πŸ”Ή Projektname
πŸ”Ή Projektpfad
πŸ”Ή Anzahl Dateien
πŸ”Ή Anzahl Klassen
πŸ”Ή Anzahl Funktionen
πŸ”Ή Anzahl Methoden
πŸ”Ή Anzahl AbhΓ€ngigkeiten
πŸ”Ή Anzahl Risikobefunde
πŸ”Ή durchschnittliche KomplexitΓ€t

Die Verlaufsansicht zeigt standardmÀßig bis zu 100 der zuletzt gespeicherten Analysen.

Nach oben




Exportformate

BPREI unterstΓΌtzt vier Exportformate:

JSON

Exportiert die vollstΓ€ndige strukturierte AnalysisResult Datenstruktur.

CSV

Exportiert Symbole und Risikobefunde.

  • Potenziell problematische Tabellenwerte mit fΓΌhrendem =, +, -, @, Tabulator oder WagenrΓΌcklauf werden vor dem Schreiben neutralisiert.

HTML

Erzeugt einen eigenstΓ€ndigen HTML Bericht mit dunklem Design, Projektmetriken und Risikobefunden.

Markdown

Erzeugt einen Markdown Analysebericht mit Projektinformationen, Metriken und Risikobefunden.

  • CSV, HTML und Markdown verwenden die aktuell aktive Sprache der BenutzeroberflΓ€che.
  • JSON exportiert die strukturierten internen Daten.

Nach oben




Windows Testumgebung

Note

Das Projekt enthΓ€lt:

start_windows.bat

Das Skript:

  1. wechselt in das Projektverzeichnis
  2. erstellt bei Bedarf eine eigene .venv
  3. aktiviert die virtuelle Umgebung
  4. aktualisiert pip
  5. installiert beziehungsweise prΓΌft die Pakete aus requirements.txt
  6. startet main.py

Damit kann die Anwendung in einer isolierten virtuellen Python Umgebung getestet werden.

Start:

start_windows.bat

Nach oben




Windows Build

Das Projekt enthΓ€lt zusΓ€tzlich:

build_windows.bat
Das Skript:
  1. erstellt bei Bedarf die .venv
  2. aktiviert die virtuelle Umgebung
  3. aktualisiert pip
  4. installiert die ProjektabhΓ€ngigkeiten
  5. installiert PyInstaller
  6. erstellt einen Windows Build ohne Konsolenfenster
  7. sammelt NumPy und SciPy vollstΓ€ndig fΓΌr den Build ein
Verwendeter PyInstaller Name:
BylickiLabs-Python-Reverse-Engineering-Inspector
Die Ausgabe wird unter:
dist\

erstellt.

PyInstaller verwendet hier den normalen Verzeichnis Build. Dadurch befindet sich die ausfΓΌhrbare Anwendung zusammen mit den benΓΆtigten Laufzeitkomponenten im erzeugten Anwendungsverzeichnis.

  • Dieses Verzeichnis kann auf einen anderen DatentrΓ€ger, beispielsweise einen USB Stick, kopiert werden. Auf einem kompatiblen Windows System kΓΆnnen die mitgelieferten Komponenten anschließend direkt aus diesem Verzeichnis genutzt werden, ohne die Python Pakete erneut ΓΌber pip installieren zu mΓΌssen.

Nach oben




Manuelle Installation

Aufgrund der im Quellcode verwendeten Python Syntax wird Python 3.10 oder neuer benΓΆtigt.

Virtuelle Umgebung erstellen

py -m venv .venv

Virtuelle Umgebung aktivieren

.venv\Scripts\activate

AbhΓ€ngigkeiten installieren

python -m pip install --upgrade pip
pip install -r requirements.txt

Anwendung starten

python main.py

Nach oben




Projektstruktur

BylickiLabs_Python_Reverse_Engineering_Inspector/
β”‚
β”œβ”€β”€ main.py
β”œβ”€β”€ requirements.txt
β”œβ”€β”€ start_windows.bat
β”œβ”€β”€ build_windows.bat
β”œβ”€β”€ README.md
β”‚
└── src/
    β”œβ”€β”€ __init__.py
    β”œβ”€β”€ config.py
    β”œβ”€β”€ localization.py
    β”œβ”€β”€ models.py
    β”‚
    β”œβ”€β”€ analyzers/
    β”‚   β”œβ”€β”€ __init__.py
    β”‚   β”œβ”€β”€ project_analyzer.py
    β”‚   └── bytecode_analyzer.py
    β”‚
    β”œβ”€β”€ services/
    β”‚   β”œβ”€β”€ __init__.py
    β”‚   β”œβ”€β”€ database.py
    β”‚   └── exporter.py
    β”‚
    └── ui/
        β”œβ”€β”€ __init__.py
        └── main_window.py

Nach oben




Technische Anforderungen

Note

Die aktuelle requirements.txt enthΓ€lt:

PySide6>=6.8
numpy>=2.0
scipy>=1.13

ZusΓ€tzlich wird fΓΌr den automatischen Windows Build PyInstaller durch build_windows.bat installiert.

  • Kerntechnologien:

πŸ”Ή Python
πŸ”Ή PySide6
πŸ”Ή AST
πŸ”Ή NumPy
πŸ”Ή SciPy
πŸ”Ή SQLite
πŸ”Ή dis
πŸ”Ή PyInstaller fΓΌr den Windows Build

Nach oben




Analysierte und ausgeschlossene Verzeichnisse

BPREI sucht rekursiv nach .py und .pyw Dateien.

  • Folgende Verzeichnisse werden aktuell von der Projektanalyse ausgeschlossen:
.git
.hg
.svn
.idea
.vs
.vscode
__pycache__
.pytest_cache
.mypy_cache
.venv
venv
env
node_modules
build
dist
.tox

Dadurch werden typische Versionsverwaltungsdaten, Entwicklungsumgebungen, virtuelle Umgebungen, Cache Daten und Build Ausgaben nicht als Bestandteil des Zielprojekts analysiert.

Nach oben




Projektstatus

Aktuelle Anwendungsversion:

1.0.0

Anwendungsname:

BylickiLabs Python Reverse Engineering Inspector

Kurzname:

BPREI

Entwickler:

Thorsten Bylicki / BylickiLabs

Die geprΓΌfte Projektversion enthΓ€lt eine syntaktisch valide Python Codebasis.

  • Die deutsche und englische Lokalisierung besitzen jeweils 102 identische ÜbersetzungsschlΓΌssel.

Nach oben





English

Table of Contents

  1. Project Overview
  2. Feature Set
  3. Static Analysis and Security Model
  4. Project and Symbol Analysis
  5. Dependency Analysis
  6. Function Calls
  7. Complexity Analysis
  8. NumPy and SciPy
  9. Risk Analysis
  10. Bytecode Inspection
  11. User Interface
  12. German and English
  13. SQLite History
  14. Export Formats
  15. Windows Test Environment
  16. Windows Build
  17. Manual Installation
  18. Project Structure
  19. Technical Requirements
  20. Analyzed and Excluded Directories
  21. Project Status



Project Overview

The BylickiLabs Python Reverse Engineering Inspector, short BPREI, is a desktop application for static inspection of complete Python projects.

  • The application reads Python source code, analyzes the internal structure and presents technical relationships in several specialized areas.
    • These include modules, classes, functions, methods, imports, dependencies, direct function calls, complexity values, statistical anomalies, selected risk patterns and Python bytecode.

  • The inspected target project is not imported and is not executed.
    • The analysis is primarily based on the Python Abstract Syntax Tree.
      • The graphical interface is implemented with PySide6.
      • NumPy and SciPy are functionally used for statistical code analysis.

Back to contents




Feature Set

Currently implemented:

πŸ”Ή Complete project directory analysis
πŸ”Ή Support for .py and .pyw
πŸ”Ή Project Explorer
πŸ”Ή Source code view
πŸ”Ή Class detection
πŸ”Ή Function and method detection
πŸ”Ή Async function and method detection
πŸ”Ή Parameter analysis
πŸ”Ή Decorator analysis
πŸ”Ή Import analysis
πŸ”Ή Dependency classification
πŸ”Ή Direct function call analysis
πŸ”Ή AST based complexity scoring
πŸ”Ή NumPy project metrics
πŸ”Ή SciPy Z Score anomaly detection
πŸ”Ή Risk Pattern analysis
πŸ”Ή Bytecode disassembly
πŸ”Ή SQLite analysis history
πŸ”Ή JSON export
πŸ”Ή CSV export
πŸ”Ή HTML export
πŸ”Ή Markdown export
πŸ”Ή German interface
πŸ”Ή English interface
πŸ”Ή Runtime language switching
πŸ”Ή GitHub button
πŸ”Ή LinkedIn button
πŸ”Ή Facebook button
πŸ”Ή Detailed About dialog
πŸ”Ή Background analysis with QThread
πŸ”Ή Cancellation of running analyses

Back to contents




Static Analysis and Security Model

BPREI does not execute the inspected Python project.

  • The source code is converted into an Abstract Syntax Tree with ast.parse() and then evaluated structurally.
  • This allows project components to be inspected without loading target modules through import.
    • The Bytecode view uses compile() exclusively to create code objects. These code objects are then disassembled with the Python module dis. The compiled target code is not executed within this function.
  • Syntax errors in individual files are stored in the analysis information so that the entire project is not automatically discarded because of a single invalid file.

Back to contents




Project and Symbol Analysis

The Project Analyzer inspects every detected Python file and records, among other things:

πŸ”Ή relative file path
πŸ”Ή absolute file path
πŸ”Ή total line count
πŸ”Ή code lines
πŸ”Ή comment lines
πŸ”Ή blank lines
πŸ”Ή classes
πŸ”Ή functions
πŸ”Ή methods
πŸ”Ή async functions
πŸ”Ή async methods
πŸ”Ή parameters
πŸ”Ή decorators
πŸ”Ή start line
πŸ”Ή end line
πŸ”Ή parent symbols
πŸ”Ή direct function calls
πŸ”Ή complexity value

A file or symbol can be selected in the Project Explorer. The corresponding source code is displayed and, for symbols, the view jumps directly to the relevant code position.

Back to contents




Dependency Analysis

Imports are analyzed automatically and assigned to three categories:

πŸ”Ή Standard Library
πŸ”Ή Internal
πŸ”Ή Third Party

For each detected dependency BPREI stores:

πŸ”Ή module name
πŸ”Ή category
πŸ”Ή number of uses
πŸ”Ή files containing the dependency

Internal dependencies are identified from the available project structure.

  • Python Standard Library modules are classified through sys.stdlib_module_names.
    • All remaining detected imports are treated as Third Party dependencies.

Back to contents




Function Calls

BPREI analyzes direct calls inside functions and methods.

  • For each call the following information is stored:

πŸ”Ή caller symbol
πŸ”Ή called target
πŸ”Ή file
πŸ”Ή source line

This makes it possible to understand which functions and methods are connected within a project.

  • Nested function definitions and class definitions are intentionally handled separately during direct call analysis and are not automatically attributed to the outer function body.

Back to contents




Complexity Analysis

BPREI calculates an AST based complexity value for functions and methods.

  • The score includes structures such as:

πŸ”Ή if
πŸ”Ή for
πŸ”Ή async for
πŸ”Ή while
πŸ”Ή conditional expressions
πŸ”Ή assert
πŸ”Ή comprehensions
πŸ”Ή boolean operations
πŸ”Ή exception handlers
πŸ”Ή try with else
πŸ”Ή match cases

Note

The application displays, among other things:

πŸ”Ή average complexity
πŸ”Ή median
πŸ”Ή 95th percentile
πŸ”Ή standard deviation
πŸ”Ή maximum complexity
πŸ”Ή statistically unusual symbols

The value is an internal AST based project metric and is not intended as a complete replacement for specialized formal code analysis.

Back to contents




NumPy and SciPy

NumPy and SciPy are functional parts of the application.

NumPy

NumPy is used to process complexity values and calculate the following metrics:

πŸ”Ή mean with numpy.mean()
πŸ”Ή median with numpy.median()
πŸ”Ή 95th percentile with numpy.percentile()
πŸ”Ή standard deviation with numpy.std()
πŸ”Ή maximum with numpy.max()

SciPy

SciPy is used for statistical anomaly detection.

scipy.stats.zscore() calculates Z Scores for the complexity values of the analyzed functions and methods.

  • A symbol is currently included as a statistical anomaly when its Z Score is at least 2.0.
    • At least three analyzable functions or methods are required for this evaluation.

Back to contents




Risk Analysis

Risk Pattern analysis searches for selected constructs that may deserve additional attention during manual code review.

Note

Currently detected:

πŸ”Ή eval()
πŸ”Ή exec()
πŸ”Ή compile()
πŸ”Ή os.system()
πŸ”Ή pickle.load()
πŸ”Ή pickle.loads()
πŸ”Ή yaml.load()
πŸ”Ή tempfile.mktemp()
πŸ”Ή calls through subprocess
πŸ”Ή shell=True in subprocess calls
πŸ”Ή verify=False in recognized HTTP calls
πŸ”Ή possible hardcoded secrets

Possible hardcoded secrets include variable names such as:

password, passwd, pwd, secret, token, api_key, apikey, access_token, private_key, client_secret

Stored evidence for detected string secrets is masked.

  • Risk analysis is static pattern detection. A finding does not automatically mean that a concrete security vulnerability exists. The code context must still be evaluated.

Back to contents




Bytecode Inspection

The Bytecode view uses the Python module dis.

  • The selected source code is compiled with the following properties:
compile(
    source,
    filename,
    "exec",
    dont_inherit=True,
    optimize=0,
)

The main code object and contained child code objects are then recursively disassembled.

  • This allows inspection of Python instructions from:

πŸ”Ή modules
πŸ”Ή functions
πŸ”Ή methods
πŸ”Ή nested code objects

inspect.

Back to contents




User Interface

The user interface is based on PySide6 and uses a dark business design.

Note

Available main areas:

  1. Dashboard
  2. Project Explorer
  3. Dependencies
  4. Function Calls
  5. Complexity
  6. Risk Analysis
  7. Bytecode
  8. History

The Dashboard presents central project metrics in separate cards.

  • The header contains controls for opening a project, starting and cancelling an analysis and exporting results.
  • Visually separated Social Media buttons for GitHub, LinkedIn and Facebook follow.
    • A second vertical separator separates the Social Media area from Info and language switching.

Back to contents




German and English

The application uses centralized localization with complete German and English translation keys.

  • Both languages currently contain 102 matching keys.
  • Language switching happens directly during runtime.

Note

When switching languages, the following elements are updated, among others:

πŸ”Ή navigation
πŸ”Ή buttons
πŸ”Ή table headers
πŸ”Ή Dashboard labels
πŸ”Ή symbol types
πŸ”Ή dependency categories
πŸ”Ή risk descriptions
πŸ”Ή status messages
πŸ”Ή dialogs
πŸ”Ή history
πŸ”Ή About dialog

Back to contents




SQLite History

BPREI stores summaries of completed analyses in a local SQLite database.

  • Default location inside the user profile:
~/.bprei/bprei_history.sqlite3

Stored information:

πŸ”Ή analysis timestamp
πŸ”Ή project name
πŸ”Ή project path
πŸ”Ή file count
πŸ”Ή class count
πŸ”Ή function count
πŸ”Ή method count
πŸ”Ή dependency count
πŸ”Ή risk finding count
πŸ”Ή average complexity

The History view displays up to 100 of the most recently stored analyses by default.

Back to contents




Export Formats

BPREI supports four export formats:

JSON

Exports the complete structured AnalysisResult data structure.

CSV

Exports symbols and risk findings.

  • Potentially problematic spreadsheet values starting with =, +, -, @, tab or carriage return are neutralized before writing.

HTML

Creates a standalone HTML report with a dark design, project metrics and risk findings.

Markdown

Creates a Markdown analysis report with project information, metrics and risk findings.

  • CSV, HTML and Markdown use the currently active interface language.
  • JSON exports the structured internal data.

Back to contents




Windows Test Environment

Note

The project contains:

start_windows.bat

The script:

  1. changes to the project directory
  2. creates its own .venv when required
  3. activates the virtual environment
  4. upgrades pip
  5. installs or verifies the packages from requirements.txt
  6. starts main.py

This allows the application to be tested in an isolated virtual Python environment.

Start:

start_windows.bat

Back to contents




Windows Build

The project additionally contains:

build_windows.bat
The script:
  1. creates the .venv when required
  2. activates the virtual environment
  3. upgrades pip
  4. installs the project dependencies
  5. installs PyInstaller
  6. creates a Windows build without a console window
  7. collects NumPy and SciPy completely for the build
PyInstaller name used:
BylickiLabs-Python-Reverse-Engineering-Inspector
The output is written to:
dist\

created.

PyInstaller uses the normal directory build here. This means that the executable application is located together with the required runtime components inside the generated application directory.

  • This directory can be copied to another storage device, for example a USB drive. On a compatible Windows system the bundled components can then be used directly from this directory without reinstalling the Python packages through pip.

Back to contents




Manual Installation

Because of the Python syntax used in the source code, Python 3.10 or newer is required.

Create virtual environment

py -m venv .venv

Activate virtual environment

.venv\Scripts\activate

Install dependencies

python -m pip install --upgrade pip
pip install -r requirements.txt

Start application

python main.py

Back to contents




Project Structure

BylickiLabs_Python_Reverse_Engineering_Inspector/
β”‚
β”œβ”€β”€ main.py
β”œβ”€β”€ requirements.txt
β”œβ”€β”€ start_windows.bat
β”œβ”€β”€ build_windows.bat
β”œβ”€β”€ README.md
β”‚
└── src/
    β”œβ”€β”€ __init__.py
    β”œβ”€β”€ config.py
    β”œβ”€β”€ localization.py
    β”œβ”€β”€ models.py
    β”‚
    β”œβ”€β”€ analyzers/
    β”‚   β”œβ”€β”€ __init__.py
    β”‚   β”œβ”€β”€ project_analyzer.py
    β”‚   └── bytecode_analyzer.py
    β”‚
    β”œβ”€β”€ services/
    β”‚   β”œβ”€β”€ __init__.py
    β”‚   β”œβ”€β”€ database.py
    β”‚   └── exporter.py
    β”‚
    └── ui/
        β”œβ”€β”€ __init__.py
        └── main_window.py

Back to contents




Technical Requirements

Note

The current requirements.txt contains:

PySide6>=6.8
numpy>=2.0
scipy>=1.13

PyInstaller is additionally installed by build_windows.bat for the automated Windows build.

  • Core technologies:

πŸ”Ή Python
πŸ”Ή PySide6
πŸ”Ή AST
πŸ”Ή NumPy
πŸ”Ή SciPy
πŸ”Ή SQLite
πŸ”Ή dis
πŸ”Ή PyInstaller for the Windows build

Back to contents




Analyzed and Excluded Directories

BPREI recursively searches for .py and .pyw files.

  • The following directories are currently excluded from project analysis:
.git
.hg
.svn
.idea
.vs
.vscode
__pycache__
.pytest_cache
.mypy_cache
.venv
venv
env
node_modules
build
dist
.tox

This keeps common version control data, development environments, virtual environments, cache data and build output outside the target project analysis.

Back to contents




Project Status

Current application version:

1.0.0

Application name:

BylickiLabs Python Reverse Engineering Inspector

Short name:

BPREI

Developer:

Thorsten Bylicki / BylickiLabs

The inspected project version contains a syntactically valid Python codebase.

  • The German and English localization each contain 102 identical translation keys.

Back to contents




Back to top

Releases

Sponsor this project

Packages

Used by

Contributors

Languages