<?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: Gilbert Palau</title>
    <description>The latest articles on DEV Community by Gilbert Palau (@tempusthales).</description>
    <link>https://dev.to/tempusthales</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%2F477493%2F2af53763-7d4a-4051-86aa-53a37bba5faf.png</url>
      <title>DEV Community: Gilbert Palau</title>
      <link>https://dev.to/tempusthales</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tempusthales"/>
    <language>en</language>
    <item>
      <title>REA: Reverse Engineer Anything</title>
      <dc:creator>Gilbert Palau</dc:creator>
      <pubDate>Tue, 20 Oct 2026 16:28:46 +0000</pubDate>
      <link>https://dev.to/tempusthales/rea-reverse-engineer-anything-4475</link>
      <guid>https://dev.to/tempusthales/rea-reverse-engineer-anything-4475</guid>
      <description>&lt;h2&gt;
  
  
  What is REA?
&lt;/h2&gt;

&lt;p&gt;Ever looked at an app and wondered, “How does that feature actually work?” REA gives an AI agent tools to investigate. It can examine native binaries, JavaScript and Electron apps, websites, and other software, then return evidence the agent can use to explain what it found or help build something similar.&lt;/p&gt;

&lt;p&gt;The part that caught my eye is that REA is meant to show its work. It returns supporting details and notes where the evidence has limits. That’s a lot more useful than getting a confident answer with no way to check it.&lt;/p&gt;

&lt;p&gt;REA connects to an agent through the Model Context Protocol (MCP). The agent asks REA to run an analysis, REA returns findings and evidence, and the agent uses those results to answer questions or guide implementation. The same analysis workflows can also be run from REA’s command-line interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing an analysis tool
&lt;/h2&gt;

&lt;p&gt;REA can connect to &lt;strong&gt;Ghidra, Hopper, or IDA&lt;/strong&gt; for native binary analysis. It does not install all three, and I only need one. The right choice depends on the target software, my operating system, and the tools I already have.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ghidra
&lt;/h3&gt;

&lt;p&gt;Ghidra is where I’d start. It’s free and open source under the &lt;strong&gt;Apache License 2.0&lt;/strong&gt;. It is not MIT-licensed. For REA’s documented setup, I need a 64-bit JDK 21 or newer, including the Java compiler, as well as a Ghidra installation.&lt;/p&gt;

&lt;p&gt;The basic install is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install a 64-bit JDK 21 or newer.&lt;/li&gt;
&lt;li&gt;Download the Ghidra release archive from the release’s &lt;strong&gt;Assets&lt;/strong&gt; section. Don’t choose “Source code.”&lt;/li&gt;
&lt;li&gt;Extract the archive.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;JAVA_HOME&lt;/code&gt; to the JDK directory and &lt;code&gt;GHIDRA_INSTALL_DIR&lt;/code&gt; to the extracted Ghidra directory.&lt;/li&gt;
&lt;li&gt;Run REA’s readiness check, then run REA setup for the agent I want to connect.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For example, in macOS or Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;JAVA_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/path/to/jdk-21"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GHIDRA_INSTALL_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/path/to/ghidra_12.1.4_PUBLIC"&lt;/span&gt;

npx &lt;span class="nt"&gt;-y&lt;/span&gt; rea-agents@latest doctor &lt;span class="nt"&gt;--provider&lt;/span&gt; ghidra &lt;span class="nt"&gt;--json&lt;/span&gt;
npx rea-agents@latest setup &lt;span class="nt"&gt;--client&lt;/span&gt; copilot_cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace the example paths and client ID with the values for my machine and agent. On some macOS and Linux arm64 systems, Ghidra’s native decompiler needs an additional build step. REA’s Ghidra instructions cover that case.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hopper
&lt;/h3&gt;

&lt;p&gt;Hopper is a commercial reverse-engineering application. It runs on macOS and supported Linux distributions, but REA’s current guide lists it as unavailable on Windows. Its demo has limits set by the vendor.&lt;/p&gt;

&lt;p&gt;REA setup can detect an existing Hopper installation or offer to install it. Installing Hopper is a separate choice in setup, and REA asks for approval before proceeding. After setup, I can check whether REA can use it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx rea-agents@latest doctor &lt;span class="nt"&gt;--provider&lt;/span&gt; hopper &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I would review REA’s current Hopper installation plan and requirements before approving an install.&lt;/p&gt;

&lt;h3&gt;
  
  
  IDA
&lt;/h3&gt;

&lt;p&gt;IDA is another option, especially if I already use IDA Pro or have an IDA configuration that works with REA. IDA Pro is commercial software. IDA Free is also available, with its own feature and licensing limits.&lt;/p&gt;

&lt;p&gt;IDA requires more manual setup than the other options. REA does not install IDA or its upstream MCP server. I first install and configure IDA and a compatible upstream MCP connection. Then I save that working connection’s command and arguments in a JSON configuration file and point REA to it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;REA_IDA_MCP_CONFIG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/absolute/path/to/ida-mcp.json"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;REA_ANALYSIS_PROVIDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ida"&lt;/span&gt;

npx &lt;span class="nt"&gt;-y&lt;/span&gt; rea-agents@latest doctor &lt;span class="nt"&gt;--provider&lt;/span&gt; ida &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exact setup depends on whether IDA is already open with the target or will use a headless profile. I’d follow REA’s &lt;a href="https://github.com/morluto/rea/blob/main/docs/ida-provider.md" rel="noopener noreferrer"&gt;IDA provider guide&lt;/a&gt;, which documents the supported connection modes and their requirements, rather than reuse a generic MCP configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting REA to AI agents
&lt;/h2&gt;

&lt;p&gt;The analysis engine and the AI agent are separate parts of the setup. I install or configure an analysis engine when my target needs one, then register REA with each agent I want to use. REA’s setup command previews the changes and asks for approval before applying them. It registers the MCP server and installs REA’s workflow instructions by default. I restart the agent after setup.&lt;/p&gt;

&lt;p&gt;REA requires Node.js &lt;strong&gt;22.19 or newer in the 22.x line, 24.11 or newer in the 24.x line, or 26 or newer&lt;/strong&gt;, along with npm.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Copilot CLI
&lt;/h3&gt;

&lt;p&gt;To connect REA to GitHub Copilot CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx rea-agents@latest setup &lt;span class="nt"&gt;--client&lt;/span&gt; copilot_cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review and approve the proposed changes, then restart Copilot CLI. If I meant Copilot in VS Code rather than the CLI, REA also documents VS Code as a supported client. Its setup ID is &lt;code&gt;vscode&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx rea-agents@latest setup &lt;span class="nt"&gt;--client&lt;/span&gt; vscode
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Claude Code
&lt;/h3&gt;

&lt;p&gt;To connect REA to Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx rea-agents@latest setup &lt;span class="nt"&gt;--client&lt;/span&gt; claude_code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review and approve the setup plan, then restart Claude Code. Setup registers REA for the client and installs the bundled workflow instructions. For Claude Desktop, the client ID is different, so I’d use the appropriate client entry from REA’s installation guide.&lt;/p&gt;

&lt;h3&gt;
  
  
  Grok Bot
&lt;/h3&gt;

&lt;p&gt;Grok Bot works differently from clients that REA setup configures directly. Its MCP connector is stored in the signed-in account and runs on Grok Bot’s hosted computer. REA setup does not write to that account-level connector store.&lt;/p&gt;

&lt;p&gt;In Grok Bot chat, I’d ask it to add a custom MCP server named &lt;code&gt;rea&lt;/code&gt; that runs this command on the Bot’s computer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; rea-agents@&amp;lt;version&amp;gt; mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;&amp;lt;version&amp;gt;&lt;/code&gt; with the REA release I want to run. I would not put credentials in the command or its arguments. Since this server runs in Grok Bot’s hosted environment, it cannot automatically access files on my Mac. The target needs to be available from that environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  What using REA looks like
&lt;/h2&gt;

&lt;p&gt;Once connected, I can ask an agent a question about a target. The agent calls the relevant REA tools, REA performs the available analysis, and the findings come back with supporting evidence and limitations. I can then ask follow-up questions or use the results to guide an implementation.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Copilot CLI:&lt;/strong&gt; “Use REA to trace how this Electron app handles deep links. Show the relevant modules and note any limits in the evidence.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code:&lt;/strong&gt; “Use REA to investigate this app’s search feature. Explain how it works, then suggest how I could build something similar in this project.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grok Bot:&lt;/strong&gt; “Using the REA MCP server available in your environment, inspect this application’s login flow and show the evidence you find.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;REA can also be used from the terminal. For example, to analyze a JavaScript or Electron application directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx &lt;span class="nt"&gt;-y&lt;/span&gt; rea-agents@latest analyze-javascript-application /absolute/path/to/app &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The available analysis depends on the target. Static JavaScript and Electron analysis does not require a native analysis engine. Native binary analysis requires a configured provider such as Ghidra, Hopper, or IDA. Website analysis requires a Chrome-family browser. Other workflows may have their own dependencies.&lt;/p&gt;

&lt;h2&gt;
  
  
  My take
&lt;/h2&gt;

&lt;p&gt;I’d start with &lt;strong&gt;Ghidra&lt;/strong&gt; if I wanted a free, open-source native analysis tool and was comfortable installing the JDK it requires. If I already had Hopper or IDA configured, I’d use the tool that fits my workflow and target.&lt;/p&gt;

&lt;p&gt;REA’s most compelling idea is bringing analysis tools into the same conversation where I’m asking questions about software. Its evidence-focused results are a good fit for reverse engineering, where it matters to know not just what an agent concluded, but what it observed and where it is uncertain.&lt;/p&gt;

&lt;p&gt;There are some setup details to plan for. REA needs a supported Node.js version, native analysis needs an external provider, and Grok Bot’s hosted connector cannot inspect local Mac files by default. Also, when REA runs locally, its analysis happens on my machine, but the results are passed to the connected agent. I’d check the agent’s data-handling terms before analyzing sensitive software.&lt;/p&gt;

&lt;p&gt;This is a documentation-based review, not a hands-on evaluation. Installation instructions, supported clients, and tool requirements can change, so I’d check the current guides before setting it up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/morluto/rea" rel="noopener noreferrer"&gt;REA repository and README&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/morluto/rea/blob/main/docs/installation.md" rel="noopener noreferrer"&gt;Installation and setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/morluto/rea/blob/main/docs/client-configuration.md" rel="noopener noreferrer"&gt;Client configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/morluto/rea/blob/main/docs/ida-provider.md" rel="noopener noreferrer"&gt;IDA provider guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/NationalSecurityAgency/ghidra/blob/master/LICENSE" rel="noopener noreferrer"&gt;Ghidra license&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>It's been 6 years...</title>
      <dc:creator>Gilbert Palau</dc:creator>
      <pubDate>Tue, 20 Oct 2026 15:28:46 +0000</pubDate>
      <link>https://dev.to/tempusthales/its-been-6-years-4671</link>
      <guid>https://dev.to/tempusthales/its-been-6-years-4671</guid>
      <description>&lt;p&gt;In 2020, I came here to say “Hello.” Since then, I’ve been perfecting the pause.&lt;/p&gt;

&lt;p&gt;The next post is still in development.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Hello...</title>
      <dc:creator>Gilbert Palau</dc:creator>
      <pubDate>Wed, 30 Sep 2020 20:44:23 +0000</pubDate>
      <link>https://dev.to/tempusthales/hello-1hp0</link>
      <guid>https://dev.to/tempusthales/hello-1hp0</guid>
      <description>&lt;p&gt;Hello World! =)&lt;/p&gt;

&lt;p&gt;PS. I am a poor example of a blogger. Hopefully, I start writing here more often about scripts and whatnot.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
