Can REA Reverse-Engineer an Entire App? A DX-Ball Example

Can you drop an app into REA and get its original source code back? No. REA gives an AI coding agent a way to investigate software through tools such as Ghidra, but reverse engineering still takes focused questions, careful reading, and checks against the original. A walkthrough of DX-Ball shows what that looks like in practice: tracing one sound effect back to the calculation that controls its left-right position. REA connects an agent to analysis tools for native binaries, JavaScript and Electron apps, .NET software, websites, and more. The agent can inspect evidence such as decompiled code, assembly instructions, callers, and data, then decide what to investigate next. That makes the process easier to navigate; it does not turn an executable into a clean, complete copy of its source project. ## A small question, followed through The DX-Ball example starts with a specific question: when a brick is hit, how does the game decide where its sound sits between the left and right speakers? The target is DX-Ball 1.07, a Windows game released in 1996. First, the agent asks REA to inspect the sound-panning function. The decompiler makes the function look as if it has no input, but the assembly shows that it reads a value passed in. That mismatch is a useful clue, not something to gloss over. The agent follows the function’s caller and finds that the game calculates a brick’s screen position as 20 + 30 × tile_x: start 20 pixels from the edge, then move 30 pixels for each tile. Next, it traces the values used by the instructions. Reading the relevant bytes as floating-point numbers gives 1.5625, 500.0, and an initial scale of 1.0. Put together, the calculation is: pan = (screen_x × 1.5625 − 500.0) × pan_scale At the default scale, a position of 320 maps to the centre (0); the edges at 0 and 640 map to −500 and 500. That is a concrete explanation of how a brick’s position can steer its sound between the speakers. ## The check matters more than the confident explanation The DX-Ball reconstruction project reports comparing its C version with the original for 3,205 cases: every integer screen position from 0 to 640 at five scale values. It also reports reproducing 63 bytes of the original function with its pinned Visual C++ 4.0 toolchain. Those are results reported by the project, not an independent benchmark of REA. They show the kind of check that makes a narrow reconstruction more convincing: compare it with the target instead of trusting a fluent explanation. The [DX-Ball walkthrough](https://rea.tools/showcase/dx-ball/) includes the queries and evidence. REA can also help with packaged apps. In a separate [Notion Desktop case study](https://rea.tools/showcase/notion/), the project follows a clipboard call through the app’s JavaScript, Electron preload, and main-process handlers. That is a different investigation from reading native assembly, and it still traces one behavior rather than rebuilding the whole application. ## What you need, and what still needs your judgment The current README lists Node.js 22.x, 24.x, or 26+ and npm for setup. Native binary analysis needs a suitable, properly licensed tool such as Ghidra, Hopper, or IDA; some static JavaScript and .NET inspections do not. The right setup also depends on the file and the question. A model may help with patterns and follow-up questions, but it can misread evidence, and harder binary work can demand a stronger model and more hands-on guidance. Someone who can spot a bad interpretation is still part of the workflow. REA’s project says analysis runs locally. The findings returned to a connected coding agent are also sent to that model provider. Only examine software you own or have permission to analyze, and use commercial tools under their licenses. For the project and current requirements, see the [REA repository](https://github.com/morluto/rea). The useful promise here is practical: investigate a specific behavior with an agent, then check what it found. “Reverse engineer anything” is the ambition; a verified slice of one program is what this example demonstrates. ~programming ~ai ![Image](/media/assets/2523f006-38b0-4d49-83e4-d7375fe86f2c/media.webp)

1
Discuss 0 40
0 replies
Be the first to join this thread.