GeistHaus
log in · sign up

Back Engineering Labs

Part of back.engineering

Recent content on Back Engineering Labs

stories primary
x86mike

Say only that of which is worth more than silence.

/authors/x86mike/
VollRagm

When there is a will, there is a way

/authors/vollragm/
noahware

C/C++ developer & reverse engineer

/authors/noahware/
naci
/authors/naci/
IDontCode

Compilers, Windows, Obfuscation, x86-64, Hardware Hacking, and everything in-between. CEO & Cofounder of Back Engineering Labs

/authors/idontcode/
Eggsy

Anti-cheat programmer @ Ubisoft

/authors/eggsy/
bright
/authors/bright/
AVX
/authors/avx/
Static Devirtualization of Themida
/* Outer gist container */ .content .gist { max-height: 420px !important; overflow: auto !important; background: #0d1117 !important; color: #c9d1d9 !important; padding: 12px !important; border-radius: 6px !important; box-sizing: border-box !important; } /* Make all descendants inherit the container colors and avoid nested scrolls */ .content .gist * { color: inherit !important; background: transparent !important; overflow: visible !important; } /* Override inline style color attributes that some gist styles inject */ .content .gist [style*="color:"] { color: inherit !important; } /* Monospace formatting */ .content .gist .blob-code-inner { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Roboto Mono', 'Courier New', monospace !important; white-space: pre !important; color: #c9d1d9 !important; } /* Comments, docstrings */ .content .gist .pl-c, .content .gist .pl-c1, .content .gist .pl-s1, .content .gist .pl-c2 { color: #8b949e !important; } /* Keywords, declarations */ .content .gist .pl-k, .content .gist .pl-k1, .content .gist .pl-sy, .content .gist .pl-sr, .content .gist .pl-en { color: #ff7b72 !important; } /* Strings */ .content .gist .pl-s, .content .gist .pl-s1, .content .gist .pl-smi { color: #7ee787 !important; } /* Numbers, constants, types */ .content .gist .pl-cv, .content .gist .pl-c1, .content .gist .pl-en, .content .gist .pl-smi, .content .gist .pl-6 { color: #79c0ff !important; } /* Function names, classes */ .content .gist .pl-en, .content .gist .pl-e, .content .gist .pl-ent, .content .gist .pl-kg { color: #d2a8ff !important; } /* Links */ .content .gist a, .content .gist .file .meta a { color: #58a6ff !important; } /* Tables */ .content .gist table { background: transparent !important; color: inherit !important; width: 100% !important; } /* Remove borders and collapse table */ .content .gist table, .content .gist tr, .content .gist td { border: none !important; border-collapse: collapse !important; border-spacing: 0 !important; } /* Ensure no padding or margins create visual lines */ .content .gist .blob-wrapper { border: none !important; padding: 0 !important; margin: 0 !important; } Introduction

Before reading this article I highly recommend studying the following community research on binary deobfuscation.

/blog/09/05/2026/
Deobfuscation and Analysis of Ring-1.io
/* Outer gist container */ .content .gist { max-height: 420px !important; overflow: auto !important; background: #0d1117 !important; color: #c9d1d9 !important; padding: 12px !important; border-radius: 6px !important; box-sizing: border-box !important; } /* Make all descendants inherit the container colors and avoid nested scrolls */ .content .gist * { color: inherit !important; background: transparent !important; overflow: visible !important; } /* Override inline style color attributes that some gist styles inject */ .content .gist [style*="color:"] { color: inherit !important; } /* Monospace formatting */ .content .gist .blob-code-inner { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Roboto Mono', 'Courier New', monospace !important; white-space: pre !important; color: #c9d1d9 !important; } /* Comments, docstrings */ .content .gist .pl-c, .content .gist .pl-c1, .content .gist .pl-s1, .content .gist .pl-c2 { color: #8b949e !important; } /* Keywords, declarations */ .content .gist .pl-k, .content .gist .pl-k1, .content .gist .pl-sy, .content .gist .pl-sr, .content .gist .pl-en { color: #ff7b72 !important; } /* Strings */ .content .gist .pl-s, .content .gist .pl-s1, .content .gist .pl-smi { color: #7ee787 !important; } /* Numbers, constants, types */ .content .gist .pl-cv, .content .gist .pl-c1, .content .gist .pl-en, .content .gist .pl-smi, .content .gist .pl-6 { color: #79c0ff !important; } /* Function names, classes */ .content .gist .pl-en, .content .gist .pl-e, .content .gist .pl-ent, .content .gist .pl-kg { color: #d2a8ff !important; } /* Links */ .content .gist a, .content .gist .file .meta a { color: #58a6ff !important; } /* Tables */ .content .gist table { background: transparent !important; color: inherit !important; width: 100% !important; } /* Remove borders and collapse table */ .content .gist table, .content .gist tr, .content .gist td { border: none !important; border-collapse: collapse !important; border-spacing: 0 !important; } /* Ensure no padding or margins create visual lines */ .content .gist .blob-wrapper { border: none !important; padding: 0 !important; margin: 0 !important; } Download All Files Here Introduction

The integrity of online video games is locked in a perpetual cat-and-mouse battle between anti-cheat developers and cheat engineers. Over the years, we’ve witnessed the rise of increasingly sophisticated evasion tactics, often outpacing those in the antivirus and red-team communities. In this article, we’ll dissect the inner workings of a prominent cheat provider, ring-1.io.

/blog/04/02/2026/
Unauthorized Code Execution in FiveM / GTA V (Pwning the Game Client)
Exploiting a Computer Program 1. Introduction

Computer programs take, often transform data, sometimes use it to transform themselves. Other times, the programmer at fault, they can be corrupted by data. If corrupted accidentally, the program may find an untimely end to its execution. But if the flaw is perceived by the skilled eye, the program may turn into an open back door for seizing the entire computer. Knowing this, I had always imagined exploiting a computer program, as it is said, to be a fascinating challenge.

/blog/26/09/2022/
AMD-V Hypervisor Development - A Brief Explanation

KrakenSvm Project

Table of Contents Preamble Purpose & Intentions

There weren’t many, if any AMD hypervisors, therefore I created a Proof Of Concept for educational purposes. There was a lack of resources to start someone off on the right foot. This project was to at least help subside any hardship that’ll come from a lack of resources to rely on.

/blog/04/08/2022/
Theodosius - Jit linker, Symbol Mapper, and Obfuscator

Repository: https://git.back.engineering/_xeroxz/Theodosius/
Doxygen: https://docs.back.engineering/theo/

Table Of Contents Credits and Contributions
  • David Torok, reviewing the post and helping me better structure my thoughts.

/blog/06/05/2022/
EZVIZ BD-2402B1 Back Engineering and SNES9X Port
Table Of Contents Introduction

EZVIZ BD-2402B1 is a surveillance system DVR which uses hisilicon SoC’s. My goal was to repurpose the hardware to run a custom fork of snes9x. In order to achieve this a serious amount of reverse engineering, and learning was required. Not only was this a hardware based project, but it was also a software heavy project.

/blog/20/01/2022/
EQU8 - Kernel Component Analysis
Disclaimer

Please note that all the code posted from here on is simply heavily beautified pseudo-code. Sorry in advance for the styling inconsistencies you may find in it; I would like to add it represents in no way the original source code of the program. I do not condone using any of the information gathered from this blog post to produce/write/develop cheats for any sort of game protected by EQU8 or its emulation.

/blog/12/08/2021/
EasyAntiCheat Exploit to inject unsigned code into protected processes

Source Link

Disclaimer

This is not an attack on EasyAntiCheat Oy. EasyAntiCheat has done an outstanding job protecting games and will continue to do so for years to come. I gathered this content through private research of EasyAntiCheat’s modules and is not in any way tied to the work of public game hack publishers or other entities. I have no interest in writing cheats, and everything here is simply for educational purposes. Please do not contact me for help with any cheating-related concerns as I will not be responding to any of such requests.

/blog/10/08/2021/
VMProtect 2 - Part Two, Complete Static Analysis

VMProtect 2 Project: github.com/backengineering/vmp2

Table Of Contents Purpose

The purpose of this article is to expound upon the prior work disclosed in the last article titled “VMProtect 2 - Detailed Analysis of the Virtual Machine Architecture”, as well as correct a few mistakes. In addition, this post will focus primarily on the creation of static analysis tools using the knowledge disclosed in the prior post, and providing some detailed, albut unofficial, VTIL documentation. This article will also showcase all projects on githacks.org/vmp2, however, these projects are subject to change.

/blog/21/06/2021/
VMProtect 2 - Detailed Analysis of the Virtual Machine Architecture

Download link: VMProtect 2 Reverse Engineering

Table Of Contents Credit - Links to Existing Work Preamble - Intentions and Purpose

Before diving into this post I would like to state a few things in regards to existing VMProtect 2 work, the purpose of this article, and my intentions, as these seem to become misconstrued and distorted at times.

/blog/17/05/2021/
Voyager - A Hyper-V Hacking Framework

Download link: Voyager

Table Of Contents Keywords

Hyper-V, UEFI, Windows 10, Hyperjacking, VDM, PTM, Intel, AMD

/blog/20/04/2021/
Hyperspace - Hidden Address Spaces

Download link: Hyperspace

Table Of Contents Introduction - Address Spaces

An address space is defined as a region of memory. In this post I will be referring to an address space in reference to a 64bit virtual address space on x86 architecture. Control Register Three (CR3) contains the PFN (Page Frame Number) of the current Page Map Level Four (PML4). It is also known as dirbase.

/blog/29/03/2021/
Reverse Injector - Merging Address Spaces

Download link: Reverse Injector

Table Of Contents Introduction - Virtual Memory & Page Tables

Each process on the Windows operating system has its own virtual address space. Virtual address spaces are created and described by page tables. The top most layer of translation is through the Page Map Level 4 or PML4 for short. Each entry in a PML4 points to another page table, to the next layer of translation, a Page Directory Page Table or PDPT for short. PDPTE’s point to Page Directories or PD’s, and PD’s point to Page Tables, or PT. There are four levels of address translation in IA-32e Long Mode. Each translation layer can map f(x) = (512^x) * 8 bytes, where x is the translation table layer. PT = 1; PD = 2; PDPT = 3; PML4 = 4

/blog/27/03/2021/
MSREXEC - Elevate Arbitrary WRMSR to Kernel Execution

Download link: MSREXEC

MSREXEC Table Of Contents Introduction

MSREXEC is a library to elevate arbitrary MSR (Model Specific Register) writes to kernel execution. The project is extremely modular and open ended on how writes to MSR’s are achieved. One only has to pass a lambda of type std::function<bool(std::uint32_t reg, std::uint64_t value)> to the constructor of vdm::msrexec_ctx to use this library. For demonstration, the project is set up to exploit vulnerable Windows drivers, however the project is not limited to using vulnerable drivers.

/blog/22/03/2021/
PSKP - Process-Context Specific Kernel Patch

Download link: PSKP (Process-Context Specific Kernel Patch)

Introduction

Applying knowledge obtained from the prior write up of paging tables, one can easily follow along with this write up, if you have not acquainted yourself with paging tables this write up will be nothing but squiggly lines. Refresh your mind of the meaning of the following terms: PML4(E), PDPT(E), PD(E), PT(E), address space, paging, and CR3.

/blog/25/08/2020/
Virtual Memory - Intro to Paging Tables

Download link: PTM

Introduction

Virtual memory is probably one of the most interesting topics of modern computer science. Although virtual memory was originally designed back when physical memory was not an abundant resource to allow the use of disk space as ram, it has stuck with us, offering security, modularity, and flexibility. Unlike the rest of the content on my sites which is bound to an operating system, virtual memory is really a CPU level concept. Although virtual memory is well documented in the intel manual, applying such knowledge to windows can be tricky due to the fact there isn’t a single documented way to interface with paging tables on windows. In this series of write ups I will be discussing methods to manipulate paging tables and detect such manipulations. Although there are many different types of paging table systems, I will only be discussing the standard four layer paging table system used in all modern AMD and Intel 64 bit CPU’s.

/blog/23/08/2020/
Physmeme - Windows Unsigned Kernel Driver Mapper

Download link: physmeme

Introduction

Physmeme is a driver mapper that works with any form of read and write to physical memory. It is highly modular code that allows a reverse engineer to easily integrate their own vulnerable driver. If you are able to read and write to physical memory you can now map an unsigned driver into your kernel just by coding four functions.

/blog/19/04/2020/