A powerful utility for converting marshal files to PYC and decompiling Python bytecode back to source
Features β’ Installation β’ Usage β’ CLI Mode β’ License
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
.pycbytecode files - Decompile
.pycfiles 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.
- π Reverse engineering (educational purposes)
- π‘οΈ Malware analysis and security research
- π Bytecode research and Python internals learning
- π§ͺ Code recovery and archival
- π§ Python internals debugging
- π§ 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
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
| 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 |
- Python 3.6 or higher
- Internet connection (for PyLingual API access)
- Dependencies:
requests- HTTP library for API communication
pip install requests# 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# Download the script
wget https://raw.githubusercontent.com/rajveerexe/PycDecompiler/main/PycDecompiler.py
# Install dependencies
pip install requests
# Run the script
python PycDecompiler.pyLaunch the interactive menu (recommended for beginners):
python PycDecompiler.pyInteractive Menu:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
____ __ _ __
/ __ \__ __/ / (_)___ ____ ___ ______ _/ /
/ /_/ / / / / / / / __ \/ __ `/ / / / __ `/ /
/ ____/ /_/ / /___/ / / / / /_/ / /_/ / /_/ / /
/_/ \__, /_____/_/_/ /_/\__, /\__,_/\__,_/_/
/____/ /____/
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
P Y L I N G U A L
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
[ 1 ] Convert Marshal to PYC
[ 2 ] Decompile PYC to Python Source
[ 0 ] Exit
- Select option
1from the menu - Enter the path to your marshal file (
.pyfile containing marshal data) - Select Python version (or use current version)
- The tool will generate a
.pycfile
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!
- Select option
2from the menu - Enter the path to your
.pycfile - Wait for the decompilation process (uploads to PyLingual API)
- 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!
python PycDecompiler.py script.pycThe tool automatically detects marshal files and converts them:
python PycDecompiler.py obfuscated_script.pyOutput:
[ * ] 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!
python PycDecompiler.py marshal_file.py 3.10# 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
doneThe tool automatically detects marshal files by:
- Checking file extension (
.py) - Reading file content and searching for
marshalkeyword - If detected, converts to PYC before decompilation
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",
}- Upload: File is uploaded to PyLingual API
- Processing: Backend analyzes bytecode structure
- Decompilation: Bytecode is reverse-engineered to source
- Retrieval: Decompiled code is downloaded and saved
This project is intended for educational and research purposes only.
- β 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.
Error: Invalid Python version: 3.5
Solution: Use Python 3.6 or higher. Check available versions with:
python --version[ ! ] File not found: script.pyc
Solution:
- Verify the file path is correct
- Use absolute paths if relative paths fail
- Check file permissions
[ ! ] 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
[ ! ] 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
.pycfile is valid
[ ! ] Decompilation Error: Service temporarily unavailable (502)
Solution: The PyLingual API is experiencing high traffic. Try again in a few minutes.
[ ! ] 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
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
PycDecompiler/
βββ PycDecompiler.py # Main decompiler script
βββ README.md # This file
βββ LICENSE # MIT License
βββ examples/ # Sample files (optional)
βββ sample_marshal.py
βββ sample_script.pyc
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")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)Contributions are welcome! Here's how you can help:
- Check existing issues first
- Provide detailed information:
- Python version
- Operating system
- Error messages
- Sample files (if possible)
- Fork the repository
- Create a feature branch:
git checkout -b feature/improvement
- Make your changes
- Test thoroughly
- Commit with clear messages:
git commit -am 'Add new feature: XYZ' - Push to your fork:
git push origin feature/improvement
- Open a Pull Request
- Follow PEP 8 style guide
- Add docstrings to functions
- Include error handling
- Test with multiple Python versions
- Update documentation
This tool uses the PyLingual decompilation service:
- Website: https://pylingual.io
- API Endpoint: https://api.pylingual.io
- Features:
- Cloud-based decompilation
- Multi-version support
- High accuracy rate
- No local dependencies
Note: PyLingual is a third-party service. Availability and performance depend on their infrastructure.
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
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
- PyLingual (pylingual.io) - Decompilation backend service
- Python Software Foundation - For the amazing Python language
- Reverse Engineering Community - For bytecode research and tools
This project was inspired by:
uncompyle6- Python bytecode decompilerdecompyle3- Python 3 decompiler- Various bytecode analysis tools
- GitHub: @rajveerexe
- Telegram: @SoukPy
- π Report bugs: GitHub Issues
- π¬ Ask questions: GitHub Discussions
- π§ Contact developer: Open an issue or reach out via Telegram
Join the discussion and stay updated:
- Star β this repository
- Watch π for updates
- Fork π΄ to contribute
# 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.pyc- Python bytecode files (direct decompilation).py- Python source files (marshal detection & conversion)
decoded_[filename].py- Decompiled source code[filename].pyc- Converted PYC file (from marshal)
Learn Bytecode β’ Respect Licenses β’ Open Source Always
Made with β€οΈ by Souk
PycDecompiler | 2026
