1179 lines
50 KiB
HTML
1179 lines
50 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
<title>REA — Reverse Engineering for Your Coding Agent</title>
|
||
<meta
|
||
name="description"
|
||
content="Reverse engineer apps, binaries and browser behavior with your coding agent. Follow clear guides and try interactive examples with REA."
|
||
/>
|
||
<!-- website:sharing:start -->
|
||
<!-- prettier-ignore -->
|
||
<link rel="canonical" href="https://rea.tools/" />
|
||
<!-- website:languages:start -->
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="en" href="https://rea.tools/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="zh-CN" href="https://rea.tools/zh-CN/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="zh-TW" href="https://rea.tools/zh-TW/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="ja" href="https://rea.tools/ja/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="ko" href="https://rea.tools/ko/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="tr" href="https://rea.tools/tr/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="ru" href="https://rea.tools/ru/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="vi" href="https://rea.tools/vi/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="th" href="https://rea.tools/th/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="de" href="https://rea.tools/de/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="es" href="https://rea.tools/es/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="fr" href="https://rea.tools/fr/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="uk" href="https://rea.tools/uk/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="pl" href="https://rea.tools/pl/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="pt-BR" href="https://rea.tools/pt-BR/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="ar" href="https://rea.tools/ar/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="fa" href="https://rea.tools/fa/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="id" href="https://rea.tools/id/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="it" href="https://rea.tools/it/" />
|
||
<!-- prettier-ignore -->
|
||
<link rel="alternate" hreflang="x-default" href="https://rea.tools/" />
|
||
<!-- website:languages:end -->
|
||
<!-- prettier-ignore -->
|
||
<meta property="og:type" content="website" />
|
||
<!-- prettier-ignore -->
|
||
<meta property="og:site_name" content="REA" />
|
||
<!-- prettier-ignore -->
|
||
<meta property="og:title" content="REA — Reverse Engineering for Your Coding Agent" />
|
||
<!-- prettier-ignore -->
|
||
<meta property="og:description" content="Reverse engineer apps, binaries and browser behavior with your coding agent. Follow clear guides and try interactive examples with REA." />
|
||
<!-- prettier-ignore -->
|
||
<meta property="og:url" content="https://rea.tools/" />
|
||
<!-- prettier-ignore -->
|
||
<meta property="og:image" content="https://rea.tools/assets/social-card.png" />
|
||
<!-- prettier-ignore -->
|
||
<meta property="og:image:type" content="image/png" />
|
||
<!-- prettier-ignore -->
|
||
<meta property="og:image:width" content="1200" />
|
||
<!-- prettier-ignore -->
|
||
<meta property="og:image:height" content="630" />
|
||
<!-- prettier-ignore -->
|
||
<meta
|
||
property="og:image:alt"
|
||
content="REA — Find out how software works. Reverse engineering with your coding agent."
|
||
/>
|
||
<!-- prettier-ignore -->
|
||
<meta name="twitter:card" content="summary_large_image" />
|
||
<!-- prettier-ignore -->
|
||
<meta name="twitter:title" content="REA — Reverse Engineering for Your Coding Agent" />
|
||
<!-- prettier-ignore -->
|
||
<meta name="twitter:description" content="Reverse engineer apps, binaries and browser behavior with your coding agent. Follow clear guides and try interactive examples with REA." />
|
||
<!-- prettier-ignore -->
|
||
<meta name="twitter:image" content="https://rea.tools/assets/social-card.png" />
|
||
<!-- prettier-ignore -->
|
||
<meta
|
||
name="twitter:image:alt"
|
||
content="REA — Find out how software works. Reverse engineering with your coding agent."
|
||
/>
|
||
<!-- website:sharing:end -->
|
||
<meta name="theme-color" content="#ffffff" />
|
||
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml" />
|
||
<link rel="stylesheet" href="assets/styles.css" />
|
||
<script src="assets/main.js" defer></script>
|
||
<script type="module" src="assets/home.js"></script>
|
||
<script type="module" src="assets/dino-demo.js"></script>
|
||
</head>
|
||
<body class="home-page" id="top">
|
||
<a class="skip-link" href="#main">Skip to content</a>
|
||
<!-- website:header:start -->
|
||
<!-- prettier-ignore -->
|
||
<header class="site-header">
|
||
<div class="container header-inner">
|
||
<a class="brand" href="./" aria-label="REA home"
|
||
><span class="brand-name">REA</span
|
||
><span class="brand-caption" data-i18n-skip>Reverse Engineer Anything</span></a
|
||
>
|
||
<nav class="navigation" aria-label="Main navigation">
|
||
<a href="./showcase/">Showcases</a>
|
||
<a href="./blog/">Blog</a>
|
||
<a href="./get-started/" class="nav-start">Get started</a>
|
||
<a href="./guides/">Guides</a>
|
||
<a href="./faq/">FAQ</a>
|
||
</nav>
|
||
<div class="header-social">
|
||
<details class="language-picker" data-i18n-skip><summary><span aria-hidden="true">文 / A</span> <span>English</span></summary><nav aria-label="English"><a href="./" lang="en" dir="ltr" data-language="en" aria-current="true">English</a><a href="./zh-CN/" lang="zh-CN" dir="ltr" data-language="zh-CN">简体中文</a><a href="./zh-TW/" lang="zh-TW" dir="ltr" data-language="zh-TW">繁體中文</a><a href="./ja/" lang="ja" dir="ltr" data-language="ja">日本語</a><a href="./ko/" lang="ko" dir="ltr" data-language="ko">한국어</a><a href="./tr/" lang="tr" dir="ltr" data-language="tr">Türkçe</a><a href="./ru/" lang="ru" dir="ltr" data-language="ru">Русский</a><a href="./vi/" lang="vi" dir="ltr" data-language="vi">Tiếng Việt</a><a href="./th/" lang="th" dir="ltr" data-language="th">ไทย</a><a href="./de/" lang="de" dir="ltr" data-language="de">Deutsch</a><a href="./es/" lang="es" dir="ltr" data-language="es">Español</a><a href="./fr/" lang="fr" dir="ltr" data-language="fr">Français</a><a href="./uk/" lang="uk" dir="ltr" data-language="uk">Українська</a><a href="./pl/" lang="pl" dir="ltr" data-language="pl">Polski</a><a href="./pt-BR/" lang="pt-BR" dir="ltr" data-language="pt-BR">Português (Brasil)</a><a href="./ar/" lang="ar" dir="rtl" data-language="ar">العربية</a><a href="./fa/" lang="fa" dir="rtl" data-language="fa">فارسی</a><a href="./id/" lang="id" dir="ltr" data-language="id">Bahasa Indonesia</a><a href="./it/" lang="it" dir="ltr" data-language="it">Italiano</a></nav></details>
|
||
<a
|
||
class="nav-github"
|
||
href="https://github.com/morluto/rea"
|
||
aria-label="REA on GitHub"
|
||
title="REA on GitHub"
|
||
>
|
||
<svg
|
||
width="22"
|
||
height="22"
|
||
viewBox="0 0 16 16"
|
||
aria-hidden="true"
|
||
focusable="false"
|
||
>
|
||
<path
|
||
fill="currentColor"
|
||
d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82a7.65 7.65 0 0 1 2-.27c.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"
|
||
/>
|
||
</svg>
|
||
<span class="nav-github-count" hidden aria-hidden="true"></span>
|
||
</a>
|
||
<a
|
||
class="nav-discord"
|
||
href="https://discord.gg/GkcryMnJDM"
|
||
aria-label="Join REA on Discord"
|
||
title="Join REA on Discord"
|
||
>
|
||
<svg
|
||
width="22"
|
||
height="22"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
focusable="false"
|
||
>
|
||
<path
|
||
fill="currentColor"
|
||
d="M20.317 4.3698a19.7913 19.7913 0 0 0-4.8851-1.5152.0741.0741 0 0 0-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 0 0-.0785-.037 19.7363 19.7363 0 0 0-4.8852 1.515.0699.0699 0 0 0-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 0 0 .0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 0 0 .0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 0 0-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 0 1-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 0 1 .0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 0 1 .0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 0 1-.0066.1276 12.2986 12.2986 0 0 1-1.873.8914.0766.0766 0 0 0-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 0 0 .0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 0 0 .0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 0 0-.0312-.0286ZM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189Zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"
|
||
/>
|
||
</svg>
|
||
</a>
|
||
<a
|
||
class="nav-x"
|
||
href="https://x.com/reatools"
|
||
aria-label="Follow REA on X"
|
||
title="Follow REA on X"
|
||
>
|
||
<svg
|
||
width="18"
|
||
height="18"
|
||
viewBox="0 0 24 24"
|
||
aria-hidden="true"
|
||
focusable="false"
|
||
>
|
||
<path
|
||
fill="currentColor"
|
||
d="M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z"
|
||
/>
|
||
</svg>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
<!-- website:header:end -->
|
||
<details class="home-page-nav" data-home-nav open>
|
||
<summary class="container">
|
||
<span>On this page</span>
|
||
<span class="home-nav-current" data-home-nav-current aria-hidden="true"
|
||
>Set up REA</span
|
||
>
|
||
<svg width="12" height="12" viewBox="0 0 12 12" aria-hidden="true">
|
||
<path d="m2 4 4 4 4-4" fill="none" stroke="currentColor" />
|
||
</svg>
|
||
</summary>
|
||
<nav class="home-nav-links" aria-label="On this page">
|
||
<div class="container">
|
||
<p class="home-nav-title">On this page</p>
|
||
<ul>
|
||
<li><a href="#setup" aria-current="location">Set up REA</a></li>
|
||
<li><a href="#what-is-re">What is RE?</a></li>
|
||
<li><a href="#how-rea-helps">How REA helps</a></li>
|
||
<li><a href="#dinosaur">Dinosaur game</a></li>
|
||
<li><a href="#calculator">Calculator</a></li>
|
||
<li><a href="#try-rea">Try REA</a></li>
|
||
<li><a href="#analyze">Go deeper</a></li>
|
||
<li><a href="#questions">Help & feedback</a></li>
|
||
<li><a href="#community">Community</a></li>
|
||
</ul>
|
||
</div>
|
||
</nav>
|
||
</details>
|
||
<main id="main">
|
||
<section class="container hero home-hero" id="setup">
|
||
<div class="home-start-grid">
|
||
<div>
|
||
<p class="eyebrow">Reverse engineering, with your coding agent</p>
|
||
<h1>Find out how<br />software works.</h1>
|
||
<p class="lede">
|
||
REA gives your agent the tools to inspect a program and explain
|
||
what it does.
|
||
</p>
|
||
<div class="actions">
|
||
<a class="button" href="#what-is-re">See how REA works ↓</a>
|
||
<a class="button secondary" href="get-started/">Setup guide</a>
|
||
<a class="text-link" href="showcase/">Showcases →</a>
|
||
</div>
|
||
<p class="home-expert-shortcut">
|
||
Already know RE?
|
||
<a href="#analysis-guides">Skip to analysis guides →</a>
|
||
</p>
|
||
<p class="home-expert-shortcut">
|
||
Want to go deeper?
|
||
<a href="blog/">Read the Blog →</a>
|
||
</p>
|
||
</div>
|
||
<div class="home-setup">
|
||
<h2>Set up REA</h2>
|
||
<p>Copy this into your coding agent:</p>
|
||
<div class="agent-terminal">
|
||
<div class="terminal-header">
|
||
<span class="terminal-title"
|
||
><span class="terminal-dots" aria-hidden="true"
|
||
><i></i><i></i><i></i></span
|
||
>Your coding agent</span
|
||
>
|
||
<button
|
||
class="copy-button"
|
||
type="button"
|
||
data-copy="home-install-prompt"
|
||
aria-label="Copy REA installation prompt"
|
||
>
|
||
Copy
|
||
</button>
|
||
</div>
|
||
<p class="terminal-prompt">
|
||
<span class="prompt-symbol" aria-hidden="true">›</span
|
||
><span id="home-install-prompt"
|
||
>Install REA and connect it to this coding agent using
|
||
<span translate="no">npx rea-agents@latest setup</span>. Show
|
||
me the setup plan for approval, then verify the
|
||
installation.</span
|
||
><span class="terminal-cursor" aria-hidden="true"></span>
|
||
</p>
|
||
</div>
|
||
<p class="caption">Or run this in your terminal:</p>
|
||
<div class="code-block code-inline">
|
||
<code id="setup-command">npx rea-agents@latest setup</code>
|
||
<button
|
||
class="copy-button"
|
||
type="button"
|
||
data-copy="setup-command"
|
||
aria-label="Copy setup command"
|
||
>
|
||
Copy
|
||
</button>
|
||
</div>
|
||
<p class="caption">
|
||
Approve the setup plan, then restart your agent.
|
||
</p>
|
||
<p class="home-expert-shortcut">
|
||
First time, or missing <span translate="no">Node.js</span> or a
|
||
coding agent?
|
||
<a href="get-started/">Follow the step-by-step setup guide →</a>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section" id="what-is-re">
|
||
<div class="container">
|
||
<div class="home-definition">
|
||
<h2>What is reverse engineering?</h2>
|
||
<p class="lede">
|
||
Finding out how software works by
|
||
<strong>examining the program itself.</strong>
|
||
</p>
|
||
</div>
|
||
<p class="home-purpose">
|
||
The goal: understand a feature well enough to
|
||
<mark class="prose-highlight">explain it</mark>,
|
||
<mark class="prose-highlight">change it</mark> or
|
||
<mark class="prose-highlight">rebuild it.</mark>
|
||
</p>
|
||
<p class="comparison-question">
|
||
One question:
|
||
<strong
|
||
>why does Calculator give 220 for
|
||
<span translate="no">200 + 10%</span>?</strong
|
||
>
|
||
</p>
|
||
<figure class="home-role-comparison" id="how-rea-helps">
|
||
<div
|
||
class="manual-investigation step-comparison"
|
||
data-step-comparison
|
||
>
|
||
<p class="comparison-label">
|
||
Before REA · You investigate it
|
||
<strong class="prose-highlight">yourself</strong>
|
||
</p>
|
||
<div
|
||
class="step-selector expert-step-selector"
|
||
role="group"
|
||
aria-label="Follow the manual Calculator analysis"
|
||
>
|
||
<button
|
||
type="button"
|
||
data-select-step="1"
|
||
aria-pressed="true"
|
||
aria-controls="expert-assembly expert-reasoning"
|
||
>
|
||
<span>01</span> Decode branches
|
||
</button>
|
||
<button
|
||
type="button"
|
||
data-select-step="2"
|
||
aria-pressed="false"
|
||
aria-controls="expert-assembly expert-reasoning"
|
||
>
|
||
<span>02</span> Trace calls
|
||
</button>
|
||
<button
|
||
type="button"
|
||
data-select-step="3"
|
||
aria-pressed="false"
|
||
aria-controls="expert-assembly expert-reasoning"
|
||
>
|
||
<span>03</span> Recover the rule
|
||
</button>
|
||
</div>
|
||
<div class="expert-analysis-grid">
|
||
<details
|
||
class="code-block expert-assembly"
|
||
data-expert-assembly
|
||
open
|
||
>
|
||
<summary class="code-header">
|
||
<span>Original x64 · selected instructions</span>
|
||
<span class="assembly-disclosure" aria-hidden="true"></span>
|
||
</summary>
|
||
<pre><code id="expert-assembly"><span class="code-step is-active" data-step="1">0x180124945: MOV EAX, dword ptr [R13 + 0x18]
|
||
0x180124949: CMP EAX, 0x5c
|
||
0x18012494c: JZ 0x180124aba
|
||
0x180124952: CMP EAX, 0x5b
|
||
0x180124955: JZ 0x180124aba</span>
|
||
<span class="code-step" data-step="2">0x18012495b: MOV EDX, 0x64
|
||
0x180124960: LEA RCX, [RSP + 0x160]
|
||
0x180124968: CALL 0x180122650
|
||
0x18012496e: LEA RDX, [R13 + 0x160]
|
||
0x180124975: LEA RCX, [RSP + 0x78]
|
||
0x18012497a: CALL 0x180109720</span>
|
||
0x18012497f: MOV RSI, RAX
|
||
0x180124982: MOV qword ptr [RSP + 0x28], RAX
|
||
<span class="code-step" data-step="2">0x180124987: LEA RDX, [RSP + 0x160]
|
||
0x18012498f: MOV RCX, RAX
|
||
0x180124992: CALL 0x180123190</span>
|
||
<span class="assembly-omission">; … value-copy instructions omitted …</span>
|
||
<span class="code-step" data-step="3">0x180124a14: MOV RDX, RDI
|
||
0x180124a17: LEA RCX, [RSP + 0xf8]
|
||
0x180124a1f: CALL 0x180109720
|
||
0x180124a24: LEA R8, [RSP + 0x30]
|
||
0x180124a29: MOV RDX, RAX
|
||
0x180124a2c: LEA RCX, [RSP + 0xb8]
|
||
0x180124a34: CALL 0x180123c10</span></code></pre>
|
||
</details>
|
||
<aside
|
||
class="expert-reasoning"
|
||
aria-label="Illustrative expert reasoning"
|
||
>
|
||
<div
|
||
id="expert-reasoning"
|
||
aria-live="polite"
|
||
aria-atomic="true"
|
||
>
|
||
<div class="expert-thought" data-step-note="1">
|
||
<p class="thought-label">01 · Which branch?</p>
|
||
<p>
|
||
“<strong>0x5b? 0x5c?</strong> Two jumps to the same
|
||
place. Which operators are these?”
|
||
</p>
|
||
<p class="expert-task">
|
||
Look up the command IDs, then label the branch.
|
||
</p>
|
||
<dl class="expert-facts">
|
||
<div>
|
||
<dt>0x5b</dt>
|
||
<dd>Divide ÷</dd>
|
||
</div>
|
||
<div>
|
||
<dt>0x5c</dt>
|
||
<dd>Multiply ×</dd>
|
||
</div>
|
||
</dl>
|
||
</div>
|
||
<div class="expert-thought" data-step-note="2">
|
||
<p class="thought-label">02 · What do the calls do?</p>
|
||
<p>
|
||
“100 is clear. The calls are just addresses.
|
||
<strong>Which one divides? Which value goes in?</strong
|
||
>”
|
||
</p>
|
||
<p class="expert-task">
|
||
Inspect the helpers and trace the stored values.
|
||
</p>
|
||
<dl class="expert-facts">
|
||
<div>
|
||
<dt>0x64</dt>
|
||
<dd>100</dd>
|
||
</div>
|
||
<div>
|
||
<dt>…123190</dt>
|
||
<dd>Divide</dd>
|
||
</div>
|
||
</dl>
|
||
</div>
|
||
<div class="expert-thought" data-step-note="3">
|
||
<p class="thought-label">03 · What is the rule?</p>
|
||
<p>
|
||
“This path multiplies by the other input. So
|
||
<strong>10% means 10% of 200</strong> after +.”
|
||
</p>
|
||
<p class="expert-task">
|
||
Name the operands and check both operator paths.
|
||
</p>
|
||
<div class="expert-rule">
|
||
<span>200 × 10 / 100</span>
|
||
<strong>20</strong>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<img
|
||
class="expert-illustration"
|
||
src="assets/figures/analyst-thinking.svg"
|
||
alt=""
|
||
width="160"
|
||
height="120"
|
||
/>
|
||
<p class="expert-caption">Illustrative expert reasoning</p>
|
||
</aside>
|
||
</div>
|
||
<p class="manual-work-summary">
|
||
<strong
|
||
>You decode the instructions, follow the calls and reconstruct
|
||
the calculation.</strong
|
||
>
|
||
</p>
|
||
</div>
|
||
<div class="agent-investigation" id="ask-your-agent">
|
||
<p class="comparison-label">
|
||
With REA · You ask
|
||
<strong class="prose-highlight">your agent</strong>
|
||
</p>
|
||
<h3 class="agent-one-prompt">One prompt.</h3>
|
||
<p class="agent-intro">
|
||
Ask your agent <strong>in plain English.</strong>
|
||
</p>
|
||
<div class="agent-terminal home-analysis-terminal">
|
||
<div class="terminal-header">
|
||
<span class="terminal-title"
|
||
><span class="terminal-dots" aria-hidden="true"
|
||
><i></i><i></i><i></i></span
|
||
>Example prompt · Calculator</span
|
||
>
|
||
<button
|
||
class="copy-button"
|
||
type="button"
|
||
data-copy="home-analysis-prompt"
|
||
aria-label="Copy Calculator percentage question"
|
||
>
|
||
Copy
|
||
</button>
|
||
</div>
|
||
<p class="terminal-prompt">
|
||
<span class="prompt-symbol" aria-hidden="true">›</span
|
||
><span id="home-analysis-prompt"
|
||
>Use REA to inspect Windows Calculator. Why does
|
||
<span translate="no">200 + 10%</span> give 220?</span
|
||
><span class="terminal-cursor" aria-hidden="true"></span>
|
||
</p>
|
||
<div class="agent-reply">
|
||
<p class="reply-label">
|
||
Example answer · based on the findings
|
||
</p>
|
||
<p>
|
||
After +, the % button takes
|
||
<strong>a percentage of the first number.</strong>
|
||
</p>
|
||
<div class="agent-percent-rule">
|
||
<code>10% of 200 = 20</code><span aria-hidden="true">↓</span
|
||
><strong>200 + 20 = 220</strong>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<dl class="agent-evidence-roles">
|
||
<div>
|
||
<dt>REA supplies</dt>
|
||
<dd>
|
||
The handler’s instructions, decompiled code and calls.
|
||
</dd>
|
||
</div>
|
||
<div>
|
||
<dt>Your agent explains</dt>
|
||
<dd>
|
||
Which branch applies, what it calculates and how to rebuild
|
||
it.
|
||
</dd>
|
||
</div>
|
||
</dl>
|
||
</div>
|
||
<figcaption>
|
||
Selected assembly from the installed Calculator DLL. The thoughts
|
||
and reply illustrate the findings.
|
||
<a href="#calculator">Continue with the Calculator example ↓</a>
|
||
</figcaption>
|
||
</figure>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section" id="dinosaur">
|
||
<div class="container">
|
||
<p class="home-examples-intro">
|
||
<strong>Let's try two examples.</strong>
|
||
Change a game's speed, then return to Calculator and rebuild its %
|
||
button.
|
||
</p>
|
||
<div class="section-heading">
|
||
<p class="eyebrow">Example 01 · Chrome’s dinosaur game</p>
|
||
<h2>Why does the dinosaur get faster?</h2>
|
||
</div>
|
||
<dl class="case-brief">
|
||
<div>
|
||
<dt>Goal</dt>
|
||
<dd>
|
||
Rebuild the game with
|
||
<mark class="prose-highlight">adjustable speed.</mark>
|
||
</dd>
|
||
</div>
|
||
<div>
|
||
<dt>Why reverse engineer it?</dt>
|
||
<dd>
|
||
To reproduce its acceleration, we need
|
||
<strong>the rule in the running game</strong>: how fast it
|
||
starts, how much it increases and when it stops.
|
||
</dd>
|
||
</div>
|
||
</dl>
|
||
<div class="home-example-grid dino-example-grid">
|
||
<figure class="dino-demo" data-dino-demo>
|
||
<p class="figure-title">Play the reconstruction</p>
|
||
<div class="dino-stage">
|
||
<svg
|
||
class="dino-fallback"
|
||
viewBox="0 0 600 180"
|
||
role="img"
|
||
aria-label="A small dinosaur running toward a cactus. Recovered speed: starts at 6, increases by 0.001 per update while below 13."
|
||
>
|
||
<path
|
||
d="M0 150H600 M55 113v-30h17V65h27v24H85v17H72v16H62v13h-7v-22m-5-8v-8h-8v-9h-6v22h19m14 15v15h8v-7h-4v-8 M420 150v-48h10v48m-10-15h-12v-22h7v15h5m10-4h12v-22h-7v15h-5"
|
||
fill="currentColor"
|
||
/>
|
||
<text
|
||
x="300"
|
||
y="65"
|
||
text-anchor="middle"
|
||
fill="currentColor"
|
||
font-size="18"
|
||
>
|
||
6 → 10 → 13
|
||
</text>
|
||
</svg>
|
||
<canvas
|
||
width="600"
|
||
height="180"
|
||
tabindex="0"
|
||
aria-label="Dinosaur mini-game. Use the Jump button or press Space while the game is focused."
|
||
hidden
|
||
></canvas>
|
||
</div>
|
||
<div class="dino-controls" hidden>
|
||
<div class="dino-buttons">
|
||
<button class="button" type="button" data-dino-start>
|
||
Play
|
||
</button>
|
||
<button type="button" data-dino-jump>Jump ↑</button>
|
||
<button type="button" data-dino-reset>Restart</button>
|
||
</div>
|
||
<label class="dino-speed-label"
|
||
>Speed <output data-dino-speed>6.0</output
|
||
><input
|
||
type="range"
|
||
min="2"
|
||
max="18"
|
||
step="0.1"
|
||
value="6"
|
||
data-dino-slider
|
||
/></label>
|
||
<label class="dino-auto-label"
|
||
><input type="checkbox" data-dino-auto checked /> Use the
|
||
recovered acceleration rule</label
|
||
>
|
||
</div>
|
||
<p class="dino-status" data-dino-status role="status">
|
||
Original rule: start at 6, then increase toward 13.
|
||
</p>
|
||
<figcaption>
|
||
Move the slider to set your own speed. Space or Jump clears a
|
||
cactus.
|
||
</figcaption>
|
||
<noscript
|
||
><p class="caption">
|
||
Enable JavaScript to play the reconstruction. The code and
|
||
explanation above remain readable.
|
||
</p></noscript
|
||
>
|
||
</figure>
|
||
<div>
|
||
<div class="rea-finding">
|
||
<p class="finding-label">REA returned</p>
|
||
<p>
|
||
<strong>The script actually running in the page.</strong> The
|
||
agent reads its update function and speed settings, then uses
|
||
that rule in a new game.
|
||
</p>
|
||
</div>
|
||
<div class="agent-terminal home-analysis-terminal">
|
||
<div class="terminal-header">
|
||
<span class="terminal-title"
|
||
><span class="terminal-dots" aria-hidden="true"
|
||
><i></i><i></i><i></i></span
|
||
>Example prompt · Dinosaur game</span
|
||
>
|
||
<button
|
||
class="copy-button"
|
||
type="button"
|
||
data-copy="dino-analysis-prompt"
|
||
aria-label="Copy dinosaur analysis prompt"
|
||
>
|
||
Copy
|
||
</button>
|
||
</div>
|
||
<p class="terminal-prompt">
|
||
<span class="prompt-symbol" aria-hidden="true">›</span
|
||
><span id="dino-analysis-prompt"
|
||
>Use REA to inspect this dinosaur game. Why does it get
|
||
faster? Show the speed rule, then build a small version with
|
||
an adjustable speed.</span
|
||
><span class="terminal-cursor" aria-hidden="true"></span>
|
||
</p>
|
||
</div>
|
||
<p class="caption">
|
||
Inspected target:
|
||
<a href="https://wayou.github.io/t-rex-runner/"
|
||
>wayou’s Chromium-derived browser edition</a
|
||
>.
|
||
</p>
|
||
<div class="code-block">
|
||
<div class="code-header">
|
||
<span
|
||
>REA · loaded <span translate="no">index.js</span> ·
|
||
selected lines</span
|
||
>
|
||
</div>
|
||
<pre><code>if (this.currentSpeed < this.config.MAX_SPEED) {
|
||
<span class="code-key">this.currentSpeed += this.config.ACCELERATION;</span>
|
||
}</code></pre>
|
||
</div>
|
||
<p class="dino-rule">
|
||
<strong>Start at 6.</strong> Add <strong>0.001</strong> each
|
||
update without a collision, while speed is below
|
||
<strong>13</strong>.
|
||
</p>
|
||
<a class="text-link" href="examples/dino-lab/"
|
||
>Open the speed lab →</a
|
||
>
|
||
</div>
|
||
</div>
|
||
<figure class="workflow-figure dino-loop">
|
||
<p class="figure-title">What each part does</p>
|
||
<ol class="flow-steps">
|
||
<li>
|
||
<span class="flow-label">01 · REA</span
|
||
><span class="flow-node">Read the running game’s script</span
|
||
><span class="flow-note"
|
||
>Return its actual code and settings to the agent.</span
|
||
>
|
||
</li>
|
||
<li>
|
||
<span class="flow-label">02 · Your agent</span
|
||
><span class="flow-node">Rebuild the rule, add a control</span
|
||
><span class="flow-note"
|
||
>Use the recovered acceleration in a small game with a speed
|
||
slider.</span
|
||
>
|
||
</li>
|
||
<li>
|
||
<span class="flow-label">03 · You</span
|
||
><span class="flow-node">Change the speed and play</span
|
||
><span class="flow-note"
|
||
>Try the original acceleration, then choose your own
|
||
pace.</span
|
||
>
|
||
</li>
|
||
</ol>
|
||
</figure>
|
||
<details class="home-evidence-details">
|
||
<summary>
|
||
See the script, checks and how to try the analysis
|
||
</summary>
|
||
<p>
|
||
REA inspected the HTTP browser edition through a local debugging
|
||
connection and returned the loaded <code>index.js</code>,
|
||
including its source and digest.
|
||
</p>
|
||
<div class="code-block">
|
||
<div class="code-header">
|
||
<span>Selected settings from the inspected script</span>
|
||
</div>
|
||
<pre><code>ACCELERATION: 0.001,
|
||
MAX_SPEED: 13,
|
||
SPEED: 6</code></pre>
|
||
</div>
|
||
<p>
|
||
We called the original game’s update function in a controlled
|
||
browser check, with obstacles and automatic scheduling disabled.
|
||
After 4,000 updates, speed was 10.0; after 10,000, it was 13.0,
|
||
rounded to one decimal.
|
||
</p>
|
||
<p>
|
||
The new mini-game keeps that speed rule. Its drawing, jumping and
|
||
collision code are a small teaching implementation.
|
||
<a href="examples/dino-lab/">Open the lab</a> to see the new code
|
||
and run the same speed check.
|
||
</p>
|
||
<p>
|
||
To inspect the target yourself, follow the
|
||
<a href="guides/browser/#prepare">browser connection steps</a>
|
||
using
|
||
<a href="https://wayou.github.io/t-rex-runner/"
|
||
>the dinosaur page</a
|
||
>. Give your agent that page URL and your local debugging
|
||
endpoint, then copy the prompt above.
|
||
</p>
|
||
<p class="caption">
|
||
<a
|
||
href="https://github.com/wayou/t-rex-runner/blob/5455bfa408ec6b707c7300ff194b7390733a766d/index.js#L565-L571"
|
||
>Inspected speed code</a
|
||
>
|
||
·
|
||
<a href="assets/licenses/dinosaur.txt"
|
||
>Chromium Authors · BSD license</a
|
||
>
|
||
</p>
|
||
</details>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section" id="calculator">
|
||
<div class="container">
|
||
<div class="section-heading">
|
||
<p class="eyebrow">Example 02 · Windows Calculator</p>
|
||
<h2>Rebuild Calculator’s % button.</h2>
|
||
<p class="lede">
|
||
We saw why
|
||
<strong><span translate="no">200 + 10%</span> gives 220.</strong>
|
||
Now let’s recover the rules for both + and ×, and try them.
|
||
</p>
|
||
</div>
|
||
<dl class="case-brief">
|
||
<div>
|
||
<dt>Goal</dt>
|
||
<dd>
|
||
Build a small calculator that handles
|
||
<mark class="prose-highlight">both + and × correctly.</mark>
|
||
</dd>
|
||
</div>
|
||
<div>
|
||
<dt>Why reverse engineer it?</dt>
|
||
<dd>
|
||
The same button uses
|
||
<strong>different rules after + and ×.</strong> We inspect the
|
||
installed app to find which number the percentage is applied to.
|
||
</dd>
|
||
</div>
|
||
</dl>
|
||
<div class="home-example-grid">
|
||
<figure class="percent-figure" data-percent-demo>
|
||
<p class="figure-title">Try the calculation</p>
|
||
<div
|
||
class="percent-operation"
|
||
role="group"
|
||
aria-label="Choose the calculation"
|
||
hidden
|
||
>
|
||
<button
|
||
type="button"
|
||
data-percent-operation="add"
|
||
aria-pressed="true"
|
||
>
|
||
<span translate="no">200 + 10%</span>
|
||
</button>
|
||
<button
|
||
type="button"
|
||
data-percent-operation="multiply"
|
||
aria-pressed="false"
|
||
>
|
||
<span translate="no">200 × 10%</span>
|
||
</button>
|
||
</div>
|
||
<div class="percent-display">
|
||
<span class="percent-expression" data-percent-expression
|
||
>200 +</span
|
||
>
|
||
<strong data-percent-display>20</strong>
|
||
</div>
|
||
<div class="percent-controls" hidden>
|
||
<button
|
||
type="button"
|
||
class="percent-key"
|
||
data-percent-key="percent"
|
||
>
|
||
%
|
||
</button>
|
||
<button
|
||
type="button"
|
||
class="percent-key"
|
||
data-percent-key="equals"
|
||
disabled
|
||
>
|
||
=
|
||
</button>
|
||
<button
|
||
type="button"
|
||
class="percent-reset"
|
||
data-percent-key="reset"
|
||
>
|
||
Reset
|
||
</button>
|
||
</div>
|
||
<p class="percent-status" data-percent-status role="status">
|
||
10% of 200 = 20. Then 200 + 20 = 220.
|
||
</p>
|
||
<figcaption>
|
||
Interactive illustration of the inspected percentage rule.
|
||
</figcaption>
|
||
</figure>
|
||
<div class="percent-explanation">
|
||
<div class="rea-finding">
|
||
<p class="finding-label">REA returned</p>
|
||
<p>
|
||
<strong
|
||
>One branch divides by 100. The other also multiplies by the
|
||
first number.</strong
|
||
>
|
||
The agent uses both to recreate the % button.
|
||
</p>
|
||
</div>
|
||
<p>
|
||
For this example, <code>previous = 200</code> and
|
||
<code>current = 10</code>.
|
||
</p>
|
||
<div class="agent-terminal">
|
||
<div class="terminal-header">
|
||
<span class="terminal-title"
|
||
><span class="terminal-dots" aria-hidden="true"
|
||
><i></i><i></i><i></i></span
|
||
>Example prompt · Rebuild the % button</span
|
||
>
|
||
<button
|
||
class="copy-button"
|
||
type="button"
|
||
data-copy="calculator-analysis-prompt"
|
||
aria-label="Copy Calculator analysis prompt"
|
||
>
|
||
Copy
|
||
</button>
|
||
</div>
|
||
<p class="terminal-prompt">
|
||
<span class="prompt-symbol" aria-hidden="true">›</span
|
||
><span id="calculator-analysis-prompt"
|
||
>Use REA to inspect Windows Calculator’s % button. Recover
|
||
the rules after + and ×, then build a small calculator that
|
||
uses both.</span
|
||
><span class="terminal-cursor" aria-hidden="true"></span>
|
||
</p>
|
||
</div>
|
||
<div class="code-block">
|
||
<div class="code-header">
|
||
<span>Readable summary of the % handler</span>
|
||
</div>
|
||
<pre><code>if (operation == multiply || operation == divide) {
|
||
percent = current / 100;
|
||
} else {
|
||
<span class="code-key">percent = current * previous / 100;</span>
|
||
}</code></pre>
|
||
</div>
|
||
<dl class="percent-rules">
|
||
<div>
|
||
<dt>With +</dt>
|
||
<dd>
|
||
<strong>Take 10% of the first number.</strong
|
||
><code>10% of 200 = 20 → 200 + 20 = 220</code>
|
||
</dd>
|
||
</div>
|
||
<div>
|
||
<dt>With ×</dt>
|
||
<dd>
|
||
<strong>Turn 10% into 0.1.</strong
|
||
><code>200 × 0.1 = 20</code>
|
||
</dd>
|
||
</div>
|
||
</dl>
|
||
</div>
|
||
</div>
|
||
<figure class="workflow-figure calculator-trace">
|
||
<p class="figure-title">
|
||
From the installed app to a working % button
|
||
</p>
|
||
<ol class="flow-steps">
|
||
<li>
|
||
<span class="flow-label"
|
||
>01 · REA reads <span translate="no">calc.exe</span></span
|
||
><span class="flow-node">It launches the Calculator app</span
|
||
><span class="flow-note"
|
||
>The code opens <code>ms-calculator:</code>. The agent then
|
||
selects the installed app’s library.</span
|
||
>
|
||
</li>
|
||
<li>
|
||
<span class="flow-label">02 · REA reads the library</span
|
||
><span class="flow-node">Return the % handler’s code</span
|
||
><span class="flow-note"
|
||
>The function checks the operator and uses the constant
|
||
<code>100</code>.</span
|
||
>
|
||
</li>
|
||
<li>
|
||
<span class="flow-label">03 · Your agent interprets it</span
|
||
><span class="flow-node">Explain and reproduce the rules</span
|
||
><span class="flow-note"
|
||
>Crosscheck the branch with Microsoft’s source, then try + and
|
||
× above.</span
|
||
>
|
||
</li>
|
||
</ol>
|
||
</figure>
|
||
<details class="home-evidence-details">
|
||
<summary>See the real code and how the answer was checked</summary>
|
||
|
||
<div class="code-comparison">
|
||
<div class="code-block">
|
||
<div class="code-header">
|
||
<span>REA · selected original instructions</span>
|
||
</div>
|
||
<pre><code>0x180124945: MOV EAX, dword ptr [R13 + 0x18]
|
||
0x180124949: <span class="code-key">CMP EAX, 0x5c</span>
|
||
0x18012494c: JZ 0x180124aba
|
||
0x180124952: <span class="code-key">CMP EAX, 0x5b</span>
|
||
0x180124955: JZ 0x180124aba
|
||
0x18012495b: <span class="code-key">MOV EDX, 0x64</span></code></pre>
|
||
</div>
|
||
<div class="code-block">
|
||
<div class="code-header">
|
||
<span>Operator IDs · Microsoft’s source</span>
|
||
</div>
|
||
<pre><code>#define IDC_MUL 92 // 0x5c
|
||
#define IDC_DIV 91 // 0x5b
|
||
#define IDC_PERCENT 118 // 0x76
|
||
|
||
0x64 = 100</code></pre>
|
||
</div>
|
||
</div>
|
||
|
||
<p class="caption">
|
||
Inspected with REA 4.1.0: Windows Calculator 11.2508.4.0, x64. The
|
||
readable summary uses names from Microsoft’s public source to
|
||
explain the recovered branch.
|
||
</p>
|
||
<p class="caption">
|
||
<a
|
||
href="https://github.com/microsoft/calculator/blob/d125246a4e19842ce1332e6c7839cf0e110027d8/src/CalcManager/CEngine/scifunc.cpp#L98-L111"
|
||
>Percentage implementation</a
|
||
>
|
||
·
|
||
<a
|
||
href="https://github.com/microsoft/calculator/blob/d125246a4e19842ce1332e6c7839cf0e110027d8/src/CalculatorUnitTests/CalculatorManagerTest.cpp#L350-L370"
|
||
>Microsoft’s test cases</a
|
||
>
|
||
· <a href="guides/native/">Native setup guide</a>
|
||
</p>
|
||
</details>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section" id="try-rea">
|
||
<div class="container start-row">
|
||
<div>
|
||
<p class="eyebrow">Your first investigation</p>
|
||
<h2>Try REA on a small app.</h2>
|
||
<p>
|
||
Download our Notes example, trace its CSV export, and check one
|
||
changed input.
|
||
</p>
|
||
</div>
|
||
<a class="button" href="first-investigation/"
|
||
>Try the guided example</a
|
||
>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section" id="analyze">
|
||
<div class="container">
|
||
<div class="section-heading">
|
||
<h2>Want to go deeper?</h2>
|
||
<p>
|
||
Tell your agent what you want to understand or build. With REA,
|
||
you can work together on anything from
|
||
<strong>cloning this website</strong> to
|
||
<strong>reconstructing a game from its executable.</strong>
|
||
</p>
|
||
</div>
|
||
<div class="code-comparison home-project-prompts">
|
||
<div>
|
||
<div class="agent-terminal">
|
||
<div class="terminal-header">
|
||
<span class="terminal-title">
|
||
<span class="terminal-dots" aria-hidden="true"
|
||
><i></i><i></i><i></i></span
|
||
>Example prompt · Website
|
||
</span>
|
||
<button
|
||
class="copy-button"
|
||
type="button"
|
||
data-copy="website-project-prompt"
|
||
aria-label="Copy website project prompt"
|
||
>
|
||
Copy
|
||
</button>
|
||
</div>
|
||
<p class="terminal-prompt">
|
||
<span class="prompt-symbol" aria-hidden="true">›</span
|
||
><span id="website-project-prompt"
|
||
>Use REA to inspect
|
||
<span translate="no">https://rea.tools/</span>. Clone this
|
||
website for me.</span
|
||
><span class="terminal-cursor" aria-hidden="true"></span>
|
||
</p>
|
||
</div>
|
||
<p class="caption">Yes, this one.</p>
|
||
</div>
|
||
<div>
|
||
<div class="agent-terminal">
|
||
<div class="terminal-header">
|
||
<span class="terminal-title">
|
||
<span class="terminal-dots" aria-hidden="true"
|
||
><i></i><i></i><i></i></span
|
||
>Example prompt · Game reconstruction
|
||
</span>
|
||
<button
|
||
class="copy-button"
|
||
type="button"
|
||
data-copy="game-project-prompt"
|
||
aria-label="Copy game reconstruction prompt"
|
||
>
|
||
Copy
|
||
</button>
|
||
</div>
|
||
<p class="terminal-prompt">
|
||
<span class="prompt-symbol" aria-hidden="true">›</span
|
||
><span id="game-project-prompt"
|
||
>Use REA to reconstruct this game from its executable.
|
||
Recover the gameplay logic in C and test it against the
|
||
original.</span
|
||
><span class="terminal-cursor" aria-hidden="true"></span>
|
||
</p>
|
||
</div>
|
||
<p class="caption">
|
||
<a href="showcase/dx-ball/">See the DX-Ball case study →</a>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<p class="caption">
|
||
For setup and analysis steps, choose your target:
|
||
</p>
|
||
<div class="workflows" id="analysis-guides">
|
||
<div>
|
||
<h3>Native binaries</h3>
|
||
<p>
|
||
Inspect functions, strings, references and call relationships in
|
||
executables and libraries.
|
||
</p>
|
||
<a href="guides/native/">Native analysis guide</a>
|
||
</div>
|
||
<div>
|
||
<h3>JavaScript & Electron</h3>
|
||
<p>
|
||
Map modules, routes, IPC and native dependencies from an
|
||
application folder or ASAR archive.
|
||
</p>
|
||
<a href="guides/javascript/">Application workflows</a>
|
||
</div>
|
||
<div>
|
||
<h3>Browser & runtime activity</h3>
|
||
<p>
|
||
Capture selected browser or process activity, then compare the
|
||
results across runs.
|
||
</p>
|
||
<a href="guides/browser/">Browser observation guide</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<section class="section" id="questions">
|
||
<div class="container">
|
||
<h2>Any questions?</h2>
|
||
<p>
|
||
<a href="faq/">Read the FAQ</a>,
|
||
<a href="https://discord.gg/GkcryMnJDM">chat with us on Discord</a>,
|
||
or
|
||
<a href="https://github.com/morluto/rea/issues/new/choose"
|
||
>open a GitHub issue</a
|
||
>
|
||
for bugs and feature requests.
|
||
</p>
|
||
</div>
|
||
</section>
|
||
<section class="section" id="community">
|
||
<div class="container">
|
||
<h2>Join the community</h2>
|
||
<p>
|
||
Share investigations and get help from other REA users on Discord.
|
||
Follow REA on X for project updates.
|
||
</p>
|
||
<div class="actions">
|
||
<a class="button" href="https://discord.gg/GkcryMnJDM"
|
||
>Join the community</a
|
||
>
|
||
<a class="button secondary" href="https://x.com/reatools"
|
||
>Follow @reatools on X</a
|
||
>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</main>
|
||
<!-- website:footer:start -->
|
||
<!-- prettier-ignore -->
|
||
<footer class="site-footer">
|
||
<div class="container footer-inner">
|
||
<p>REA · Reverse Engineer Anything</p>
|
||
<div class="footer-links">
|
||
<a href="https://github.com/morluto/rea">Source</a
|
||
><a href="https://github.com/morluto/rea/blob/main/LICENSE">MIT license</a
|
||
><a href="https://discord.gg/GkcryMnJDM">Join the community</a
|
||
><a href="https://x.com/reatools">Follow us on X</a>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
<p class="sr-only" id="copy-status" role="status" aria-live="polite"></p>
|
||
<a class="back-to-top" href="#top" aria-label="Back to top">
|
||
<span aria-hidden="true">↑</span> Top
|
||
</a>
|
||
<!-- website:footer:end -->
|
||
</body>
|
||
</html>
|