ראיתם תכונה שאהבתם בתוכנה אחרת? סוכן AI יראה איך היא בנויה ויוסיף אותה לתוכנה שלכם

REA (ראשי תיבות של Reverse Engineer Anything) הוא כלי חינמי בקוד פתוח שמחבר סוכן AI, למשל קלוד קוד (Claude Code), לקבצים של אפליקציה. במקום לנחש איך תכונה עובדת, הסוכן פותח את הקבצים ומראה באיזה קובץ ובאיזו שורה מצא כל ממצא. אחר כך הוא יכול לבנות תכונה דומה בתוכנה שלכם. הנדסה לאחור (Reverse Engineering) פירושה לפרק מוצר מוגמר כדי להבין איך הוא בנוי, בלי שיש לך את תוכניות הבנייה שלו, ומותר להשתמש ב-REA רק על מה שמותר לך לבדוק.

REA הוא כלי חינמי שנותן לסוכן AI לפרק איך תכונה בנויה בתוכנה, ולבנות אותה אצלכם, בלי לשלם על עוד מנוי. זה עובד רק על מה שמותר לכם לבדוק, כפי שמפורט בפרק הבא.

דוגמה יומיומית: ראיתם באפליקציה כפתור ״מצב כהה״ ורציתם אותו גם ברשימת הלידים שלכם. בעמוד הזה תראו מה REA הראה על הכפתור באפליקציית דוגמה קטנה בדוגמת המדריך הרשמי של Electron, איך הסוכן בנה אותו באפליקציית לידים קטנה, ו-REA אישר שהתכונה נוספה: ערוץ הודעות אחד בתוכנה לפני, שניים אחרי.

למה אני כותב על זה: ראיתי שאייפון מצלם מצוין, ורציתי שגם הטלפון השיאומי שלי יצלם חזק, אז בניתי אפליקציית מצלמה בשם SwitchCam. לא פירקתי את מצלמת האייפון או את המצלמה של גוגל: האיכות שלהן באה מחומרה ייעודית לעיבוד תמונה, מצלמת האייפון היא תוכנה של iOS, והרישיונות שלהן אוסרים. השתמשתי בטכניקות מתועדות. זה בדיוק הקו של הפרק הבא: מה מותר לבדוק ומה לא.

הכלי ברישיון MIT, עם מעל 360 אלף כוכבים בגיטהאב (כוכב הוא סימנייה, לא מספר משתמשים) וגרסה 6.7.0 של חבילת rea-agents ב-npm. המספרים נכונים ל-23.10.2026 ומשתנים מהר. כמה זה עולה: REA עצמו חינם. מה שעולה כסף הוא הסוכן והמודל שמפעילים אותו, למשל מנוי לקלוד קוד, וכלים מסחריים לניתוח קבצים בינאריים כמו IDA Pro ו-Hopper.

מה מותר ומה אסור?

הגבולות נקבעים בהצהרה הרשמית של הפרויקט, קובץ DISCLAIMER.md. לפיה REA נועד לניתוח חוקי: מחקר אבטחה, ניתוח תוכנות זדוניות וחקירת אירועי אבטחה, תחרויות CTF (תרגילי אבטחה) ולימוד, יכולת פעולה הדדית (לגרום לשתי תוכנות לעבוד יחד), שימור של תוכנה ישנה, ואיתור תקלות ובדיקה של תוכנה שבבעלותך או שיש לך הרשאה לבדוק.

הפרויקט לא תומך ולא יעזור ב: עקיפת הגנות העתקה (DRM), בדיקות רישיון או מערכות נגד רמאות במשחקים; צ׳יטים למשחקים והתערבות בשירותים מקוונים; עקיפת הזדהות, הגנה מפני בוטים או בקרת גישה במערכת שלא קיבלת הרשאה לבדוק; העתקת תוכנה קניינית או שחזור של קוד ונכסים מוגנים שלה; עקיפת מדיניות השימוש של ספקי מודלי AI, או מכירה ושיתוף של חשבונות AI.

ארבעה דברים לזכור. אחד, האחריות היא שלך: לקבל הרשאה, לעמוד בחוק וברישיון של התוכנה שבודקים, וההצהרה מזכירה שהנדסה לאחור עלולה להיות מוגבלת בחוק של המדינה שלך או ברישיון של התוכנה. שניים, תוכנה שזמינה לכולם, או קובץ שנמצא אצלך במחשב, אינם בעצמם היתר לכל פעולה. שלושה, קבלת תוצאות ניתוח לא נותנת לך זכויות בתוכנה המקורית. ארבעה, זה סיכום ולא ייעוץ משפטי, וכשיש ספק כדאי להתייעץ עם עורך דין.

מה זה אומר על ״ראיתי תכונה אצל מישהו ואני רוצה אותה״: ללמוד איך תכונה בנויה מותר בתוכנה שלכם, בתוכנה בקוד פתוח שהרישיון שלה מתיר, או בתוכנה שקיבלתם הרשאה לבדוק. שכפול של מוצר של אחרים, או של הקוד והנכסים המוגנים שלו, הפרויקט לא תומך בו. לכן הדוגמה כאן נעשית על אפליקציית דוגמה קטנה שכתבתי בעצמי ועל אפליקציה שלי.

איך מוסיפים מצב כהה לאפליקציה? הדוגמה המרכזית

יש לי אפליקציית לידים קטנה, בנויה ב-Electron (מסגרת שבה בונים אפליקציות שולחן עבודה בטכנולוגיות של אתרים). היא מציגה רשימה של לידים, כאן שלושה לידים לדוגמה, והיא תמיד בהירה. רציתי לה מצב כהה (Dark Mode): צבעים כהים שנוחים לעיניים בערב. כדי לראות איך כפתור כזה בנוי, יש לי אפליקציית דוגמה קטנה בדוגמת המדריך הרשמי של Electron למצב כהה. היא לא אפליקציה של REA ולא מוצר של מישהו אחר: כתבתי אותה בעצמי, והיא כוללת שישה קבצים קטנים. השאלה: איך הכפתור בנוי, ואפשר להוסיף אותו אצלי?

חלק 1: מה REA הראה על כפתור המצב הכהה

REA מצא באפליקציית הדוגמה שני ערוצי הודעות, dark-mode:toggle ו-dark-mode:system (השני מחזיר להגדרת המערכת). נסתכל על הראשון. הכפתור עובר שלושה חלקים, כפי שהם בקוד. הדף קורא לפונקציה, הגשר (preload) שולח הודעה בערוץ הזה לחלק הראשי של האפליקציה, והחלק הראשי מחליף את ערכת הנושא של האפליקציה.

renderer.js, הדף (קטע):

document.querySelector("#toggle-dark-mode").addEventListener("click", async () => {
  const isDark = await window.darkMode.toggle();
  document.querySelector("#theme-source").textContent = isDark ? "כהה" : "בהיר";
});

preload.js, הגשר:

const { contextBridge, ipcRenderer } = require("electron");

contextBridge.exposeInMainWorld("darkMode", {
  toggle: () => ipcRenderer.invoke("dark-mode:toggle"),
  system: () => ipcRenderer.invoke("dark-mode:system"),
});

main.js, החלק הראשי (שורות 4 עד 7):

ipcMain.handle("dark-mode:toggle", () => {
  nativeTheme.themeSource = nativeTheme.shouldUseDarkColors ? "light" : "dark";
  return nativeTheme.shouldUseDarkColors;
});

ערוץ הודעות כזה בין חלקי האפליקציה נקרא IPC. REA מצא את שתי ההודעות בעצמו, ולכל אחת את השולח ואת המטפל שמקבל אותה. המטפל של dark-mode:toggle נמצא ב-main.js בשורות 4 עד 7, ברמת ודאות exact (מדויק).

מה REA הראה ומה לא: REA הראה את ההודעה ואת המטפל שלה. את הצבעים הוא לא מציג. אותם קראנו בעצמנו בקובץ styles.css, בכלל @media (prefers-color-scheme: dark), שמוצג כאן:

:root {
  color-scheme: light dark;
}

body {
  font-family: "Segoe UI", Arial, sans-serif;
  padding: 24px;
}

@media (prefers-color-scheme: dark) {
  body {
    background: #0f1426;
    color: #e6ecff;
  }
}

חלק 2: הסוכן בונה את אותה תכונה באפליקציית הלידים

הסוכן קרא את מה ש-REA הראה על אפליקציית הדוגמה ובנה את אותו מבנה באפליקציה שלי: כפתור, פונקציה בגשר, ערוץ חדש בשם theme:toggle, מטפל בחלק הראשי וכללי צבע כהים ב-CSS. חמישה קבצים קיימים השתנו, ולא נוסף אף קובץ חדש. אלה השינויים, לפני ואחרי. הערה על הניסוי: את הניתוח הרצתי בפקודה (שלב 3), והסוכן קרא את התוצאה שלו. חיבור REA לסוכן דרך MCP (שלב 5) לא הופעל בניסוי הזה.

הגשר, preload.js, לפני:

contextBridge.exposeInMainWorld("leads", {
  list: () => ipcRenderer.invoke("leads:list"),
});

הגשר, preload.js, אחרי:

contextBridge.exposeInMainWorld("leads", {
  list: () => ipcRenderer.invoke("leads:list"),
  toggleTheme: () => ipcRenderer.invoke("theme:toggle"),
});

הכפתור, index.html, תג חדש בראש הקובץ (בתוך head). התג color-scheme אומר לדפדפן שהדף יודע להיות גם בהיר וגם כהה:

    <meta name="color-scheme" content="light dark" />

הכפתור, index.html, כפתור בכותרת (בתוך body):

    <header>
      <h1>הלידים שלי</h1>
      <button id="theme" type="button">מצב כהה</button>
    </header>

הלחיצה, renderer.js, קטע חדש:

document.querySelector("#theme").addEventListener("click", async () => {
  const isDark = await window.leads.toggleTheme();
  document.querySelector("#theme").textContent = isDark ? "מצב בהיר" : "מצב כהה";
});

החלק הראשי, main.js, שורת ייבוא שהשתנתה (לפני ואחרי) ומטפל חדש בשורות 12 עד 15:

const { app, BrowserWindow, ipcMain } = require("electron");
const { app, BrowserWindow, ipcMain, nativeTheme } = require("electron");
ipcMain.handle("theme:toggle", () => {
  nativeTheme.themeSource = nativeTheme.shouldUseDarkColors ? "light" : "dark";
  return nativeTheme.shouldUseDarkColors;
});

הצבעים, styles.css, נוסף בסוף הקובץ וכל מה שהיה קודם נשאר:

@media (prefers-color-scheme: dark) {
  body {
    background: #0f1426;
    color: #e6ecff;
  }

  li {
    background: #182040;
    border-color: #2a3560;
  }

  .phone {
    color: #9db4ff;
  }

  .note {
    color: #8e9cc9;
  }

  button {
    background: #f4b942;
    color: #0f1426;
  }
}

חלק 3: הפתעה, ובדיקה

הפתעה: הכפתור לא צובע שום דבר. כל מה שהוא עושה הוא לבקש מהחלק הראשי להחליף את ערכת הנושא של האפליקציה (nativeTheme.themeSource, או "dark" או "light"). ההחלפה הופכת את התנאי prefers-color-scheme ב-CSS, והצבעים הכהים כבר חיכו שם בקובץ. בלי כלל ה-CSS הכפתור היה עובד, ושום דבר לא היה משתנה על המסך.

כדי לא להסתפק ב״נראה תקין״, נכתבה בדיקה קטנה (test_theme.js) שטוענת את main.js של אפליקציית הלידים, לוחצת על הכפתור שלוש פעמים ובודקת שהמצב מתחלף בכל פעם ושרשימת הלידים עדיין עובדת. התוצאה של node test_theme.js leads-after:

PASS theme:toggle handler exists
PASS first click turns dark mode on
PASS second click turns it off
PASS third click turns it on again
PASS leads:list still returns 3 leads

כדי שהבדיקה תוכל לרוץ בלי Electron (הוא לא מותקן אצלי), היא משתמשת בדמה קטנה של Electron שכתובה בתוך הבדיקה עצמה. לכן היא בודקת את ההיגיון של החלק הראשי, לא חלון אמיתי ולא צבעים על המסך. על האפליקציה לפני השינוי היא נכשלת כבר בבדיקה הראשונה, וזו המטרה. התוצאה של node test_theme.js leads-before:

FAIL theme:toggle handler exists
PASS leads:list still returns 3 leads

צילומי המסך בסרטון הם הדף של האפליקציה עצמה שהורץ ב-Chrome, כי Electron לא מותקן כאן.

חלק 4: REA מאמת שהתכונה נוספה

הרצתי את אותו ניתוח על האפליקציה לפני השינוי ואחריו. מספר הערוצים עלה מאחד לשניים:

מה REA מצאלפניאחרי
ערוצי IPC עם שם קבוע1 (leads:list)2 (leads:list ו-theme:toggle)
שליחות מהדף12
מטפלים בחלק הראשי12
הודעות שהותאמו לשולח ולמטפל12
הודעות לא חד-משמעיות00
פונקציות שנחשפות לדף12
פעולות IPC בסך הכל24

המטפל החדש נמצא בקובץ main.js, בשורות 12 עד 15. חשוב להבין מה REA מאשר ומה לא: הוא מאשר שהחיבור קיים, כלומר שהכפתור, הגשר והמטפל מדברים באותו ערוץ. את ההחלפה בין כהה לבהיר בודקת הבדיקה מהחלק הקודם, ואת הצבעים עצמם רואים בעיניים.

איך עושים את זה, שלב אחרי שלב?

שמונה שלבים, מהבדיקה הראשונה ועד אימות התכונה החדשה. שלבים 1 עד 4 לא דורשים סוכן בכלל, ושלבים 5 עד 8 הם החלק עם הסוכן.

שלב 1: בודקים שיש Node.js

פותחים PowerShell ומקלידים את הפקודה הבאה. מה אמורים לראות: מספר גרסה שמתחיל ב-v22.19 ומעלה, v24.11 ומעלה, או v26 ומעלה. אם הפקודה לא מוכרת או שהגרסה נמוכה יותר, מתקינים Node.js מהאתר הרשמי nodejs.org.

node --version

שלב 2: מכינים אפליקציית דוגמה שמותר לכם לנתח

לתרגול ראשון, יוצרים תיקייה בשם C:/apps/dark-example ושמים בה שישה קבצים קטנים. זו אפליקציית דוגמה קטנה בדוגמת המדריך הרשמי של Electron למצב כהה. היא לא אפליקציה של REA ולא מוצר של אחרים. הקבצים preload.js ו-styles.css מוצגים במלואם בדוגמה המרכזית. הנה ארבעת האחרים:

main.js:

const { app, BrowserWindow, ipcMain, nativeTheme } = require("electron");
const path = require("node:path");

ipcMain.handle("dark-mode:toggle", () => {
  nativeTheme.themeSource = nativeTheme.shouldUseDarkColors ? "light" : "dark";
  return nativeTheme.shouldUseDarkColors;
});

ipcMain.handle("dark-mode:system", () => {
  nativeTheme.themeSource = "system";
});

app.whenReady().then(() => {
  const window = new BrowserWindow({
    webPreferences: { preload: path.join(__dirname, "preload.js") },
  });
  window.loadFile("index.html");
});

renderer.js:

document.querySelector("#toggle-dark-mode").addEventListener("click", async () => {
  const isDark = await window.darkMode.toggle();
  document.querySelector("#theme-source").textContent = isDark ? "כהה" : "בהיר";
});

document.querySelector("#reset-to-system").addEventListener("click", async () => {
  await window.darkMode.system();
  document.querySelector("#theme-source").textContent = "מערכת";
});

index.html:

<!doctype html>
<html lang="he" dir="rtl">
  <head>
    <meta charset="utf-8" />
    <title>אפליקציית דוגמה: מצב כהה</title>
    <meta name="color-scheme" content="light dark" />
    <link rel="stylesheet" href="styles.css" />
    <script src="renderer.js" defer></script>
  </head>
  <body>
    <h1>אפליקציית דוגמה</h1>
    <p>ערכת הנושא הנוכחית: <strong id="theme-source">מערכת</strong></p>
    <button id="toggle-dark-mode" type="button">מצב כהה</button>
    <button id="reset-to-system" type="button">חזרה להגדרת המערכת</button>
  </body>
</html>

package.json:

{
  "name": "dark-mode-example",
  "version": "1.0.0",
  "private": true,
  "main": "main.js"
}

אפשר גם להשתמש בתיקייה של אפליקציה משלכם במקום. לא מנתחים תוכנה של אחרים בלי הרשאה. מה אמורים לראות: תיקייה עם הקבצים main.js, preload.js, renderer.js, index.html, styles.css ו-package.json. Electron לא צריך להיות מותקן.

שלב 3: מריצים את הניתוח

npx -y rea-agents@latest analyze-javascript-application C:/apps/dark-example --json | Out-File result.json -Encoding utf8

הפקודה עובדת ב-Windows בלי שום כלי נוסף. בלי החלק האחרון, אחרי הסימן |, התוצאה תודפס למסך. אצלי היא רצה בגרסה 6.7.0 של REA ועם Node.js 24.11.1. מה אמורים לראות: כמה שורות התקדמות (עם המילה rea_progress), ובסוף קובץ result.json חדש בתיקייה (בערך 350KB).

שלב 4: קוראים את התוצאה

(Get-Content result.json -Raw | ConvertFrom-Json).normalized_result.summary.ipc

אלה המספרים שקיבלתי על אפליקציית הדוגמה:

מה נבדקמה REA החזיר
חלונות דפדפן באפליקציה1
API שנחשף לדף1 (בשם darkMode), עם שתי פונקציות: toggle ו-system
פעולות IPC4: שתי שליחות מהדף ושני טיפולים בחלק הראשי
ערוצים עם שם קבוע2: dark-mode:toggle ו-dark-mode:system
הודעות שהותאמו לשולח ולמטפל2 מתוך 2
הודעות לא חד-משמעיות0
ערוצים עם שם דינמי0

המטפל של dark-mode:toggle נמצא בקובץ main.js, בשורות 4 עד 7. REA סימן אותו ברמת ודאות exact (מדויק), על בסיס קריאה של מבנה הקוד בלי להריץ אותו. המסלול שנרשם עובר דרך darkMode.toggle ועד ipcRenderer.invoke. הגבולות, בכנות: זו ראיה סטטית, כלומר מקריאת הקוד בלבד. REA מציין שהמסלול הוסק מהקוד ושתצפית בזמן ריצה יכולה לבדוק מה באמת מתבצע. ערוץ שהשם שלו מחושב בזמן ריצה עלול להישאר לא מפוענח, וממצא שחסר אינו הוכחה שהוא לא קיים.

שלב 5: מחברים סוכן

npx rea-agents setup

בוחרים את הסוכנים שרוצים לחבר (למשל קלוד קוד), קוראים את השינויים שההתקנה מציעה ומאשרים אותם. היא מוסיפה את שרת ה-MCP של REA (חיבור שנותן לסוכן את הכלים) ואת הוראות העבודה המתאימות, ומגבה קונפיגורציה קיימת. אחר כך מפעילים מחדש את הסוכן. מה אמורים לראות: רשימת שינויים מוצעים שמחכה לאישור שלכם, ואחרי ההפעלה מחדש הכלים של REA זמינים לסוכן.

שלב 6: מבקשים מהסוכן בשפה רגילה

פותחים את הסוכן בתיקייה של האפליקציה שלכם, נותנים לו את הנתיב של אפליקציית הדוגמה, ומדביקים: ״השתמש ב-REA כדי להבין איך כפתור המצב הכהה באפליקציית הדוגמה עובד, ובנה את אותה תכונה באפליקציה שלי שבתיקייה הזו. הצג לי מה שינית בכל קובץ.״ מה אמורים לראות: הסוכן מפעיל כלים של REA, מסביר את המסלול (כפתור, גשר, ערוץ, מטפל, החלפת ערכת הנושא) ורק אחר כך משנה קבצים ומציג מה שינה בכל אחד.

שלב 7: בודקים מה הסוכן שינה, ומריצים בדיקה

באפליקציית הלידים הסוכן שינה חמישה קבצים קיימים (main.js, preload.js, renderer.js, index.html, styles.css) ולא הוסיף אף קובץ חדש. פותחים כל קובץ וקוראים. מבקשים מהסוכן גם בדיקה קטנה לכפתור, ומריצים אותה. מה אמורים לראות: חמש שורות PASS, כמו בחלק 3 של הדוגמה המרכזית. אחר כך מפעילים את האפליקציה (לשם כך צריך להתקין Electron) ולוחצים על הכפתור, כדי לראות בעיניים את המצב הכהה. את החלק הזה השארנו לכם: אצלי Electron לא הותקן, ולכן האפליקציה עצמה לא הורצה.

node test_theme.js

שלב 8: מאמתים עם REA שוב

מריצים שוב את שלבים 3 ו-4, הפעם על התיקייה של האפליקציה שלכם. מה אמורים לראות: מספר הערוצים עם שם קבוע עלה מ-1 ל-2, ובכל שדות ה״לא חד-משמעי״ ו״דינמי״ יש 0, כמו בטבלת לפני ואחרי.

npx -y rea-agents@latest analyze-javascript-application C:/apps/my-leads-app --json | Out-File after.json -Encoding utf8
(Get-Content after.json -Raw | ConvertFrom-Json).normalized_result.summary.ipc

מה עובד ב-Windows בלי כלים נוספים?

REA דורש Node.js בגרסה 22.19 ומעלה, 24.11 ומעלה, או 26 ומעלה, יחד עם npm. מקבלים אותו רק מהמקורות הרשמיים: הריפו, rea.tools וחבילת rea-agents ב-npm. ריפו בשם דומה או README מועתק אינם בהכרח רשמיים. להתקנה קבועה של הפקודה rea: npm install --global rea-agents. לעדכון: rea update.

מה רוצים לנתחמה צריך
אפליקציות JavaScript ו-Electronרק Node.js ו-npm. כך עבדתי בדוגמה המרכזית, ב-Windows.
אתריםדפדפן ממשפחת Chrome.
אפליקציות אנדרואיד (קובצי APK)JDK מלא בגרסה 17 ומעלה וספק ניתוח אנדרואיד (JADX). המדריך הרשמי של Aegis ממליץ ב-Windows להשתמש בסביבת Linux כמו WSL.
קבצים בינאריים של תוכנות (native)אחד מהכלים Hopper, Ghidra או IDA. פרטים בתיעוד ההתקנה של REA.

עוד שתי דוגמאות מתיקי המקרה של REA

המספרים והקטעים בשתי הדוגמאות האלה לקוחים מ-rea.tools, ולא הורצו על ידינו.

למה קוד האימות משתנה כל 30 שניות (Aegis)

Aegis היא אפליקציית אימות בקוד פתוח (רישיון GPL-3.0) שמייצרת את הקודים בני 6 הספרות להזדהות בשני שלבים. צוות REA נתן לסוכן את קובץ ההתקנה הרשמי שלה לאנדרואיד, גרסה 3.4.3 (קובץ APK). בחבילה יש 3,077 מחלקות קוד. REA חיפש מחלקות עם השם Totp (קוד חד-פעמי שמבוסס זמן) ומצא שלוש, ואחת מהן היא המועמדת לחישוב עצמו.

החישוב: האפליקציה מחלקת את הזמן לגושים של 30 שניות, מחשבת מהמפתח של החשבון ומהגוש מספר, לוקחת ממנו שש ספרות ומשלימה אפסים בהתחלה אם צריך. לפי REA, השחזור הותאם ל-133 מקרי בדיקה ולשישה מקרי ייחוס שמפורסמים בתקן RFC 6238. בדמו שלהם, עם מפתח בדיקה ציבורי מהתקן ולא מפתח של חשבון אמיתי:

שנייה בשעון הדמומספר הגושהקוד
301287082
591287082
602359152
1,111,111,10937,037,036081804

בשנייה 59 ובשנייה 60 הקוד שונה כי עברנו לגוש חדש, ובשורה האחרונה הקוד מתחיל באפס. ניתוח הקובץ נעשה סטטית, בלי להריץ את האפליקציה. קרדיט: הקוד של Aegis מורשה ב-GPL-3.0 (הפרויקט ב-GitHub). את הניתוח המלא תמצאו בתיק המקרה של REA, שנערך שם ב-9 באוקטובר 2026 עם REA 6.1.0, וההסבר כאן נכתב מחדש במילים שלי.

איך Notion מעתיק טקסט ללוח

אותה שיטה כמו בדוגמה המרכזית, על אפליקציה גדולה. בתיק מקרה של צוות REA על Notion Desktop (גרסה 7.6.1) הסוכן עוקב אחרי פעולת ההעתקה מהדף, דרך ה-preload, בערוץ הודעות בשם notion:clipboard:write, עד החלק הראשי שבודק מי שלח את הבקשה ורק אז כותב ללוח של המערכת. את המסלול המלא תמצאו בתיק המקרה הרשמי. זו הדגמה של שיטה על חבילה שפורסמה, לא היתר לנתח כל אפליקציה: Notion היא מוצר מסחרי, ולכן אין לשכפל את הדוגמה על תוכנה של אחרים בלי לבדוק קודם מה מותר.

למי REA מתאים?

שווה לכם: בעל עסק עם אפליקציה או כלי פנימי משלו, שרוצה להוסיף לו תכונה כמו מצב כהה או כל תכונה קטנה אחרת, בלי לחכות למפתח; איש אבטחה או איש QA בארגון, שקיבל הרשאה לבדוק אפליקציה פנימית ורוצה ממצאים עם מיקום בקוד; מורה או סטודנט שמלמדים איך אפליקציות בנויות, על תוכנות קוד פתוח כמו Aegis. לא בשבילכם: מי שרוצה לשכפל מוצר של מתחרה, מי שרוצה לעקוף רישיון, הגנת העתקה או מערכת נגד רמאות, ומי שלא מוכן לאמת ממצא חשוב מול הקובץ עצמו.

שאלות נפוצות

האם REA מעלה את האפליקציה שלי לענן?

לא. הניתוח של REA רץ במחשב שלך. הסוכן שמפעיל אותו, למשל קלוד קוד (Claude Code), מקבל את תוצאות הניתוח, ולספק המודל שמאחורי הסוכן יש מדיניות נתונים משלו, ולכן אם האפליקציה רגישה כדאי לקרוא אותה לפני. ניתוח סטטי של JavaScript קורא את הקבצים בלי להריץ את האפליקציה, ואילו פעולות שמריצות תוכנה או לוכדות תעבורת רשת פועלות עם ההרשאות של המשתמש שלך.

האם צריך לדעת לתכנת כדי להשתמש ב-REA?

כדי להתחיל לא. אחרי שמתקינים Node.js, מריצים פקודה אחת, ואז מבקשים מהסוכן לבדוק אפליקציה בשפה רגילה והוא מפעיל את הכלים. אבל התוצאה היא ממצאים על קוד, ולכן לפני שמסתמכים על מסקנה חשובה כדאי שמי שמבין קוד יפתח את הקובץ ואת השורה שהסוכן מצביע עליהם. ההצהרה של הפרויקט עצמו אומרת שתוצאות ניתוח עלולות להיות חלקיות או שגויות.

אפשר להוסיף לתוכנה שלי תכונה שראיתי אצל אחרים?

תלוי איפה ראיתם אותה. אם התכונה נמצאת בתוכנה שבבעלותכם, בתוכנה בקוד פתוח שהרישיון שלה מתיר זאת, או בתוכנה שקיבלתם הרשאה לבדוק, אפשר ללמוד איך היא בנויה ולבנות אצלכם גרסה משלכם. אם זה מוצר של אחרים, REA לא תומך בהעתקת תוכנה קניינית או בשחזור הקוד והנכסים המוגנים שלה, והרישיון של המוצר עשוי לאסור הנדסה לאחור. במקרה כזה בונים את התכונה מאפס לפי מה שמתועד, כמו שעשיתי באפליקציית המצלמה שלי. זה לא ייעוץ משפטי.

האם זה חוקי?

אין תשובה אחת לכל המקרים, וזה לא ייעוץ משפטי. REA מגדיר שימוש חוקי כניתוח אבטחה, לימוד, יכולת פעולה הדדית, שימור תוכנה ובדיקה של תוכנה שבבעלותך או שיש לך הרשאה לבדוק. הוא לא תומך בעקיפת הגנות העתקה או בדיקות רישיון, בצ׳יטים למשחקים, בעקיפת הרשאות ובהעתקת תוכנה קניינית. האחריות להרשאה, לחוק ולרישיון של התוכנה שבודקים היא שלך, וההצהרה מזכירה שהנדסה לאחור עלולה להיות מוגבלת בחוק של המדינה שלך או ברישיון של התוכנה. כשיש ספק, התייעצו עם עורך דין לפני.

עם אילו סוכנים REA עובד?

עם כל סוכן שתומך בשרתי MCP מקומיים (MCP הוא חיבור שנותן לסוכן כלים חיצוניים). פקודת ההתקנה מגדירה בעצמה את קלוד קוד (Claude Code), Codex, Cursor, ג׳מיני (Gemini CLI) ו-Grok Build, ואפשר לחבר סוכנים אחרים ידנית לפי התיעוד.

האם REA חינם?

הכלי עצמו חינם, בקוד פתוח ברישיון MIT. מה שלא בהכרח חינם הוא הסוכן והמודל שמפעילים אותו, למשל מנוי לקלוד קוד, וכלים מסחריים לניתוח קבצים בינאריים כמו IDA Pro, Hopper ו-JEB, שיש להשיג בנפרד בהתאם לרישיון שלהם. ניתוח של אפליקציות JavaScript ו-Electron לא דורש כלי נוסף.

במה זה שונה מלשאול צ׳אטבוט איך אפליקציה עובדת?

צ׳אטבוט שאין לו גישה לקבצים של האפליקציה יכול רק להסביר לפי ידע כללי, כלומר לנחש. עם REA הסוכן קורא את הקבצים של האפליקציה, וכל ממצא מגיע עם מיקום בקוד (קובץ ושורות), עם רמת הוודאות שלו ועם מה שהכלי לא הצליח לברר. כך אפשר לפתוח את אותה שורה ולבדוק בעצמך. זה לא פוטר מאימות: REA מציין בעצמו שממצא שחסר אינו הוכחה שהוא לא קיים.

שורה תחתונה

REA הופך שאלה כמו ״איך כפתור המצב הכהה הזה בנוי?״ לתשובה עם ראיות: קובץ, שורות ורמת ודאות, ואחרי שהסוכן בנה את התכונה אצלכם הוא גם מאפשר לוודא שהיא נוספה. הוא חינמי, והוא מתאים בעיקר למי שרוצה להבין או להרחיב תוכנה שבבעלותו או שיש לו הרשאה לבדוק. הוא לא מחליף מפתח שיאמת ממצא חשוב, ולא נועד לעקוף רישיונות או לשכפל מוצרים של אחרים. הדרך הקצרה להתחיל: להתקין Node.js, להריץ את שלבים 1 עד 4 על אפליקציית dark-example הקטנה, ורק אחר כך לחבר סוכן.

מקורות

הניסויים עם אפליקציית dark-example ואפליקציית הלידים הורצו על מחשב Windows עם Node.js 24.11.1, בגרסה 6.7.0 של REA. מספר הכוכבים והגרסה נכונים ל-23.10.2026 ומשתנים מהר.

BinTech מציעה סדנאות והרצאות על בינה מלאכותית וייעוץ להטמעה בארגונים: סדנאות והרצאות · צור קשר.

ראה גם

graphify ו-opensrc - להבין פרויקט קוד זר עם AI מדריך Claude Code - קורס מלא בעברית חיבורי AI (Connectors) לג'ימייל ודרייב - מה השתנה ב-2026 עוד הדרכות על AI, בערוץ @AIWithHenry

פורסם: 2026-10-23 · עודכן ב-23.10.2026 · מאת הנרי שטאובר, מומחה AI ומרצה