Skip to content

A Request Based Pyc decompiler that supports python 3.6+ - 3.13 decompilation.

License

Notifications You must be signed in to change notification settings

rajveerexe/PycDecompiler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

PYC Decompiler

PYC Decompiler Banner

Marshal β†’ PYC Converter & Python Bytecode Decompiler

Python Status License Visitors

A powerful utility for converting marshal files to PYC and decompiling Python bytecode back to source

Features β€’ Installation β€’ Usage β€’ CLI Mode β€’ License


πŸ“– About

PYC Decompiler is a comprehensive Python utility designed for bytecode analysis and reverse engineering. It enables you to:

  • Convert marshal-based Python files into valid .pyc bytecode files
  • Decompile .pyc files back into readable Python source code
  • Handle multiple Python versions automatically (3.6 through 3.13)
  • Detect file types automatically and process accordingly

⚠️ Important: This tool operates strictly at the bytecode/marshal layer and does not crack encryption or bypass licensing mechanisms.

Use Cases

  • πŸ” Reverse engineering (educational purposes)
  • πŸ›‘οΈ Malware analysis and security research
  • πŸ“š Bytecode research and Python internals learning
  • πŸ§ͺ Code recovery and archival
  • πŸ”§ Python internals debugging

⭐ Features

  • 🧠 Marshal β†’ PYC Conversion - Transform marshal files into proper bytecode
  • 🧩 PYC β†’ Source Decompilation - Recover readable Python source code
  • πŸ”’ Multi-Version Support - Compatible with Python 3.6 through 3.13
  • 🎯 Automatic Detection - Intelligently detects marshal and PYC files
  • ⚑ Fast & Automated - Streamlined workflow with minimal manual intervention
  • πŸ–₯️ Interactive Menu - User-friendly interface for easy operation
  • πŸ§ͺ CLI Mode - Command-line interface for scripting and automation
  • 🌐 PyLingual Backend - Powered by PyLingual decompilation service
  • πŸ“¦ Zero External Binaries - No need for separate decompiler installations

πŸ”§ How It Works

Marshal / PYC File
       ↓
File Type Detection
       ↓
Version Detection
       ↓
Magic Header Injection (if marshal)
       ↓
Upload to PyLingual API
       ↓
Decompilation Process
       ↓
Recovered Python Source

Key Principles:

  • βœ… No VM patching required
  • βœ… No opcode tampering
  • βœ… Pure bytecode-level logic
  • βœ… Cloud-based decompilation engine

🐍 Supported Python Versions

Version Magic Number Status
Python 3.6 33 0D 0D 0A βœ… Supported
Python 3.7 42 0D 0D 0A βœ… Supported
Python 3.8 55 0D 0D 0A βœ… Supported
Python 3.9 61 0D 0D 0A βœ… Supported
Python 3.10 6F 0D 0D 0A βœ… Supported
Python 3.11 A7 0D 0D 0A βœ… Supported
Python 3.12 CB 0D 0D 0A βœ… Supported
Python 3.13 F3 0D 0D 0A βœ… Supported

πŸ“‹ Requirements

  • Python 3.6 or higher
  • Internet connection (for PyLingual API access)
  • Dependencies:
    • requests - HTTP library for API communication

Install Dependencies

pip install requests

πŸš€ Installation

Method 1: Clone from GitHub

# Clone the repository
git clone https://github.com/rajveerexe/PycDecompiler.git

# Navigate to directory
cd PycDecompiler

# Install dependencies
pip install -r requirements.txt

# Run the decompiler
python PycDecompiler.py

Method 2: Direct Download

# Download the script
wget https://raw.githubusercontent.com/rajveerexe/PycDecompiler/main/PycDecompiler.py

# Install dependencies
pip install requests

# Run the script
python PycDecompiler.py

πŸ’» Usage

Interactive Mode

Launch the interactive menu (recommended for beginners):

python PycDecompiler.py

Interactive Menu:

═══════════════════════════════════════════════════════
    ____        __    _                         __
   / __ \__  __/ /   (_)___  ____ ___  ______ _/ /
  / /_/ / / / / /   / / __ \/ __ `/ / / / __ `/ /
 / ____/ /_/ / /___/ / / / / /_/ / /_/ / /_/ / /
/_/    \__, /_____/_/_/ /_/\__, /\__,_/\__,_/_/
      /____/              /____/
═══════════════════════════════════════════════════════
                    P Y L I N G U A L
═══════════════════════════════════════════════════════

[ 1 ] Convert Marshal to PYC
[ 2 ] Decompile PYC to Python Source
[ 0 ] Exit

Option 1: Convert Marshal to PYC

  1. Select option 1 from the menu
  2. Enter the path to your marshal file (.py file containing marshal data)
  3. Select Python version (or use current version)
  4. The tool will generate a .pyc file

Example:

[ ? ] Select option: 1
[ ? ] Enter Marshal file path: obfuscated_script.py

Available Python Versions:
[ 1 ] Python 3.6
[ 2 ] Python 3.7
[ 3 ] Python 3.8
[ 4 ] Python 3.9
[ 5 ] Python 3.10
[ 6 ] Python 3.11
[ 7 ] Python 3.12
[ 8 ] Python 3.13
[ 0 ] Current Version (3.11)

[ ? ] Select version: 0
[ * ] Converting Marshal to PYC (Python 3.11)...
[ βœ“ ] Saved: obfuscated_script.pyc
[ βœ“ ] Done!

Option 2: Decompile PYC to Python Source

  1. Select option 2 from the menu
  2. Enter the path to your .pyc file
  3. Wait for the decompilation process (uploads to PyLingual API)
  4. Decompiled source will be saved as decoded_[filename].py

Example:

[ ? ] Select option: 2
[ ? ] Enter PYC file path: script.pyc

[ * ] Processing: script.pyc
[ βœ“ ] File validated
[ βœ“ ] Uploaded with identifier: abc123xyz456
[ 1 ] Stage: decompiling | Elapsed: 2.3s
[ 2 ] Stage: decompiling | Elapsed: 3.8s
[ βœ“ ] Decompilation complete (Attempts: 2, Time: 3.85s)
[ βœ“ ] Decompiled code saved to: ./decoded_script.py
[ βœ“ ] Total execution time: 4.12s
[ βœ“ ] Done!

πŸ§ͺ CLI Mode

Basic PYC Decompilation

python PycDecompiler.py script.pyc

Marshal File Conversion + Decompilation

The tool automatically detects marshal files and converts them:

python PycDecompiler.py obfuscated_script.py

Output:

[ * ] Detected: Marshal file
[ * ] Converting Marshal to PYC (Python 3.11)...
[ βœ“ ] Saved: obfuscated_script.pyc

[ * ] Now decompiling PYC...
[ * ] Processing: obfuscated_script.pyc
[ βœ“ ] Decompiled code saved to: decoded_obfuscated_script.py
[ βœ“ ] Done!

Specify Python Version

python PycDecompiler.py marshal_file.py 3.10

Batch Processing

# Process all PYC files in directory
for file in *.pyc; do
    python PycDecompiler.py "$file"
done
# Process all marshal files
for file in obfuscated_*.py; do
    python PycDecompiler.py "$file" 3.11
done

πŸ” Technical Details

Marshal Detection

The tool automatically detects marshal files by:

  1. Checking file extension (.py)
  2. Reading file content and searching for marshal keyword
  3. If detected, converts to PYC before decompilation

PYC Magic Numbers

Each Python version has a unique magic number (first 4 bytes of .pyc file):

magic_map = {
    "3.6": b"3\r\r\n\x8bq\x98d\x0c\x00\x00\x00\xe3\x00\x00\x00",
    "3.7": b"B\r\r\n\x00\x00\x00\x00\x8bq\x98d\x0c\x00\x00\x00",
    "3.8": b"U\r\r\n\x00\x00\x00\x00\tq\x98d\x0b\x00\x00\x00",
    "3.9": b"a\r\r\n\x00\x00\x00\x00\tq\x98d\x0b\x00\x00\x00",
    "3.10": b"o\r\r\n\x00\x00\x00\x00\tq\x98d\x0b\x00\x00\x00",
    "3.11": b"\xa7\r\r\n\x00\x00\x00\x004\x0eAi\n\x00\x00\x00",
    "3.12": b"\xcb\r\r\n\x00\x00\x00\x00{\x0eAi\n\x00\x00\x00",
    "3.13": b"\xf3\r\r\n\x00\x00\x00\x00\x90\x0eAi\n\x00\x00\x00",
}

Decompilation Process

  1. Upload: File is uploaded to PyLingual API
  2. Processing: Backend analyzes bytecode structure
  3. Decompilation: Bytecode is reverse-engineered to source
  4. Retrieval: Decompiled code is downloaded and saved

⚠️ Legal Disclaimer

This project is intended for educational and research purposes only.

Important Guidelines

  • βœ… You are responsible for complying with local laws and regulations
  • βœ… Only decompile code you own or have explicit permission to analyze
  • βœ… Respect intellectual property and licensing agreements
  • ❌ Do not use for DRM bypass or license cracking
  • ❌ Do not use for commercial piracy or unauthorized distribution
  • ❌ Do not violate software licenses or terms of service
  • ❌ The author assumes no responsibility for misuse

Use responsibly and ethically.

πŸ”’ Note: This tool does NOT break encryption, bypass obfuscation, or crack protected software. It works only on standard Python bytecode.


πŸ› οΈ Troubleshooting

Common Issues

1. Unsupported Python Version

Error: Invalid Python version: 3.5

Solution: Use Python 3.6 or higher. Check available versions with:

python --version

2. File Not Found

[ ! ] File not found: script.pyc

Solution:

  • Verify the file path is correct
  • Use absolute paths if relative paths fail
  • Check file permissions

3. Not a Valid Marshal File

[ ! ] Not a valid marshal file

Solution:

  • Ensure the file contains marshal data
  • Try opening the file to verify it's a Python marshal file
  • Some obfuscated files may not be standard marshal format

4. Decompilation Failed

[ ! ] Decompilation Error: Upload failed with status code: 502

Possible Causes:

  • PyLingual API is temporarily down
  • Network connectivity issues
  • File is corrupted or heavily obfuscated

Solution:

  • Wait a few minutes and try again
  • Check your internet connection
  • Verify the .pyc file is valid

5. Service Unavailable (502)

[ ! ] Decompilation Error: Service temporarily unavailable (502)

Solution: The PyLingual API is experiencing high traffic. Try again in a few minutes.

6. Decompilation Timeout

[ ! ] Decompilation Error: Decompilation timeout exceeded

Solution:

  • Large or complex files may take longer
  • The default timeout is 300 seconds (5 minutes)
  • Try again or use a smaller test file

7. Messy or Incomplete Output

Note: This is normal for:

  • Heavily optimized bytecode
  • Obfuscated code
  • Code with advanced Python features

The decompiler reconstructs source from bytecode, which may result in:

  • Different variable names
  • Restructured control flow
  • Missing comments and docstrings

πŸ“‚ Project Structure

PycDecompiler/
β”œβ”€β”€ PycDecompiler.py          # Main decompiler script
β”œβ”€β”€ README.md               # This file
β”œβ”€β”€ LICENSE                 # MIT License
└── examples/               # Sample files (optional)
    β”œβ”€β”€ sample_marshal.py
    └── sample_script.pyc

πŸ”§ Advanced Usage

Error Handling

The tool includes comprehensive error handling:

try:
    decompile_pyc("script.pyc")
except FileNotFoundError:
    print("File not found")
except FileNotPyc:
    print("Not a valid PYC file")
except DecompilationError:
    print("Decompilation failed")

Custom Integration

You can integrate the decompiler into your own scripts:

from PYC_Decoder import decompile_pyc, marshal_to_pyc

# Convert marshal to PYC
pyc_file = marshal_to_pyc("obfuscated.py", "3.11")

# Decompile PYC
if pyc_file:
    decompile_pyc(pyc_file)

🀝 Contributing

Contributions are welcome! Here's how you can help:

Reporting Issues

  1. Check existing issues first
  2. Provide detailed information:
    • Python version
    • Operating system
    • Error messages
    • Sample files (if possible)

Pull Requests

  1. Fork the repository
  2. Create a feature branch:
    git checkout -b feature/improvement
  3. Make your changes
  4. Test thoroughly
  5. Commit with clear messages:
    git commit -am 'Add new feature: XYZ'
  6. Push to your fork:
    git push origin feature/improvement
  7. Open a Pull Request

Development Guidelines

  • Follow PEP 8 style guide
  • Add docstrings to functions
  • Include error handling
  • Test with multiple Python versions
  • Update documentation

πŸ“Š API Information

This tool uses the PyLingual decompilation service:

Note: PyLingual is a third-party service. Availability and performance depend on their infrastructure.


πŸ—ΊοΈ Roadmap

Future improvements:

  • Online decompilation mode
  • GUI interface
  • Batch processing with progress bars
  • Support for more obfuscation techniques
  • Web interface version
  • Plugin system for custom decompilers

πŸ“„ License

This project is licensed under the MIT License.

MIT License

Copyright (c) 2026 Souk

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Summary:

  • βœ… Free to use for any purpose
  • βœ… Free to modify and distribute
  • βœ… No warranty provided
  • βœ… Attribution appreciated

πŸ™ Credits & Acknowledgments

Special Thanks

  • PyLingual (pylingual.io) - Decompilation backend service
  • Python Software Foundation - For the amazing Python language
  • Reverse Engineering Community - For bytecode research and tools

Inspiration

This project was inspired by:

  • uncompyle6 - Python bytecode decompiler
  • decompyle3 - Python 3 decompiler
  • Various bytecode analysis tools

Developer


πŸ“ž Support & Contact

Get Help

Community

Join the discussion and stay updated:

  • Star ⭐ this repository
  • Watch πŸ‘€ for updates
  • Fork 🍴 to contribute

πŸ“ˆ Statistics

GitHub Stars GitHub Forks GitHub Issues GitHub Pull Requests


⚑ Quick Reference

Commands Cheat Sheet

# Interactive mode
python PycDecompiler.py

# Decompile PYC file
python PycDecompiler.py script.pyc

# Convert + decompile marshal file
python PycDecompiler.py obfuscated.py

# Specify Python version
python PycDecompiler.py file.py 3.11

# Batch process
for f in *.pyc; do python PycDecompiler.py "$f"; done

Supported Extensions

  • .pyc - Python bytecode files (direct decompilation)
  • .py - Python source files (marshal detection & conversion)

Output Files

  • decoded_[filename].py - Decompiled source code
  • [filename].pyc - Converted PYC file (from marshal)

🌟 If you find this tool useful, please star the repository!


Learn Bytecode β€’ Respect Licenses β€’ Open Source Always


Made with ❀️ by Souk

PycDecompiler | 2026


⬆ Back to Top

About

A Request Based Pyc decompiler that supports python 3.6+ - 3.13 decompilation.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages