# [ ASM ] Chain-Loader

*Theoretical Assembly Based Boot-Sector RootKit*

By [Rek0n](https://paragraph.com/@rek0n) · 2025-03-24

code, programmer, asm, hacker

---

* * *

![](https://storage.googleapis.com/papyrus_images/7b1ad8bc423850d59215af52c5e22b72.png)

* * *

Halt & Catch Fire:
------------------

### /x00/ --> NullByte Processing

> Since the dawn of computing in the '80s and '90s, hackers—once simply known as developers and coders—have pursued the ultimate bootkit/rootkit subversion method. The approach proposed here represents only a fragment of the broader concept. **Can we craft specialized shellcode capable of embedding itself into the OS layer, then tunneling indirectly down into the BIOS, ultimately resurfacing within the kernel?** Theoretically sound, this hypothesis aims to commandeer the entire boot process, traversing through BIOS and returning seamlessly into the system kernel, thereby enabling a persistent, continuous, and advanced shell environment.

The described method s below are an advanced, multi-stage bootkit-style technique intended for safely placing a file (`bootres.dll`) into the `\Windows\system32` directory upon the next reboot in Legacy BIOS/MBR Windows systems. It leverages multiple boot stages to bypass the complexities of directly interacting with Windows file systems.

### High-Level Soft Layers:

                 High-Level Software Layers
    +-----------------------------------------------------+
    |                User Applications                    |
    |        (Browsers, Editors, Games, etc.)             |
    +-----------------------------------------------------+
    |                Operating System (OS)                |
    |     (System APIs, Libraries, User Interfaces)       |
    +-----------------------------------------------------+
    |                   OS Kernel                         |
    | (Process Scheduling, Memory Management, Device I/O) |
    +-----------------------------------------------------+
    |            Drivers & Kernel Modules                 |
    |        (Device Drivers, File Systems, etc.)         |
    +-----------------------------------------------------+
    |                  Bootloader                         |
    |      (Stage 2 Bootkit Core, Patched Snippet)        |
    +-----------------------------------------------------+
    |           Master Boot Record (MBR)                  |
    |            (Stage 1 - Minimal Loader)               |
    +-----------------------------------------------------+
    |                 BIOS Firmware                       |
    |           (POST, Hardware Initialization)           |
    +-----------------------------------------------------+
    |                 Physical Memory                     |
    |              (RAM, ROM, Cache, etc.)                |
    +-----------------------------------------------------+
    |                     Hardware                        |
    |        (CPU, Disk, Peripherals, Interfaces)         |
    +-----------------------------------------------------+

Custom MBR – Minimal "Hello World" Chainloader with Conceptual Hook Method
--------------------------------------------------------------------------

This document outlines a minimal "Hello World" chainloader example alongside an advanced conceptual bootkit-style hook method, intended to demonstrate safely placing a file (`bootres.dll`) into the `\Windows\system32` directory upon reboot in Legacy BIOS/MBR Windows systems.

Advanced Hook Method Breakdown
------------------------------

### Stage 1 (MBR)

*   Minimal code footprint (≤466 bytes).
    
*   Prints a simple message for feedback.
    
*   Loads the next stage from hidden sectors.
    

### Stage 2 (Bootkit Core)

*   Identifies and patches early Windows boot files (`bootmgr`, `winload.exe`, or older loaders).
    
*   Injects custom code snippet ("hook") directly into the identified bootloader.
    
*   Transfers control seamlessly to Windows' original Volume Boot Record.
    

### Patched Bootloader Snippet

*   Executes during early Windows boot.
    
*   Safely places or replaces `bootres.dll` in `\Windows\system32`.
    
*   Optionally cleans itself or remains persistent.
    

Considerations & Limitations
----------------------------

*   Intended for educational or controlled environments only.
    
*   Requires careful handling due to ethical, security, and technical complexities.
    
*   Modern protections like Secure Boot and NTFS complexity present significant implementation challenges.
    

This combined approach demonstrates both a basic understanding of bootloader operations and an advanced conceptual grasp of boot processes, filesystem interactions, and persistence strategies.

* * *

### Minimal "Hello World" MBR Chain-loader

* * *

**Warning:** This is _educational_ code. Writing this to your real hard drive MBR could corrupt your system if something goes wrong. Use a VM or backup first.

* * *

### Assemble and Write to Disk:

    nasm -f bin custom_mbr.asm -o custom_mbr.bin
    

Then (**VERY DANGEROUS**):

    dd if=custom_mbr.bin of=/dev/sdX bs=512 count=1
    

_(Replace_ `sdX` _with correct disk; do_ **_NOT_** _do this on a live system unless you know exactly what you’re doing.)_

* * *

### Functionality:

1.  Displays a short text line via BIOS interrupt `0x10`.
    
2.  Locates the active partition in the partition table.
    
3.  Loads the first sector of that partition (the Volume Boot Record) to memory address `0x7E00:0000`.
    
4.  Jumps there, allowing Windows (or any OS) to continue booting.
    

**Note:**

*   The last two bytes **must** be `0x55`, `0xAA` to mark the sector as bootable for a BIOS system.
    
*   **Key Offsets:**
    
    *   Partition table starts at `0x1BE`
        
    *   Boot signature at `0x1FE` (the last two bytes of the 512-byte sector)
        

* * *

Assembly Code:
--------------

    [org 0x7C00]          ; BIOS loads the MBR at 0x0000:0x7C00
    bits 16
    
    start:
        xor ax, ax
        mov ss, ax
        mov sp, 0x7C00
    
        mov ds, ax
    
        mov si, hello_message
        call print_string
    
        mov bx, PARTITION_TABLE_OFFSET
        mov cx, 4
    find_active_partition:
        push cx
        mov al, [bx]
        cmp al, 0x80
        je partition_found
    
        add bx, 16
        pop cx
        loop find_active_partition
    
    no_active_partition:
        call print_line
        mov si, error_no_active
        call print_string
        jmp halt
    
    partition_found:
        mov dl, [BOOT_DRIVE]
    
        mov dh, [bx+1]
        mov cl, [bx+2]
        mov ch, [bx+3]
        mov [part_head], dh
        mov [part_sector], cl
        mov [part_cyl], ch
    
        call read_vbr
    
        jmp 0x7E0:0x0000
    
    read_vbr:
        mov ax, 0x7E0
        mov es, ax
        xor bx, bx
    
        mov ah, 0x02
        mov al, 1
        mov ch, [part_cyl]
        mov cl, [part_sector]
        mov dh, [part_head]
        int 0x13
    
        ret
    
    print_string:
    .next_char:
        lodsb
        or al, al
        jz .done
        mov ah, 0x0E
        int 0x10
        jmp .next_char
    .done:
        ret
    
    print_line:
        mov ah, 0x0E
        mov al, 0x0D
        int 0x10
        mov al, 0x0A
        int 0x10
        ret
    
    halt:
        cli
        hlt
        jmp halt
    
    hello_message db "Custom MBR: Hello from the boot sector!", 0
    error_no_active db "No active partition found! System halted.", 0
    
    part_head   db 0
    part_sector db 0
    part_cyl    db 0
    
    BOOT_DRIVE db 0x80
    
    PARTITION_TABLE_OFFSET equ 0x1BE
    
    ; Fill up to 510 bytes with zeros
    times 510 - ($-$$) db 0
    
    ; Bootable sector signature
    dw 0xAA55
    

* * *

Conceptual Hook Method for File Placement in `\Windows\system32`
----------------------------------------------------------------

* * *

**Important Security & Ethical Note:**  
Modifying Windows’ boot sequence or hooking OS components can be malicious if done without authorization. Always conduct such experiments in controlled environments (e.g., VMs).

* * *

Overview
--------

Rather than placing `bootres.dll` directly into the root (`C:\`), use a multi-stage bootkit-style hook to ensure the file ends up in `\Windows\system32` during the next boot on Legacy BIOS/MBR systems.

* * *

Detailed Steps
--------------

### Stage 1 (Minimal MBR Code)

*   Print message.
    
*   Load Stage 2 using INT 0x13 (AH=0x42 for large disks or AH=0x02 for CHS addressing).
    
*   Maintain partition table integrity (offset 0x1BE).
    
*   Mark bootable with `0x55AA` at offset `0x1FE`.
    

### Stage 2 (Loader/Bootkit Core)

*   Parses active partition to locate `\bootmgr`, `\Boot\BCD`, or older loaders (NTLDR).
    
*   Implements minimal filesystem parsing (FAT32 easier; NTFS complex).
    
*   Patches identified Windows bootloader file with injected code:
    
    *   Allocates space or utilizes existing code cave.
        
    *   Modifies bootloader to run custom snippet.
        
*   Chains to original Windows VBR.
    

### Hook Snippet (in Patched Bootloader)

*   Runs within Windows' early loader environment, enabling proper filesystem access.
    
*   Creates or replaces `\Windows\system32\bootres.dll` with desired content (e.g., `copy /b bootres.dll+newlogo-decoded.bmp patched-bootres.dll`).
    
*   Closes file, returning execution to Windows boot.
    

* * *

Alternate Hook Methods
----------------------

*   **INT 13h Hook**: Effective temporarily; limited by Windows drivers.
    
*   **Early Driver Injection**: Modify registry or BCD to load custom driver at boot.
    

* * *

Challenges & Considerations
---------------------------

*   **Digital Signatures/Secure Boot**: Modern systems may block modifications.
    
*   **Filesystem Complexity (NTFS vs. FAT32)**: NTFS demands sophisticated parsing.
    
*   **Persistence & Space Constraints**: Limited MBR size (466 bytes); Stage 2 stored separately.
    

* * *

Hook Method Flowchart
---------------------

    [Power On / BIOS]  
            ↓  
    [MBR (Stage 1)]  
       - Message display  
       - Load Stage 2  
            ↓  
    [Stage 2]  
       - Locate & patch bootloader  
       - Chain-load Windows VBR  
            ↓  
    [Windows Bootloader]  
       - Hook executes  
       - Creates `bootres.dll` in `\Windows\system32`  
       - Continues booting Windows
    

* * *

Final Thoughts
--------------

*   Always test in a controlled VM environment.
    
*   Modern protections (UEFI/Secure Boot) significantly complicate or prevent this approach.
    
*   Even partial implementation demonstrates advanced understanding of bootkit concepts.
    

    
    // ============================================================================= //
    //    _____                      __       _____       _____ __             __  
    //   / ___/____ ___  ____ ______/ /_     /__  /      / ___// /_____ ______/ /__
    //   \__ \/ __ `__ \/ __ `/ ___/ __ \______/ / ______\__ \/ __/ __ `/ ___/ //_/
    //  ___/ / / / / / / /_/ (__  ) / / /_____/ /_/_____/__/ / /_/ /_/ / /__/ ,<   
    // ____/_/ /_/ /_/\__,_/____/_/ /_/     /____/    /____/\__/\__,_/\___/_/|_|                                                                                                        
    // ==================================================== //
    //                                                  
    //          Tribute to "Smashing the Stack"        
    //      and the original hackers who paved the way. 
    //                                                  
    //     [ Aleph One ] [ Levy ] [ Condor ]          
    //   [ L0pht ] [ CDC ] [ Phrack ] [ 2600 ]         
    //                                                  
    // ================================================= //
    //                                                  
    //     "Because security is an illusion,           
    //             and knowledge is power."             
    //                                                  
    // ================================================= //

---

*Originally published on [Rek0n](https://paragraph.com/@rek0n/%5B-asm-%5D-chain-loader)*
