Artificial Intelligence
Is AI learning to rebuild programs? Understand the recompilation that went viral on the internet
Videos claim that artificial intelligence can already rebuild software like Photoshop. Understand what's possible with reverse engineering, decompilation, and recompilation.
By Ederson Andrade · October 15, 2026 · 8 min read

Videos on social media suggest that artificial intelligence can already disassemble a program like Photoshop and return it ready, free and equivalent to the original. The phrase joins different processes. Creating an image editor with similar features, analyzing an executable, and converting a program to another platform are different tasks. All can receive help from AI, but none demonstrates, by itself, that the code of a proprietary application has been recovered.
The recent case of PhotoCraft helps to understand the confusion. Its managers present the project as an image editor written in Rust and as an independent implementation, based on public specifications and observed behavior. It is a description of the developers themselves, not an independent audit of equivalence with Photoshop. The repository does not present the project as a decompilation of Adobe code. At the same time, tools such as OER propose to connect AI agents to the analysis of applications and binary files. The existence of these tools also does not prove that an entire software has been faithfully rebuilt.
To understand what is actually at stake, let's follow a Fictitious program that adds two numbers. The demos below are educational simplifications; they don't show Photoshop code or an actual tool performing reverse engineering.
First, how is an executable born?
The starting point is often source code: instructions written by people in a programming language. A compiler can parse this code, turn it into intermediate representations, and produce instructions for a processor. A build process can also bring together libraries, resources, and information needed by the operating system. O LLVM project documents the use of an intermediate representation; its Backends generate code for specific targets. This is an example of compiler architecture, not a mandatory sequence for all programs.
In our example, the original intent fits on one line: somar(a, b) = a + b. The executable contains a way to perform the operation, but it may not store the names chosen by the programmer, the comments, or the original file. Optimizations can also rearrange operations before generating the final result.
Como um programa pode renascer?
The program appears
Try the original interface. At this point, we can only observe its behavior.
- The program appears
Try the original interface. At this point, we can only observe its behavior.
- The interface opens up
Behind the screen is a rule written in code. Compilation may erase names and comments.
- Now we see bits
Numbers also have binary representations. A real executable contains instructions and much more context.
- We rebuild a hypothesis
Inputs and outputs suggest a rule. New tests may confirm or refute it.
- Another application appears
The new implementation matches the tested cases. This does not prove parity with complex software.
Teaching simulation: the bits represent the entered numbers, not instructions extracted from a real application.
This loss of context explains why going back from an executable to something readable requires interpretation. Knowing that a sequence of statements adds up to two values doesn't necessarily reveal how the entire project was organized.
What can reverse engineering observe?
Reverse engineering is investigating how a system works based on what is available. In the fictitious program, we can insert 2 e 3, observe the output 5, examine the statements, and test other values. An analysis tool can show functions, references, and execution flow. O Ghidra, maintained by the NSA, offers disassembly, decompilation, and graphical analysis capabilities.
Observations allow you to create hypotheses. If the program returns 5 to 2 e 3, it may be adding up, but a single test is not enough: another rule could also produce 5 in this case. Negative inputs, large numbers, errors, and ambient conditions help distinguish behaviors. In real programs, the difficulty grows with interfaces, files, plugins, network calls, protection, and external dependencies.