Hacking Tools

Doom-Poly : A Multi-Format Polyglot Executable Running Doom

Doom-Poly is a fascinating polyglot executable that combines the functionality of a PDF, DOS executable, and Windows PE executable to run the classic game Doom.

This innovative construction leverages Robert Xiao’s Universal Doom and Allen Ading’s Doom.PDF to create a file that operates seamlessly across these formats.

The project demonstrates the versatility of file formats and the creative possibilities of polyglot programming.

The polyglot construction involves embedding multiple file format signatures into a single file. Here’s how it is achieved:

  1. PDF and EXE Header Manipulation:
    The gap between the EXE header (up to byte 0x1B) and the PE header offset (at byte 0x3C) is utilized to insert a PDF signature (%PDF-1.x) and a stream object declaration.
    • This allows the file to be identified as a valid PDF while hiding the Doom executable content.
  2. Appending PDF Content:
    The body of the EXE/PE contains the Doom executable, while the end of the file includes additional PDF structures, such as closing the stream object and appending the rest of the Doom.PDF content.
  3. Rebuilding PDF Metadata:
    To ensure compatibility with Chrome’s PDF engine, an updated cross-reference (XREF) table and startxref pointer are added, along with adjustments to the trailer’s /Size property.

The resulting file can function as:

  • A playable Doom game when executed as an EXE or PE.
  • A readable PDF document when opened in Chromium-based browsers (with limited functionality).

The PDF payload only works under Chrome due to its limited implementation of JavaScript in PDFs. Additionally, performance constraints arise from rendering Doom in grayscale ASCII characters within a text field-based framebuffer.

This project showcases the potential of polyglot files in creative programming, security research, and file format exploration.

While primarily experimental, it highlights vulnerabilities in interpreting multi-format files, emphasizing the need for robust validation mechanisms

For more details or to explore this project, refer to Allen Ading’s GitHub repository for Doom.PDF.

Varshini

Varshini is a Cyber Security expert in Threat Analysis, Vulnerability Assessment, and Research. Passionate about staying ahead of emerging Threats and Technologies.

Recent Posts

Install Nginx on Ubuntu 16.04: UFW, PPA, and Config Structure

Nginx (pronounced "engine x") is a free, open-source, high-performance HTTP server and reverse proxy. It handles…

23 hours ago

Install Nginx on Ubuntu 18.04: UFW, Service Control, and Config

Nginx (pronounced "engine x") is a free, open-source, high-performance HTTP server and reverse proxy. It handles…

23 hours ago

Secure Nginx with Let’s Encrypt on Ubuntu 18.04: SSL Setup Guide

Let's Encrypt is a free, automated, and open certificate authority run by the Internet Security Research…

23 hours ago

Install PHP on Ubuntu 18.04: Apache, Nginx FPM, and Ondrej PPA

PHP is the most widely used server-side scripting language for web development. Ubuntu 18.04 ships with PHP…

23 hours ago

Install Skype on Ubuntu 18.04: .deb Package and Auto-Updates

Skype is one of the most widely used communication platforms in the world. It lets you…

23 hours ago

Install Samba on Ubuntu 18.04: Configure Shares and User Access

Samba is a free, open-source implementation of the SMB/CIFS network protocol that lets Linux servers share…

2 days ago