<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: CluoPrints</title>
    <description>The latest articles on DEV Community by CluoPrints (@cluoprints).</description>
    <link>https://dev.to/cluoprints</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4234056%2F4c9a2de4-47a6-46b7-8a47-4f938dec53e9.png</url>
      <title>DEV Community: CluoPrints</title>
      <link>https://dev.to/cluoprints</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cluoprints"/>
    <language>en</language>
    <item>
      <title>I Tested REA (Reverse Engineer Anything) on My Own Tool — Here's What It Actually Found</title>
      <dc:creator>CluoPrints</dc:creator>
      <pubDate>Sun, 08 Nov 2026 19:56:08 +0000</pubDate>
      <link>https://dev.to/cluoprints/i-tested-rea-reverse-engineer-anything-on-my-own-tool-heres-what-it-actually-found-4gdf</link>
      <guid>https://dev.to/cluoprints/i-tested-rea-reverse-engineer-anything-on-my-own-tool-heres-what-it-actually-found-4gdf</guid>
      <description>&lt;p&gt;I had seen REA — Reverse Engineer Anything — mentioned everywhere, so instead of repeating the hype, I decided to test it on something I know inside out: my own tool.&lt;/p&gt;

&lt;p&gt;That is the important limit of this post. I tested one tool, my own, once, in a controlled setup. What follows is what actually happened — including the parts REA missed.&lt;/p&gt;

&lt;p&gt;The full, step-by-step version of this test, with the exact commands and prompts, is here: &lt;a href="https://cluoprints.com/rea-tutorial.html" rel="noopener noreferrer"&gt;REA (Reverse Engineer Anything): What It Is, How to Install It, and What It Can (and Can't) Do — A Hands-On Test&lt;/a&gt;. The companion repo is &lt;a href="https://github.com/CluoPrints/rea-tutorial" rel="noopener noreferrer"&gt;CluoPrints/rea-tutorial on GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What REA is
&lt;/h2&gt;

&lt;p&gt;REA is an open-source MCP server and CLI by morluto. It connects reverse-engineering tools such as Ghidra, IDA, Hopper and JADX to AI coding assistants including Claude Code, Codex, Cursor and Gemini CLI.&lt;/p&gt;

&lt;p&gt;In practice, that means you can ask in plain English — "Where is the image export code?" or "Does this app upload anything?" — and REA translates the question into a decompiler or disassembler call, then returns the answer with evidence such as a function name, a file, a line number or a byte offset.&lt;/p&gt;

&lt;p&gt;It is MIT-licensed. It does not bundle Ghidra, IDA or the other engines, and it does not include licences for commercial tools such as IDA. Those are separate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing it took about 40 seconds
&lt;/h2&gt;

&lt;p&gt;I tested version &lt;strong&gt;6.8.0&lt;/strong&gt; on Ubuntu, with Node v24.22.1 and npm 10.9.4. The install was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
npm &lt;span class="nb"&gt;install &lt;/span&gt;rea-agents@6.8.0
./node_modules/.bin/rea &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;span class="c"&gt;# 6.8.0&lt;/span&gt;
./node_modules/.bin/rea doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;rea doctor&lt;/code&gt; reported that no native engines were installed. That turned out not to be a blocker for my test: static JavaScript and .NET analysis works without an engine. I also noted the other engines need their own setup, which I did not test.&lt;/p&gt;

&lt;h2&gt;
  
  
  The test target: my own Social Image Sizes tool
&lt;/h2&gt;

&lt;p&gt;I chose my own &lt;a href="https://cluoprints.com/tools/social-image-sizes.html" rel="noopener noreferrer"&gt;Social Image Sizes&lt;/a&gt; tool because I already knew the correct answers, so I could check REA instead of trusting it.&lt;/p&gt;

&lt;p&gt;The tool lets you upload an image, pick one of eight social-media sizes, crop or fit it, choose an output format and quality, and download the result. The test input was four files, which REA parsed into 2,869 AST nodes and a 2.9 MB JSON output.&lt;/p&gt;

&lt;p&gt;My questions were the ones a developer or security reviewer would actually ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where does the image export happen?&lt;/li&gt;
&lt;li&gt;Does the image ever leave the browser?&lt;/li&gt;
&lt;li&gt;What does the app store, and where?&lt;/li&gt;
&lt;li&gt;What happens if the original image is smaller than the chosen preset?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Attempt 1: it worked, but with a warning I should not have ignored
&lt;/h2&gt;

&lt;p&gt;The first run completed in about five seconds and produced a 15,835-byte answer. It correctly found the AdSense script and the cookie-consent code that writes to &lt;code&gt;localStorage&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But it also said, in its own output, that "2 inline JavaScript bodies … were not analyzed." That was the warning. The most important logic in my tool lives in inline scripts, and the first attempt had skipped it.&lt;/p&gt;

&lt;p&gt;So I ran it again, explicitly asking it to analyse the inline scripts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Attempt 2: this time, the answers were checkable — and mostly right
&lt;/h2&gt;

&lt;p&gt;The second run reported zero parse failures. More importantly, I could verify its claims against code I had written myself. It got these right:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The export function:&lt;/strong&gt; it located &lt;code&gt;drawPreset()&lt;/code&gt; at byte offset 2921 — exactly where it is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How the export works:&lt;/strong&gt; canvas, 2D context, &lt;code&gt;drawImage&lt;/code&gt;, &lt;code&gt;toBlob&lt;/code&gt; and &lt;code&gt;URL.createObjectURL&lt;/code&gt;, plus the &lt;code&gt;PRESETS&lt;/code&gt; table, &lt;code&gt;fillStyle&lt;/code&gt; and &lt;code&gt;fillRect&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The upscale warning:&lt;/strong&gt; it found the exact user-facing string, "Upscaled from a smaller original — may look soft."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Android fallback:&lt;/strong&gt; it found the &lt;code&gt;setInterval&lt;/code&gt; polling fallback, running every 400 ms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; it reported zero network calls, and that the only thing stored is the cookie-consent flag — &lt;code&gt;cookie-consent&lt;/code&gt; in &lt;code&gt;app.js&lt;/code&gt;, line 63, exactly. The image is processed locally and never uploaded.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point is the kind of answer that matters in a review: it is specific, it names the file and line, and I could confirm it. REA did not just say "this app is safe." It said what it checked and where.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it missed
&lt;/h2&gt;

&lt;p&gt;This is the part that would be lost if I only quoted the successes. REA did not recover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The preset dimensions themselves — 1080×1080, 1080×1350 and 1080×1920, for example.&lt;/li&gt;
&lt;li&gt;The crop-versus-fit logic, &lt;code&gt;Math.max&lt;/code&gt; versus &lt;code&gt;Math.min&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The output format and quality settings, which live in HTML dropdowns rather than in the JavaScript it analysed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also left &lt;strong&gt;654 unknowns&lt;/strong&gt; in its output. That is not a small footnote. It means the analysis was partial, even on a small, plain JavaScript tool with no obfuscation.&lt;/p&gt;

&lt;p&gt;So the honest summary is: the structure was accurate, and the specific function, storage and network answers were verifiable — but the data coverage was partial.&lt;/p&gt;

&lt;h2&gt;
  
  
  What REA cannot do
&lt;/h2&gt;

&lt;p&gt;Based on this test, and on what the tool itself reports, a few limits are worth stating plainly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It cannot recover original source code, and it cannot clone an app.&lt;/li&gt;
&lt;li&gt;It gives you a partial view of the program, not a complete one. The 654 unknowns above are the evidence for that.&lt;/li&gt;
&lt;li&gt;Without a native engine installed, it cannot do deep native analysis.&lt;/li&gt;
&lt;li&gt;Static analysis does not run the app, so it cannot tell you what happens at runtime.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you point it at a binary you do not own or do not have permission to analyse, that is a legal and ethical problem, not a technical one. I only tested my own tool, and I would only use REA on code I own or am authorised to review.&lt;/p&gt;

&lt;p&gt;One practical warning from my own notes: only download REA from the official places — GitHub &lt;code&gt;morluto/rea&lt;/code&gt;, &lt;code&gt;rea.tools&lt;/code&gt;, or npm &lt;code&gt;rea-agents&lt;/code&gt;. Fake copies and lookalike repos are a known risk with popular tools, and the repository I used for this test is the companion repo linked above, not the REA project itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  My verdict
&lt;/h2&gt;

&lt;p&gt;REA is a genuinely useful assistant for reverse engineering: it is fast on a small target, it answers specific questions with locations you can check, and on my own tool its structural answers held up.&lt;/p&gt;

&lt;p&gt;It is not a replacement for reading the code, and it is not a way to recover a lost codebase. The first attempt quietly skipped the inline scripts, the second still left hundreds of unknowns, and the data-level details — the actual dimensions, the crop logic, the format settings — needed a human reading the source.&lt;/p&gt;

&lt;p&gt;Use it to find where to look, and to check privacy and storage questions quickly. Then verify the answer yourself, especially before you trust it on code you do not know.&lt;/p&gt;

&lt;p&gt;If you want the commands, prompts and full results, the complete tutorial is here: &lt;a href="https://cluoprints.com/rea-tutorial.html" rel="noopener noreferrer"&gt;https://cluoprints.com/rea-tutorial.html&lt;/a&gt;. The companion repo is &lt;a href="https://github.com/CluoPrints/rea-tutorial" rel="noopener noreferrer"&gt;https://github.com/CluoPrints/rea-tutorial&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This post is a condensed rewrite of my own hands-on tutorial and test above. It is based on the same single test of my own tool, version 6.8.0, and adds no new results.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>reverseengineering</category>
      <category>opensource</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
