* feat(windows): inspect Shell Link (.lnk) shortcut files Add inspect_windows_shortcut / inspect-windows-shortcut to read one local Shell Link without resolving or executing the target. The report keeps header flags and FILETIMEs, IDList items, LinkInfo volume and network names, StringData, ExtraData including Tracker droid facts labelled derived, and derived observations such as argument length and a minimized ShowCommand. * fix(windows): tighten Shell Link string reads and coverage - Decode counted StringData over its full CountCharacters payload. - Locate LinkInfo string terminators before charging max_string_bytes and before decoding; an unterminated string is a coverage issue. - Mark an IDList without a TerminalID and an out-of-range LinkInfoHeaderSize as partial coverage. - Report arguments_present and argument_length as null when HasArguments is set but the field could not be read. - Derive target_extension from the joined base path and suffix. - Keep ISO dates for FILETIME and UUIDv1 timestamps before 1970. - Retain the completed file snapshot on parse failures. - Reject an empty CLI path before normalization. - Select the shortcut contract from its family in focused tests. - Fixture StringData no longer writes a NUL into the counted payload. * style: format docs index and Shell Link boundary type Apply oxfmt to the two files format:check reports so Static checks passes. * fix(windows): reject network share paths for Shell Link reads inspect_windows_shortcut is advertised as offline, but the Windows path schema admits UNC paths, and lstat on one can contact an SMB server and offer the caller's credentials. Reject UNC, extended UNC, and other host-prefixed device paths in the provider before any filesystem call. Extended drive paths such as \\?\C:\x stay allowed. A mapped network drive cannot be told from a local drive by its path, and the docs say so. * fix(windows): decode Unicode Shell Link file-entry names File-entry items with bit 0x04 of the type byte, such as 0x36, store a UTF-16LE name, but the parser always read it as Latin-1. The read stopped at the first zero byte, so report.exe became r and an IDList-only shortcut reported the wrong target_extension. Read those names as UTF-16LE. * fix(windows): read volume labels by exact Shell Link discriminator VolumeLabelOffset 0x14 selects VolumeLabelOffsetUnicode and is not itself a label offset, and that Unicode field exists for no other value. The parser treated any offset of 0x14 or more as having both, so a Unicode-only label such as "OS" also produced a false ANSI label "O", and an ANSI label stored past 0x14 had its own bytes read as a Unicode offset. Branch on the exact value in parseVolume, the one place that interprets it, and report a VolumeID too short to hold the selected field. The fixture wrote both encodings for a Unicode volume, which hid the false label, so it now writes one. * fix(windows): limit network share rejection to Windows hosts POSIX hosts read repeated leading slashes as one local root, so an accepted selection such as ///tmp/shortcut.lnk is a local file there. Apply the host-prefixed path check only on Windows, and take the platform through the provider constructor so the Windows path forms stay covered on every test host. * fix(windows): compare shortcut icons only against full paths A stored IDList filename or relative path cannot show that an icon at a full path is elsewhere, so the comparison reported a false difference. Report null unless the icon and a recorded target are both full paths, and assert the missing TerminalID issue by code and offset instead of its message. * fix(windows): keep unread ExtraData blocks unknown A walk that stopped before or inside ExtraData still reported the blocks that HasExpString and HasExpIcon expect as absent, though they were never checked for. Report a block as absent only after the TerminalBlock shows the section was read in full. Without one the block stays unknown and coverage stays partial. * fix(native): ignore LNK network provider type unless ValidNetType is set CommonNetworkRelativeLink NetworkProviderType is only meaningful when the ValidNetType flag (0x2) is set. Return null otherwise. * fix(native): accept any ExtraData TerminalSize below 4 as the terminal MS-SHLLINK requires TerminalSize to be less than 4, not exactly 0. Treat 1, 2 and 3 as the terminal block instead of a malformed block. * fix(native): derive shortcut target facts from the stored environment target Include the EnvironmentVariableDataBlock literal target among the target candidates for target_extension and the icon comparison. Variables are not expanded and the target is not opened. * fix(windows-shortcut): keep unexpanded variable paths unresolved in icon comparison A stored environment target such as C:\Users\%USERNAME%\app.exe could be compared as different from C:\Users\Alice\app.exe. Variable-bearing paths are never expanded, so the icon comparison now returns null unless a fixed target matches the icon exactly. * test: drop redundant ok assertion before typed error guard The testing guide asks for the typed error to be thrown before asserting a successful Result value, and says a preceding .ok assertion adds no coverage. * fix(windows): point out-of-range LinkInfo offsets at their field A LinkInfo, VolumeID or CommonNetworkRelativeLink offset that points past its structure was reported at base + offset. With an offset such as 0xffffffff that position exceeds uint32, so the report failed its schema and the service discarded the whole partial result. Report such issues at the offending offset field instead, which keeps every issue offset and coverage.failing_offset inside the file. Cover each LinkInfo offset field in the parser tests and the LocalBasePathOffset case through the stable filesystem service. * fix(windows): require RFC 4122 variant before deriving Tracker UUID facts A version nibble of 1 alone does not identify a version-1 UUID. Also require the clock_seq_hi_and_reserved top bits to be 10, so other GUID layouts keep their raw value and derive no MAC or timestamp. * fix(windows): ignore DeviceNameOffset fields unless ValidDevice is set MS-SHLLINK 2.3.2 says DeviceNameOffset and DeviceNameOffsetUnicode are ignored when the ValidDevice flag is clear. parseNetwork read both regardless, so garbage in those fields became device-name facts or malformed_structure issues. Read the flags once and only read the device name fields when ValidDevice is set. * fix(windows): keep unsupported Tracker headers as raw data Check TrackerDataBlock Length (0x58) and Version (0) before decoding. A block with any other header is retained as raw bytes with a malformed_structure issue, so it no longer yields MAC and timestamp facts under complete coverage. * fix(windows): compare shortcut icon paths by normalized location Collapse "." and ".." segments and repeated separators in the icon comparison as text only, never opening a path. ".." stops at the drive or UNC share root, and \\?\ and \\.\ paths stay verbatim. Join LocalBasePath with CommonPathSuffix as the target and use the bare base only when the suffix is empty, as the network share branch does. Read the selected shortcut with lstat and open only, so a rejected symlink's destination is never resolved. * fix(windows): keep the UNC share in the root after repeated separators normalizePath took the host and the next split part as the UNC root, so \\server\\share\..\app.exe kept an empty share and let .. remove the real share. Drop empty parts before picking the root so paths on different shares stay different. * fix(cli): parse windows shortcut limits as decimals The four inspect-windows-shortcut limit options now go through cliDecimalField like the other inspection commands, so values such as 0x10 are rejected and cliDecimalArguments.test.ts passes. * fix(native): reject linked parents of windows shortcuts A parent directory symlink or junction pointing at a UNC share was followed by the first lstat, since the network check reads only the path text and the symlink rejection covers only the final component. On Windows, lstat each ancestor from the drive root down and reject the path at the first link, before anything follows it. * docs(native): move Windows shortcut guide and add its feature spec Move the Shell Link guide to docs/guides/native/windows-shortcut.md and list it under Native binaries in the site navigation, keeping the /windows-shortcut public route. Update README, translated README, CLI page and authored skill links to the new physical path. Add docs/specs/native/windows-shortcut/ with spec.md, plan.md and tasks.md, as required by docs/development/documentation.md. * fix(native): admit the windows shortcut parent walk On Windows the ancestor link walk ran before the provider's resource admission, so close() could finish while the walk kept calling lstat. Run the walk inside the same admission as the read, and check the caller's signal before each ancestor lstat. * fix(native): walk the effective parents of windows shortcuts The ancestor link walk checked every prefix of the path as written, so C:\alias\..\real\a.lnk was refused when C:\alias is a directory link, although Windows removes alias\.. before opening the file. Walk the ancestors left after removing . and .. components, keeping the caller's spelling, never climbing above an absolute root, and leaving \\?\ paths as written since Windows does not normalize them. * test(native): assert the linked parent as a structured fact The parent link regression matched the phrase "junction, which" in the refusal message, so a wording edit would fail it. Report the linked ancestor as observed.linked_ancestor on the input issue and assert that fact instead of the explanatory text. * test(native): bound the shortcut close gate and release it in finally Race the parent walk lstat acknowledgement against inspection settling with awaitAcknowledgement, then release the gate and join the inspect and close work in finally so a failure reports its cause instead of waiting for the Vitest timeout. * fix(native): walk Windows shortcut parents lazily windowsAncestors built and kept every parent prefix before the first lstat, so a path with thousands of components allocated memory quadratic in its length. It now keeps only the normalized components and yields each parent from a running prefix as the walk reaches it. --------- Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
36 KiB
English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Türkçe · Русский · Tiếng Việt · ไทย · Deutsch · Español · Français · Українська · Polski · Português (Brasil) · العربية · فارسی · Bahasa Indonesia · Italiano · Ελληνικά · മലയാളം · Roman Urdu · Română
REA: Reverse Engineer Anything
Un singur server MCP pentru inginerie inversă: fișiere binare, aplicații și comportament în timpul execuției.
Ai găsit o funcționalitate care îți place? Înțelege cum funcționează, până la nivel de cod binar.
Site web · Ghiduri · Studii de caz
Pornire rapidă · Cum funcționează REA · Ce poți analiza · Studii de caz · Construiește medii RL · Întrebări frecvente · Documentație
npx rea-agents setup
Important
Descarcă REA din morluto/rea, de pe rea.tools sau prin pachetul npm rea-agents. Urmează linkurile de instalare și către versiunile publicate oferite de aceste surse oficiale. Un nume de repository asemănător sau un README copiat nu dovedește că descărcarea provine dintr-o sursă oficială.
|
Alătură-te comunității de inginerie inversă Discord · Întrebări și răspunsuri · Prezentări și demonstrații |
Ai văzut într-o aplicație o funcționalitate pe care ai vrea să o incluzi în propriul produs? Cere-i agentului tău să o investigheze cu REA. Poate inspecta aplicația fără codul ei sursă, poate explica modul în care funcționează acea funcționalitate, poate prezenta dovezile și poate construi o variantă pentru proiectul tău.
REA conectează agentul tău la unelte pentru inspectarea fișierelor binare native, a aplicațiilor JavaScript și Electron, a ansamblurilor .NET și a site-urilor web. Poți folosi aceleași unelte și din terminal. Analiza rulează local, iar rezultatele includ dovezile și limitările care stau la baza fiecărei concluzii.
Programul de configurare înregistrează REA în agentul tău și instalează instrucțiunile corespunzătoare pentru fluxul de lucru. Analiza nativă poate folosi o instalare existentă de Hopper, Ghidra, IDA sau Kuna; programul de configurare poate instala opțional Hopper, cu aprobarea ta. Analiza statică JavaScript nu necesită un motor de analiză nativă.
Vizitează site-ul REA pentru instrucțiuni de configurare, ghiduri ilustrate și studii de caz reale.
Pornire rapidă
Pe Linux, pornirea Ghidra, JADX și a uneltelor pentru firmware, precum și analiza
statică JavaScript/Electron necesită un ps compatibil cu procps în PATH-ul REA,
pentru a verifica dacă procesele îi aparțin. Pașii de remediere sunt în
docs/getting-started/installation.md, la secțiunea „Linux owned-process prerequisite”.
Configurează agentul
Cu Node.js și npm instalate, rulează:
npx rea-agents setup
Alege agenții, verifică modificările propuse și aprobă-le. Configurarea adaugă serverul MCP REA și instrucțiunile corespunzătoare pentru fluxul de lucru, creând copii de siguranță ale configurației existente. Repornește apoi agentul.
Programul de configurare acceptă Claude Code, Codex, Cursor, Gemini CLI, Grok Build și alți agenți. Consultă instalarea și configurarea pentru configurarea motoarelor de analiză și înregistrarea manuală a serverului MCP.
MCP folosește implicit scheme de intrare compacte, pentru a reduce spațiul ocupat
în context. Setează REA_MCP_INPUT_SCHEMA_PROFILE=full în înregistrarea MCP când
ai nevoie de îndrumările complete pentru câmpurile expuse și de detaliile
validării structurilor imbricate. Ambele profiluri păstrează toate uneltele și
validarea canonică a serverului. Consultă secțiunea „Compact input schema profile”
din ghidul contractelor MCP.
Cere-i agentului
Înțelege cum funcționează căutarea în aplicația Notes, arată-mi dovezile și
construiește o funcționalitate similară pentru proiectul meu.
Înlocuiește Notes cu aplicația vizată și precizează funcționalitatea pe care vrei să o înțelegi.
Folosește terminalul
Inspectează directorul extras al unei aplicații JavaScript/Electron sau o arhivă ASAR:
npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json
Rezultatul include modulele, importurile, delimitările dintre componentele Electron
și dovezile aferente. Înlocuiește calea cu cea a aplicației vizate, de exemplu
"D:/apps/example" pe Windows.
Pentru a instala comanda rea și a o folosi în mod curent:
npm install --global rea-agents
rea --help
Pentru analiza nativă, configurează mai întâi un motor de analiză. Consultă ghidul CLI și Evidence pentru comenzile de analiză nativă, selectarea motorului, instantanee și utilizarea în scripturi.
Actualizează REA
REA evoluează rapid, iar versiunile noi includ frecvent corecții de erori. Menține instalarea la zi.
Pentru o interfață CLI instalată cu npm install --global sau bun add --global:
rea update
rea --update este un alias pentru acest flux de actualizare verificat și acceptă
aceleași opțiuni globale de ieșire. Folosește rea update când îl combini cu alte
opțiuni de control al comenzii.
Comenzile de actualizare păstrează cel mult 4 MiB în total din stdout și stderr. Răspunsurile cu metadate prea mari sunt respinse după încheierea comenzii; instalările cu ieșire detaliată continuă cu un volum limitat de date de diagnostic. Afișarea progresului în terminal ține cont de ritmul în care acesta poate primi date și așteaptă finalizarea operațiilor de scriere deja trimise.
Actualizările instalărilor globale cu Bun necesită Bun 1.2.17 sau o versiune mai nouă.
Dacă ai o versiune mai veche, actualizează Bun manual înainte de a rula rea update.
Pentru a actualiza înregistrările agenților și skill-ul, rulează comanda de configurare afișată de programul de actualizare.
Dacă folosești npx, actualizează configurarea agentului cu:
npx rea-agents@latest setup
Verifică modificările de configurare și repornește agentul. Pentru comenzi CLI
ocazionale, folosește npx rea-agents@latest urmat de comandă. Cu Bun, folosește
bunx rea-agents@latest în loc de npx rea-agents@latest.
Cum funcționează REA
Agentul tău apelează REA prin MCP pentru a inspecta ținta și a urmări codul relevant. REA returnează constatările împreună cu dovezile aferente. Agentul le folosește pentru a pune întrebări suplimentare, a explica comportamentul sau a scrie și testa o implementare. Comenzile CLI folosesc aceleași fluxuri de lucru.
Deschide figura la dimensiunea originală.
Ce poți analiza
REA necesită Node.js 22.x (>=22.23.4), 24.x (>=24.22.1) sau 26.12.1+, plus npm. Uneltele suplimentare și platformele acceptate depind de ținta analizată:
| Țintă | Ce returnează REA | Cerințe și ghid |
|---|---|---|
| Aplicații desktop instalate | Componente de execuție candidate, fișiere auxiliare, indicii despre componente și următoarele verificări | Inspectare integrată a directoarelor și antetelor, cu limite de resurse; aplicații desktop |
| Fișiere binare native | Pseudocod, cod de asamblare, șiruri de caractere, simboluri, apeluri și referințe | Hopper, Ghidra, IDA sau Kuna; analiză nativă |
| Structura ELF, offline | Secțiuni, segmente, simboluri și relocări originale, precum și indicii statice despre mecanismele de protecție | pwntools furnizat de utilizator, pe Linux x64; diagnosticarea binarelor |
| Fișiere binare Go | Versiunea compilatorului încorporată în fișier, modulele, înlocuirile și setările de compilare | Inspectare statică integrată a fișierelor ELF/PE/Mach-O cu o singură arhitectură; nu necesită instalarea Go |
| Obiecte de cod GPU | Ținte CUDA/HIP, parametri și resurse selectate ale kernelurilor GPU, textul PTX păstrat | Inspectare statică integrată a fișierelor ELF/PE/fatbin/CUBIN/PTX; obiecte de cod GPU |
| Fișiere de model | Metadate GGUF / safetensors, declarații de tensori și totaluri calculate din acestea | Inspectare integrată a antetelor; opțional, hash al întregului fișier; fișiere de model |
| Metadate IL2CPP | Imagini de ansambluri din global-metadata.dat al Unity, nume de tipuri și metode și intervale de indici | Decodare statică integrată a versiunilor 24, 27, 29, 31 și 39; nu necesită Unity |
| Godot PCK | Inventarul și extragerea arhivei, informații originale din antet și director și identificatori ai conținutului selectat | Suport static integrat pentru formatele 2, 3 și 4; nu necesită Godot |
| Fișiere binare Rust | Nume, versiuni, surse și relații de dependență ale pachetelor crate încorporate prin cargo-auditable | Inspectare statică integrată a fișierelor ELF/PE/Mach-O cu o singură arhitectură; binare Rust |
| Certificate PE | Intrări Authenticode WIN_CERTIFICATE și câmpuri de identitate ale semnatarilor PKCS#7 și certificatelor X.509 | Inspectare statică integrată a fișierelor PE; certificate PE |
| Importuri PE | Numele DLL-urilor importate și încărcate întârziat, ordinale, RVA-uri ale IAT și hash-ul importurilor calculat de pefile | Inspectare statică integrată a fișierelor PE; importuri PE |
| Scurtături Windows | Țintă Shell Link, argumente, director de lucru, ExtraData și identificatori Tracker | Inspectare statică integrată a fișierelor LNK; scurtături Windows |
| Note ELF | Proprietari și tipuri PT_NOTE/SHT_NOTE, câmpuri GNU build-id și ABI-tag | Inspectare statică integrată a fișierelor ELF; note ELF |
| Întărire binară | PIE, NX, RELRO, CFG și indicatori de antet pentru ELF, PE și Mach-O | Inspecție statică integrată a antetelor; întărire binară |
| Rapoarte Apple IPS de eroare fatală | Metadate .ips, fire de execuție, imagini binare, registre și clase documentate de erori fatale | Inspectare statică integrată a datelor JSON; Apple IPS |
| Module de kernel Linux | Chei .modinfo, CRC-uri din __versions, prezența this_module și structura semnăturii de la sfârșitul fișierului | Inspectare statică integrată a fișierelor ELF; module de kernel |
| Erlang BEAM | Blocuri IFF, atomi, exporturi, importuri, funcții lambda și antetul Code | Inspectare statică integrată a fișierelor BEAM; Erlang BEAM |
| Fișiere WASM | Validare, secțiuni, forme WAT exacte ale importurilor și exporturilor și cod WAT decodat | WABT 1.0.42 furnizat de utilizator; inspect_wasm_artifact |
| Bytecode EVM | Selectori de apel, poziții în octeți, argumente și mutabilitate deduse | Fișier local în format brut sau hexazecimal, pe Linux x64; ghid EVM offline |
| Baze de date SQLite | Tabele, coloane, indecși, vizualizări, declanșatoare și rânduri selectate din tabele obișnuite | Instantaneu local al bazei de date/WAL; Node.js 24.x >=24.15 sau 26+, cu limite SQLite native |
| Erori fatale Linux înregistrate | Note brute, registrele și semnalele fiecărui fir înregistrat și, opțional, corespondențe candidate pentru mapările de memorie | pwntools furnizat de utilizator, pe Linux x64; opțional GDB/pwndbg; erori fatale înregistrate |
| JavaScript / Electron | Module, importuri, hărți de cod sursă, rute, IPC și relații cu extensiile native | Node.js și npm; pe Linux: ps compatibil cu procps; analiza aplicațiilor |
| Site-uri web | Structura paginilor, scripturi, observații de rețea și capturi de ecran solicitate | Un browser din familia Chrome; analiză în browser |
| Capturi de rețea salvate | Cereri, răspunsuri, conținuturi expuse ale mesajelor și pozițiile lor în sursă | HAR sau SAZ din Fiddler Everywhere; mitmdump pe Linux pentru formatul nativ mitmproxy; ghidul capturilor |
| Ansambluri .NET | Metadate, instrucțiuni CIL, dependențe native declarate și comparații între compilări | Fără cerințe suplimentare (doar analiză statică); ghidul codului gestionat |
| APK-uri Android | Declarații din manifest, clase, metode decompilate și referințe | JADX fără interfață grafică și un JDK complet, pe Linux/macOS/Windows x64; ghidul Android |
| Semnături APK | Semnatari v1/v2/v3/v3.1, amprente ale certificatelor, rotația cheilor și consistența internă a hash-urilor | Fără cerințe suplimentare (doar analiză statică); inspect_apk_signature |
| Dispozitive Android | Dispozitive, pachete, procese, jurnale, dumpuri, capturi de ecran și transferuri de APK-uri și fișiere | adb furnizat de utilizator (emulator sau dispozitiv fizic); ghidul ADB |
| Proiecte JEB | Unități de proiect analizate prin motor, hash-uri ale artefactelor și pseudocod pentru tipuri și metode | Un client JEB pornit de utilizator, care oferă un server MCP și este selectat prin REA_JEB_MCP_URL; ghidul JEB |
| Resurse Android | Manifest decodat, tabele de șiruri de caractere, localizări și informații despre versiune | Program de lansare Apktool furnizat de utilizator; ghidul resurselor |
| Aplicații Flutter | Hash-ul instantaneului Dart, hash-uri ale bibliotecilor pentru fiecare ABI și proveniența compilării motorului | Fără cerințe suplimentare (parsare statică a APK-ului); ghidul Flutter |
| Firmware | Regiuni, rezultate ale extragerii și transferul către analiza nativă | Binwalk / Unblob pe Linux; ghidul firmware |
| Pachete de rețea înregistrate | Câmpuri selectate, valori repetate, filtre și reguli decode-as | Linux: TShark 4.x + prlimit; ghidul capturilor |
| Rezumate ale traficului de rețea | Puncte terminale, DNS, TLS SNI, distribuția protocoalelor și cereri HTTP | tshark și capinfos furnizate de utilizator (verificate pe Linux); ghidul pcap |
| Semnale logice înregistrate | Adnotări ale decodorului, intervale de eșantioane și date de diagnostic | Linux: sigrok-cli 0.7.2 + prlimit; înregistrări de semnale |
| Pachete și resurse | Inventare de fișiere, hash-uri, fișiere plist, structura pachetelor de aplicație Apple și resurse extrase | Ghidul artefactelor și JavaScript, aplicații Apple |
| Comportamentul proceselor | Ieșirea în terminal, interacțiuni, observații despre terminarea proceselor și sistemul de fișiere și comparații între rulări | Linux/macOS cu un PTY nativ; capturarea proceselor |
| Executabile PyInstaller | Membri CArchive, versiunea Python, scripturi de intrare și bytecode extras | Fără cerințe suplimentare (doar analiză statică); aplicații Python împachetate |
Inspectarea statică JavaScript și .NET citește fișierele furnizate fără a rula aplicația. Capturarea în timpul execuției rulează ținta selectată sau interacționează cu aceasta folosind permisiunile contului tău; fiecare ghid de capturare descrie efectele acestor operații.
Pentru inspectarea offline a binarelor native, REA acceptă și GNU objdump și Rizin, furnizate de utilizator. Consultă ghidul uneltelor de inginerie inversă pentru configurare, comenzi CLI și limitările obiectelor Evidence. REA nu instalează și nu actualizează niciunul dintre aceste două instrumente.
Formatele native și platformele acceptate diferă în funcție de motorul de analiză.
Consultă configurarea Hopper și Ghidra,
ghidul IDA (inclusiv o componentă opțională de legătură MCP nativă),
ghidul decompilatorului Kuna și
suportul experimental Ghidra pe Windows.
Ghidra acceptă și analiza DOS pe 16 biți.
Pentru binare mari, mărește timpul maxim de pornire al motorului cu
REA_GHIDRA_STARTUP_TIMEOUT_MS sau REA_HOPPER_STARTUP_TIMEOUT_MS.
Pentru selectarea motorului, consultă ghidul CLI.
Verifică disponibilitatea în versiunile publicate
pentru funcționalitățile adăugate după cea mai recentă versiune npm.
Studii de caz
DX-Ball: reconstruiește calculul panoramării sunetului
Urmărește un apel audio până la funcția auxiliară care transformă poziția în panoramare stereo, inspectează instrucțiunile și transformă pseudocodul incomplet în C. Reconstrucția trece 3.205 cazuri de test comparate cu originalul x86 și reproduce toți cei 63 de octeți ai funcției compilate.
Citește studiul de caz · Repository-ul reconstrucției
Notion: urmărește legătura Electron cu clipboardul
Găsește API-ul pentru clipboard din procesul de randare, urmărește-l prin preload și IPC până în procesul principal și inspectează formatul datelor cu formatare din clipboard.
TH04: recuperează calculul unui inel de proiectile DOS
Inspectează instrucțiunile pe 16 biți ale jocului original pentru PC-98, recuperează calculele unghiurilor fixe și ale celor orientate spre țintă și compară codul C++ reconstruit cu rezultatul compilatorului folosit la acea vreme.
Citește studiul de caz · Repository-ul reconstrucției
Construiește medii RL cu REA
Înregistrează o sesiune de aplicație web, transformă API-ul în instrumente și exportă un mediu pe care un agent AI îl poate folosi. Rulează cu AgentEnv, apoi adaugă sarcini și verificări de recompensă pentru antrenare RL sau evaluare.
Ghid pentru construirea unui mediu · Vezi demonstrația pe X
Dacă ai folosit REA pentru ceva interesant, ne-ar plăcea să vedem rezultatul. Prezintă cazul într-un issue sau într-un pull request, menționând ținta analizată, întrebarea ta, cum te-a ajutat REA și ce ai descoperit.
Construiește medii RL
Creează un mediu local în care un agent AI să exerseze sarcini precum găsirea unui issue sau crearea unui dosar, fără a rula aplicația originală. Folosește-l pentru învățare prin recompensă (RL) sau pentru a testa cât de bine îndeplinește agentul sarcinile.
REA transformă cererile și răspunsurile API înregistrate în instrumente pe care agentul le poate apela. Mediul folosește datele înregistrate și permite modificări doar când înregistrarea le confirmă efectele.
După ce configurezi REA în agent, înlocuiește URL-ul și sarcinile pentru dosare din exemplu cu ale tale:
Folosește REA pentru a crea un mediu RL din aplicația mea web de test de la
http://127.0.0.1:3000.
Include listarea, crearea, redenumirea și ștergerea dosarelor. Poți crea și elimina
dosare de test, dar nu modifica datele existente.
Salvează într-un dosar numit my-env, verifică operațiile disponibile și spune-mi cum îl rulez.
Folosește linia de comandă
Folosește aceste comenzi dacă ai deja un fișier cu cererile și răspunsurile aplicației înregistrate în browser. Pentru a rula rezultatul ai nevoie și de AgentEnv și Docker.
rea environment-build ./session.har ./my-env --name my-env --json
agent-env run ./my-env
REA exportă un mediu executabil cu un test de bază care verifică pornirea și răspunsurile. Conectează-l la frameworkul RL pentru a defini obiectivele, a adăuga verificări de recompensă și a rula antrenarea.
Ghid pentru construirea unui mediu · Referință pentru medii · Vezi demonstrația pe X
Întrebări frecvente
Ce agenți pot folosi REA?
Orice agent care acceptă servere MCP locale. Programul de configurare pregătește agenții acceptați; pentru ceilalți clienți poți folosi înregistrarea manuală MCP.
Am nevoie de Hopper, Ghidra, IDA sau Kuna?
Analiza nativă aprofundată folosește unul dintre aceste instrumente. Inspectarea statică JavaScript și .NET funcționează fără un motor de analiză nativă. Programul de configurare poate instala Hopper după aprobare; pentru Ghidra, IDA și Kuna folosește instalările existente. Consultă configurarea motoarelor de analiză.
Trebuie să pornesc mai întâi Hopper?
REA pornește Hopper când o operație are nevoie de el. Pe macOS, un dialog afișat la prima pornire îți poate cere să alegi modul demonstrativ sau să activezi licența. Finalizează acel pas în aceeași sesiune de utilizator înainte de prima operație CLI/MCP sau de prima sarcină nesupravegheată. Deschide Hopper manual dacă este nevoie. Consultă pornirea Hopper și depanarea.
Ce face instalarea skill-ului de pe skills.sh?
Skill-ul oferă agentului instrucțiuni de investigare. Folosește npx rea-agents setup
pentru a înregistra serverul MCP REA și a instala instrucțiunile corespunzătoare,
apoi repornește agentul. Consultă instalarea doar a skill-ului.
Ce cod returnează REA?
Analiza nativă returnează pseudocod și cod de asamblare. Analiza JavaScript/Electron recuperează modulele și relațiile dintre ele. Agentul tău folosește aceste constatări pentru a scrie și testa o implementare; studiile de caz oferă exemple detaliate.
REA îmi încarcă aplicația pe un server?
REA analizează țintele local. Agentul tău primește rezultatele uneltelor, iar furnizorul modelului său are propria politică privind datele.
Ce fac dacă întâlnesc o eroare?
Actualizează mai întâi; o versiune recentă ar putea să o fi remediat deja.
Pentru o interfață CLI instalată cu npm install --global sau bun add --global:
rea update
Pentru configurarea agentului prin npx:
npx rea-agents@latest setup
Dacă folosești un agent, finalizează actualizarea configurării și repornește-l. Reîncearcă aceeași sarcină. Dacă problema persistă, deschide un issue și include versiunea REA, tipul țintei analizate, pașii de reproducere și mesajele de eroare.
Documentație
Începe cu ghidurile practice de pe site. Pentru opțiunile exacte, cerințele preliminare și contractele rezultatelor:
- Instalare și configurare: înregistrarea agenților, configurarea motoarelor de analiză, actualizări și dezinstalare.
- Verificarea pregătirii și depanare: diagnosticarea unui agent sau motor de analiză.
- CLI și Evidence: comenzi, selectarea motorului, instantanee, import/export și coduri de ieșire.
- Contracte MCP și prompturi pentru agenți: rezultatele uneltelor, sesiuni și investigații ghidate.
- Catalogul uneltelor: inventarul generat al uneltelor, motoarelor de analiză și comenzilor CLI.
- Plan de dezvoltare: lucrări planificate și urmărirea progresului funcționalităților.
Raportează vulnerabilitățile conform SECURITY.md.
Istoricul stelelor
🎉 400.000 de stele pe GitHub — vă mulțumim!
Mulțumim tuturor celor care folosesc REA, raportează erori, propun funcționalități, testează versiuni și contribuie cu remedieri.
Precizări privind utilizarea
Consultă DISCLAIMER.md pentru îndrumări privind utilizarea responsabilă.
Poziția proiectului față de utilizarea ilegală sau neautorizată se aplică tuturor versiunilor REA, canalelor de distribuție și platformelor; fiecare copie își păstrează licențele aplicabile.
REA este destinat cercetării legale, educației, interoperabilității, conservării software-ului și analizei programelor pe care le deții sau pe care ai autorizarea să le examinezi.
Contribuții
Ne-ar bucura să contribui la REA! Deschide un issue pentru a raporta o eroare sau a propune o funcționalitate ori trimite un pull request pentru a îmbunătăți codul sau documentația.
Consultă CONTRIBUTING.md pentru pregătirea mediului de dezvoltare și verificări, ghidul de testare pentru categoriile de verificări și diagrama arhitecturii pentru anumite straturi și relații de dependență.
Licență
Codul scris în cadrul REA este licențiat sub MIT. Materialele terților își păstrează propriile licențe și mențiuni privind drepturile de autor; consultă mențiunile privind terții pentru inventarul dependențelor, textele licențelor păstrate și condițiile aplicabile uneltelor externe.
Trebuie să obții legal uneltele comerciale și să ai dreptul să le folosești, inclusiv decompilatoarele IDA Pro / Hex-Rays, Hopper și JEB, în condițiile licențelor aplicabile. REA nu îți acordă nicio licență, cheie sau drept de activare pentru aceste unelte. Versiunile de evaluare și demonstrative rămân supuse condițiilor furnizorilor, inclusiv restricțiilor privind utilizatorii, funcționalitățile, automatizarea și partajarea rezultatelor. Nu sunt autorizate copiile piratate, cheile furate, partajarea neautorizată a cheilor sau ocolirea restricțiilor de licențiere. Aceste îndrumări nu modifică licența MIT sau licențele terților.