11995 lines
375 KiB
Plaintext
11995 lines
375 KiB
Plaintext
#
|
||
msgid ""
|
||
msgstr ""
|
||
"Project-Id-Version: REA website\n"
|
||
"MIME-Version: 1.0\n"
|
||
"Content-Type: text/plain; charset=UTF-8\n"
|
||
"Content-Transfer-Encoding: 8bit\n"
|
||
|
||
#: website/public/blog/index.html:103
|
||
msgctxt "page:blog/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:113
|
||
#: website/public/blog/reverse-engineering-models/index.html:113
|
||
#: website/public/blog/touhou-reconstruction/index.html:113
|
||
#: website/public/examples/dino-lab/index.html:114 website/public/faq/index.html:113
|
||
#: website/public/first-investigation/index.html:113
|
||
#: website/public/get-started/index.html:113
|
||
#: website/public/guides/browser/index.html:113 website/public/guides/index.html:113
|
||
#: website/public/guides/javascript/index.html:113
|
||
#: website/public/guides/native/index.html:113 website/public/index.html:115
|
||
#: website/public/showcase/aegis/index.html:114
|
||
#: website/public/showcase/ctf/index.html:113
|
||
#: website/public/showcase/dx-ball/index.html:113 website/public/showcase/index.html:113
|
||
#: website/public/showcase/notion/index.html:113
|
||
#: website/public/showcase/th04/index.html:113
|
||
msgctxt "shared"
|
||
msgid "Get started"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:114
|
||
#: website/public/blog/reverse-engineering-models/index.html:114
|
||
#: website/public/blog/touhou-reconstruction/index.html:114
|
||
#: website/public/examples/dino-lab/index.html:115 website/public/faq/index.html:114
|
||
#: website/public/first-investigation/index.html:114
|
||
#: website/public/get-started/index.html:114
|
||
#: website/public/guides/browser/index.html:114 website/public/guides/index.html:114
|
||
#: website/public/guides/javascript/index.html:114
|
||
#: website/public/guides/native/index.html:114 website/public/index.html:116
|
||
#: website/public/showcase/aegis/index.html:115
|
||
#: website/public/showcase/ctf/index.html:114
|
||
#: website/public/showcase/dx-ball/index.html:114 website/public/showcase/index.html:114
|
||
#: website/public/showcase/notion/index.html:114
|
||
#: website/public/showcase/th04/index.html:114
|
||
msgctxt "shared"
|
||
msgid "Showcases"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:115
|
||
#: website/public/blog/reverse-engineering-models/index.html:115
|
||
#: website/public/blog/touhou-reconstruction/index.html:115
|
||
#: website/public/examples/dino-lab/index.html:116 website/public/faq/index.html:115
|
||
#: website/public/first-investigation/index.html:115
|
||
#: website/public/get-started/index.html:115
|
||
#: website/public/guides/browser/index.html:115 website/public/guides/index.html:115
|
||
#: website/public/guides/javascript/index.html:115
|
||
#: website/public/guides/native/index.html:115 website/public/index.html:117
|
||
#: website/public/showcase/aegis/index.html:116
|
||
#: website/public/showcase/ctf/index.html:115
|
||
#: website/public/showcase/dx-ball/index.html:115 website/public/showcase/index.html:115
|
||
#: website/public/showcase/notion/index.html:115
|
||
#: website/public/showcase/th04/index.html:115
|
||
msgctxt "shared"
|
||
msgid "Blog"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:116
|
||
#: website/public/blog/reverse-engineering-models/index.html:116
|
||
#: website/public/blog/touhou-reconstruction/index.html:116
|
||
#: website/public/examples/dino-lab/index.html:117 website/public/faq/index.html:116
|
||
#: website/public/first-investigation/index.html:116
|
||
#: website/public/get-started/index.html:116
|
||
#: website/public/guides/browser/index.html:116 website/public/guides/index.html:116
|
||
#: website/public/guides/javascript/index.html:116
|
||
#: website/public/guides/native/index.html:116 website/public/index.html:118
|
||
#: website/public/showcase/aegis/index.html:117
|
||
#: website/public/showcase/ctf/index.html:116
|
||
#: website/public/showcase/dx-ball/index.html:116 website/public/showcase/index.html:116
|
||
#: website/public/showcase/notion/index.html:116
|
||
#: website/public/showcase/th04/index.html:116
|
||
msgctxt "shared"
|
||
msgid "Guides"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:blog/index.html"
|
||
msgid "{ph0}Home{ph1} / Blog"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:195
|
||
msgctxt "page:blog/index.html"
|
||
msgid "Blog."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:196
|
||
msgctxt "page:blog/index.html"
|
||
msgid "Thoughts on reverse engineering."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/blog/index.html:200
|
||
#, python-brace-format
|
||
msgctxt "page:blog/index.html"
|
||
msgid "Model specialization{ph0}Essay"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:202
|
||
msgctxt "page:blog/index.html"
|
||
msgid "Does reverse engineering need a bigger model?"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:203
|
||
msgctxt "page:blog/index.html"
|
||
msgid ""
|
||
"What Touhou reconstruction suggests about general models, specialist models and "
|
||
"learning from compiler feedback."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:207 website/public/blog/index.html:222
|
||
msgctxt "page:blog/index.html"
|
||
msgid "Read the article"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:210
|
||
msgctxt "page:blog/index.html"
|
||
msgid "By N0zoM1z0 · 13 October 2026"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/blog/index.html:214
|
||
#, python-brace-format
|
||
msgctxt "page:blog/index.html"
|
||
msgid "Game reconstruction{ph0}Essay"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:216
|
||
msgctxt "page:blog/index.html"
|
||
msgid "The industrial revolution in reverse engineering"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:217
|
||
msgctxt "page:blog/index.html"
|
||
msgid ""
|
||
"What manual RE and reconstructing TH08, TH095 and TH04 taught me about agents, "
|
||
"verification and knowledge that compounds across projects."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:225
|
||
msgctxt "page:blog/index.html"
|
||
msgid "By N0zoM1z0 · 10 October 2026"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:236
|
||
#: website/public/blog/reverse-engineering-models/index.html:868
|
||
#: website/public/blog/touhou-reconstruction/index.html:1072
|
||
#: website/public/examples/dino-lab/index.html:467 website/public/faq/index.html:565
|
||
#: website/public/first-investigation/index.html:515
|
||
#: website/public/get-started/index.html:874
|
||
#: website/public/guides/browser/index.html:499 website/public/guides/index.html:274
|
||
#: website/public/guides/javascript/index.html:495
|
||
#: website/public/guides/native/index.html:501 website/public/index.html:1183
|
||
#: website/public/showcase/aegis/index.html:800
|
||
#: website/public/showcase/ctf/index.html:769
|
||
#: website/public/showcase/dx-ball/index.html:777 website/public/showcase/index.html:309
|
||
#: website/public/showcase/notion/index.html:623
|
||
#: website/public/showcase/th04/index.html:792
|
||
msgctxt "shared"
|
||
msgid "Source"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:237
|
||
#: website/public/blog/reverse-engineering-models/index.html:869
|
||
#: website/public/blog/touhou-reconstruction/index.html:1073
|
||
#: website/public/examples/dino-lab/index.html:468 website/public/faq/index.html:566
|
||
#: website/public/first-investigation/index.html:516
|
||
#: website/public/get-started/index.html:875
|
||
#: website/public/guides/browser/index.html:500 website/public/guides/index.html:275
|
||
#: website/public/guides/javascript/index.html:496
|
||
#: website/public/guides/native/index.html:502 website/public/index.html:1184
|
||
#: website/public/showcase/aegis/index.html:801
|
||
#: website/public/showcase/ctf/index.html:770
|
||
#: website/public/showcase/dx-ball/index.html:778 website/public/showcase/index.html:310
|
||
#: website/public/showcase/notion/index.html:624
|
||
#: website/public/showcase/th04/index.html:793
|
||
msgctxt "shared"
|
||
msgid "MIT license"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:238
|
||
#: website/public/blog/reverse-engineering-models/index.html:870
|
||
#: website/public/blog/touhou-reconstruction/index.html:1074
|
||
#: website/public/examples/dino-lab/index.html:469 website/public/faq/index.html:567
|
||
#: website/public/first-investigation/index.html:517
|
||
#: website/public/get-started/index.html:876
|
||
#: website/public/guides/browser/index.html:501 website/public/guides/index.html:276
|
||
#: website/public/guides/javascript/index.html:497
|
||
#: website/public/guides/native/index.html:503 website/public/index.html:1185
|
||
#: website/public/showcase/aegis/index.html:802
|
||
#: website/public/showcase/ctf/index.html:771
|
||
#: website/public/showcase/dx-ball/index.html:779 website/public/showcase/index.html:311
|
||
#: website/public/showcase/notion/index.html:625
|
||
#: website/public/showcase/th04/index.html:794
|
||
msgctxt "shared"
|
||
msgid "Join the community"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:239
|
||
#: website/public/blog/reverse-engineering-models/index.html:871
|
||
#: website/public/blog/touhou-reconstruction/index.html:1075
|
||
#: website/public/examples/dino-lab/index.html:470 website/public/faq/index.html:568
|
||
#: website/public/first-investigation/index.html:518
|
||
#: website/public/get-started/index.html:877
|
||
#: website/public/guides/browser/index.html:502 website/public/guides/index.html:277
|
||
#: website/public/guides/javascript/index.html:498
|
||
#: website/public/guides/native/index.html:504 website/public/index.html:1186
|
||
#: website/public/showcase/aegis/index.html:803
|
||
#: website/public/showcase/ctf/index.html:772
|
||
#: website/public/showcase/dx-ball/index.html:780 website/public/showcase/index.html:312
|
||
#: website/public/showcase/notion/index.html:626
|
||
#: website/public/showcase/th04/index.html:795
|
||
msgctxt "shared"
|
||
msgid "Follow us on X"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span aria-hidden="true">
|
||
#. {ph1}: </span>
|
||
#: website/public/blog/index.html:244
|
||
#: website/public/blog/reverse-engineering-models/index.html:876
|
||
#: website/public/blog/touhou-reconstruction/index.html:1080
|
||
#: website/public/examples/dino-lab/index.html:475 website/public/faq/index.html:573
|
||
#: website/public/first-investigation/index.html:523
|
||
#: website/public/get-started/index.html:882
|
||
#: website/public/guides/browser/index.html:507 website/public/guides/index.html:282
|
||
#: website/public/guides/javascript/index.html:503
|
||
#: website/public/guides/native/index.html:509 website/public/index.html:1191
|
||
#: website/public/showcase/aegis/index.html:808
|
||
#: website/public/showcase/ctf/index.html:777
|
||
#: website/public/showcase/dx-ball/index.html:785 website/public/showcase/index.html:317
|
||
#: website/public/showcase/notion/index.html:631
|
||
#: website/public/showcase/th04/index.html:800
|
||
#, python-brace-format
|
||
msgctxt "shared"
|
||
msgid "{ph0}↑{ph1} Top"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:6
|
||
msgctxt "page:blog/index.html"
|
||
msgid "REA Blog — Thoughts on Reverse Engineering"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:7
|
||
msgctxt "page:blog/index.html"
|
||
msgid ""
|
||
"Thoughts on reverse engineering, drawing on practical experience with REA and AI "
|
||
"agents."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:75 website/public/blog/index.html:88
|
||
#: website/public/blog/reverse-engineering-models/index.html:75
|
||
#: website/public/blog/reverse-engineering-models/index.html:88
|
||
#: website/public/blog/touhou-reconstruction/index.html:75
|
||
#: website/public/blog/touhou-reconstruction/index.html:88
|
||
#: website/public/examples/dino-lab/index.html:75
|
||
#: website/public/examples/dino-lab/index.html:88 website/public/faq/index.html:75
|
||
#: website/public/faq/index.html:88 website/public/first-investigation/index.html:75
|
||
#: website/public/first-investigation/index.html:88
|
||
#: website/public/get-started/index.html:75 website/public/get-started/index.html:88
|
||
#: website/public/guides/browser/index.html:75
|
||
#: website/public/guides/browser/index.html:88 website/public/guides/index.html:75
|
||
#: website/public/guides/index.html:88 website/public/guides/javascript/index.html:75
|
||
#: website/public/guides/javascript/index.html:88
|
||
#: website/public/guides/native/index.html:75 website/public/guides/native/index.html:88
|
||
#: website/public/index.html:75 website/public/index.html:88
|
||
#: website/public/showcase/aegis/index.html:75
|
||
#: website/public/showcase/aegis/index.html:88 website/public/showcase/ctf/index.html:75
|
||
#: website/public/showcase/ctf/index.html:88
|
||
#: website/public/showcase/dx-ball/index.html:75
|
||
#: website/public/showcase/dx-ball/index.html:88 website/public/showcase/index.html:75
|
||
#: website/public/showcase/index.html:88 website/public/showcase/notion/index.html:75
|
||
#: website/public/showcase/notion/index.html:88
|
||
#: website/public/showcase/th04/index.html:75 website/public/showcase/th04/index.html:88
|
||
msgctxt "shared"
|
||
msgid "REA — Find out how software works. Reverse engineering with your coding agent."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:108
|
||
#: website/public/blog/reverse-engineering-models/index.html:108
|
||
#: website/public/blog/touhou-reconstruction/index.html:108
|
||
#: website/public/examples/dino-lab/index.html:109 website/public/faq/index.html:108
|
||
#: website/public/first-investigation/index.html:108
|
||
#: website/public/get-started/index.html:108
|
||
#: website/public/guides/browser/index.html:108 website/public/guides/index.html:108
|
||
#: website/public/guides/javascript/index.html:108
|
||
#: website/public/guides/native/index.html:108 website/public/index.html:110
|
||
#: website/public/showcase/aegis/index.html:109
|
||
#: website/public/showcase/ctf/index.html:108
|
||
#: website/public/showcase/dx-ball/index.html:108 website/public/showcase/index.html:108
|
||
#: website/public/showcase/notion/index.html:108
|
||
#: website/public/showcase/th04/index.html:108
|
||
msgctxt "shared"
|
||
msgid "REA home"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:112
|
||
#: website/public/blog/reverse-engineering-models/index.html:112
|
||
#: website/public/blog/touhou-reconstruction/index.html:112
|
||
#: website/public/examples/dino-lab/index.html:113 website/public/faq/index.html:112
|
||
#: website/public/first-investigation/index.html:112
|
||
#: website/public/get-started/index.html:112
|
||
#: website/public/guides/browser/index.html:112 website/public/guides/index.html:112
|
||
#: website/public/guides/javascript/index.html:112
|
||
#: website/public/guides/native/index.html:112 website/public/index.html:114
|
||
#: website/public/showcase/aegis/index.html:113
|
||
#: website/public/showcase/ctf/index.html:112
|
||
#: website/public/showcase/dx-ball/index.html:112 website/public/showcase/index.html:112
|
||
#: website/public/showcase/notion/index.html:112
|
||
#: website/public/showcase/th04/index.html:112
|
||
msgctxt "shared"
|
||
msgid "Main navigation"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:130
|
||
#: website/public/blog/reverse-engineering-models/index.html:130
|
||
#: website/public/blog/touhou-reconstruction/index.html:130
|
||
#: website/public/examples/dino-lab/index.html:131 website/public/faq/index.html:130
|
||
#: website/public/first-investigation/index.html:130
|
||
#: website/public/get-started/index.html:130
|
||
#: website/public/guides/browser/index.html:130 website/public/guides/index.html:130
|
||
#: website/public/guides/javascript/index.html:130
|
||
#: website/public/guides/native/index.html:130 website/public/index.html:132
|
||
#: website/public/showcase/aegis/index.html:131
|
||
#: website/public/showcase/ctf/index.html:130
|
||
#: website/public/showcase/dx-ball/index.html:130 website/public/showcase/index.html:130
|
||
#: website/public/showcase/notion/index.html:130
|
||
#: website/public/showcase/th04/index.html:130
|
||
msgctxt "shared"
|
||
msgid "REA on GitHub"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:150
|
||
#: website/public/blog/reverse-engineering-models/index.html:150
|
||
#: website/public/blog/touhou-reconstruction/index.html:150
|
||
#: website/public/examples/dino-lab/index.html:151 website/public/faq/index.html:150
|
||
#: website/public/first-investigation/index.html:150
|
||
#: website/public/get-started/index.html:150
|
||
#: website/public/guides/browser/index.html:150 website/public/guides/index.html:150
|
||
#: website/public/guides/javascript/index.html:150
|
||
#: website/public/guides/native/index.html:150 website/public/index.html:152
|
||
#: website/public/showcase/aegis/index.html:151
|
||
#: website/public/showcase/ctf/index.html:150
|
||
#: website/public/showcase/dx-ball/index.html:150 website/public/showcase/index.html:150
|
||
#: website/public/showcase/notion/index.html:150
|
||
#: website/public/showcase/th04/index.html:150
|
||
msgctxt "shared"
|
||
msgid "Join REA on Discord"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:169
|
||
#: website/public/blog/reverse-engineering-models/index.html:169
|
||
#: website/public/blog/touhou-reconstruction/index.html:169
|
||
#: website/public/examples/dino-lab/index.html:170 website/public/faq/index.html:169
|
||
#: website/public/first-investigation/index.html:169
|
||
#: website/public/get-started/index.html:169
|
||
#: website/public/guides/browser/index.html:169 website/public/guides/index.html:169
|
||
#: website/public/guides/javascript/index.html:169
|
||
#: website/public/guides/native/index.html:169 website/public/index.html:171
|
||
#: website/public/showcase/aegis/index.html:170
|
||
#: website/public/showcase/ctf/index.html:169
|
||
#: website/public/showcase/dx-ball/index.html:169 website/public/showcase/index.html:169
|
||
#: website/public/showcase/notion/index.html:169
|
||
#: website/public/showcase/th04/index.html:169
|
||
msgctxt "shared"
|
||
msgid "Follow REA on X"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/index.html:244
|
||
msgctxt "page:blog/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:103
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="../">
|
||
#. {ph3}: </a>
|
||
#: website/public/blog/reverse-engineering-models/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Models and RE"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:197
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Essay"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:198
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Does reverse engineering need a bigger model?"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:199
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "By N0zoM1z0 · 13 October 2026"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:201
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Takeaway"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/reverse-engineering-models/index.html:203
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}Model capability changes the hypotheses an agent can find.{ph1} Later sessions "
|
||
"have solved problems that earlier work left unresolved."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/reverse-engineering-models/index.html:211
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}A familiar compiler gives specialization something concrete to learn.{ph1} Some "
|
||
"exact matches depend on narrow, reusable source patterns."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/blog/reverse-engineering-models/index.html:218
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}Give repository knowledge a fair comparison.{ph1} A smaller model with good "
|
||
"retrieval may already know enough to make progress."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/reverse-engineering-models/index.html:223
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}Train the next useful experiment, and test its oracle.{ph1} The value of feedback"
|
||
" depends on what the checker actually verifies."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/reverse-engineering-models/index.html:230
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}Measure accepted reconstruction against time and cost.{ph1} That is the result I "
|
||
"want from the whole agent."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:241
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "In this article"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#model-capability">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/reverse-engineering-models/index.html:243
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "{ph0}What better models changed{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#specialization">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/reverse-engineering-models/index.html:244
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "{ph0}Why specialize?{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#repository-knowledge">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/reverse-engineering-models/index.html:245
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "{ph0}Where experience lives{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#learning-search">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/reverse-engineering-models/index.html:246
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "{ph0}Learning the next experiment{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#re-and-rl">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/reverse-engineering-models/index.html:247
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "{ph0}RE and reinforcement learning{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#oracle">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/reverse-engineering-models/index.html:248
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "{ph0}When the oracle is wrong{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#comparison">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/reverse-engineering-models/index.html:249
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "{ph0}A comparison worth running{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#future-agent">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/reverse-engineering-models/index.html:250
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "{ph0}What kind of agent?{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:258
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "What better models changed"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:259
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Since August 2026, I have been exploring how much reverse engineering an agent can "
|
||
"carry out with access to a program and a way to check its work. Most of my experience "
|
||
"comes from reconstructing games, especially Touhou. As I have changed models, the "
|
||
"repositories have kept a record of what each session managed to recover."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:267
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Much of that work aims at exact reconstruction: we compile the maintained source under"
|
||
" a pinned historical toolchain and check whether it reproduces the target function. "
|
||
"When a later model succeeds where earlier work stalled, the source changes show what "
|
||
"made that progress possible."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:274
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "The temporary values had to stay alive together"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:275
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Much of a TH09 attack function's logic had already been reconstructed, but the "
|
||
"compiler still stored temporary results differently from the original. The remaining "
|
||
"problem was how long those results needed to stay alive and when their storage could "
|
||
"be reused."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th09/commit/de63c0f9121963f3a6b1ab5471c4878625fd3425"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/N0zoM1z0/th09/commit/52929ed7c299f1a5f29cc13964e22510145fd616"
|
||
#. >
|
||
#. {ph3}: </a >
|
||
#: website/public/blog/reverse-engineering-models/index.html:282
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"A {ph0}GPT-6-Sol checkpoint{ph1} recorded this mismatch after testing several ordinary"
|
||
" source arrangements. When {ph2}GPT-6.1-Sol returned to the problem{ph3}, it found a "
|
||
"useful hypothesis about how long those temporary values needed to stay alive."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:296
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"The function produced temporary results and copied them into animation positions. In "
|
||
"C++, a temporary result stays alive until the expression using it finishes. Grouping "
|
||
"the real operations into one expression kept those results alive together, so the "
|
||
"compiler could no longer reuse the same storage for all of them."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/reverse-engineering-models/index.html:303
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"One result still shared storage with a value used later for collision checks. Giving "
|
||
"that value its own lifetime resolved the remaining overlap. After several targeted "
|
||
"experiments, {ph0}a clean rebuild confirmed that the full function matched{ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:312
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"What interests me is how the discovery and the tests worked together. The lifetime "
|
||
"hypothesis gave the agent a new direction; compiler feedback helped it refine that "
|
||
"hypothesis into a source arrangement that matched."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:318
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "A different control-flow graph"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th09/commit/f8d12d72aaf02212ee1b585a8f3f86d7ed000269"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#: website/public/blog/reverse-engineering-models/index.html:319
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"A second TH09 function shows why that new direction can matter. Here, the obstacle was"
|
||
" how several branches shared their final work. {ph0}GPT-6.1-Sol's earlier work{ph1} "
|
||
"got parts of the function to match, but the branches still joined up differently from "
|
||
"the original."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th09/commit/da33a646221198ceb7f3df2b96e2ca0e9b2f705f"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/N0zoM1z0/th09/commit/5f825b28a862f8e1a6d4aea2f78a42f04c09a1c0"
|
||
#. >
|
||
#. {ph3}: </a >
|
||
#: website/public/blog/reverse-engineering-models/index.html:330
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}GPT-6-Astra changed the surrounding control-flow graph{ph1}. The main paths now "
|
||
"led to a shared final update and return. In that source structure, the compiler "
|
||
"combined the branches in the same way as the original. The complete function matched, "
|
||
"and a {ph2}separate rebuild check confirmed it{ph3}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/reverse-engineering-models/index.html:342
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}Changing the representation opened a more productive search space.{ph1} Both "
|
||
"cases give me a reason to take general model capability seriously: an agent can keep "
|
||
"trying local variations for a long time before finding a better way to express the "
|
||
"surrounding work."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:351
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"At the same time, the later sessions started with earlier source and recorded "
|
||
"failures. That accumulated work was part of their advantage. The history lets us "
|
||
"inspect the discoveries and their checks; a controlled comparison would help separate "
|
||
"the effect of the model from the experience it inherited."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:358
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"This is where the question becomes interesting to me. Some of the progress came from "
|
||
"finding a new representation, while much of the remaining work involved testing source"
|
||
" forms against a familiar compiler. How much needs broad reasoning ability, and how "
|
||
"much could a model learn through repeated experience with that compiler and code?"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:368
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Why might a specialist do well?"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:369
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Touhou gives us a concrete reason to expect that experience to help. Much of the game "
|
||
"code comes from the same author, ZUN, so recurring habits are a reasonable starting "
|
||
"assumption. The repositories back that up with useful examples: related loops and "
|
||
"helper arrangements have supplied hypotheses across games."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:376
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Those source patterns become more specific when we include the compiler. Under a "
|
||
"particular version and set of options, small changes in source can produce repeatable "
|
||
"differences in machine code. Some of those differences are surprisingly obscure."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/N0zoM1z0/th095/commit/26bb64bdb093a13f73abd0ee8ae7ce199ee4658f"
|
||
#. >
|
||
#. {ph3}: <code>Supervisor::LoadDat</code>
|
||
#. {ph4}: </a >
|
||
#: website/public/blog/reverse-engineering-models/index.html:382
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"In TH095, for example, {ph0}even the name used for a local variable could change where"
|
||
" VC7.1 stored it{ph1}. Moving the declaration alone did not solve the layout, but an "
|
||
"earlier background function had revealed a naming pattern that affected the compiler's"
|
||
" choice. That gave us a more promising hypothesis for {ph2}the reconstruction of "
|
||
"{ph3}{ph4}."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:396
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Reusing that pattern for the file-size variable produced the required layout without "
|
||
"adding storage. The full function then matched."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:401
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"This is the sort of narrow detail a general model may not know when it arrives. A "
|
||
"specialist trained on this compiler could encounter many such cases and learn which "
|
||
"source variations are worth testing first."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:407
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"The opportunity is especially clear in final matching problems where we already "
|
||
"understand the behavior. We are then asking which ordinary source form this compiler "
|
||
"turns into the observed instructions. Specialization could help the model propose "
|
||
"those forms more efficiently, while the target still determines which hypotheses "
|
||
"survive."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th04/commit/6dce0a79d5b931f0e2a08475b90e0c33d2321b98"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#: website/public/blog/reverse-engineering-models/index.html:415
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"The useful patterns would have to retain their context, though. TH08 uses an earlier "
|
||
"Visual C++ version than TH095 and TH09. TH04 uses a different DOS-era compiler, and "
|
||
"its {ph0}player reconstruction{ph1} needed different hypotheses about source patterns "
|
||
"and how the compiled code was combined into an executable. Shared authorship gives us "
|
||
"a prior, but each target tells us whether it applies. Distinguishing those contexts is"
|
||
" part of what a specialist would need to learn."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:431
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Where should that experience live?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../touhou-reconstruction/">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/reverse-engineering-models/index.html:432
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Before deciding to teach those patterns through model training, I would look at the "
|
||
"knowledge we already keep in the repository. In the {ph0}previous essay{ph1}, I wrote "
|
||
"about it becoming the project's working memory. That memory includes compiler lessons,"
|
||
" along with the source and failed experiments that made them useful."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:441
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"By retrieving that record, an agent can start with a known result and inspect how we "
|
||
"reached it. It can also avoid alternatives that have already failed in the same "
|
||
"context. The starting point improves without changing the model's weights."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th09/commit/1eb843383941d00065622a9e353146c4bb96979e"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#: website/public/blog/reverse-engineering-models/index.html:447
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"When reconstructing TH09's enemy-spawn function, a {ph0}GPT-6-Luna-max session{ph1} "
|
||
"drew a hypothesis from TH08's corresponding source family. That earlier source "
|
||
"suggested how to structure the loop and handle failures within it. TH09's own evidence"
|
||
" supplied the game-specific details, and clean rebuilds confirmed the complete match."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/reverse-engineering-models/index.html:458
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}\"The model did not know that compiler quirk\" and \"the model could not use it\""
|
||
" are different problems.{ph1} Retrieval may solve the first, but turning that fact "
|
||
"into a useful candidate still takes work. And if the candidate fails, the model must "
|
||
"decide what the result means for its next attempt. Knowing the relevant pattern is "
|
||
"only the beginning of that process."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:468
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"For that reason, I would include a smaller general model with good retrieval in any "
|
||
"comparison. Giving it the same library of experience would help us identify what "
|
||
"training adds: better candidate generation, better decisions after feedback, or both."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:476
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Learning the next useful experiment"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:477
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Those decisions after feedback are what I would most like to study. In agentic "
|
||
"reconstruction, the model proposes an explanation and tests it against the program. "
|
||
"Even when the candidate fails, the result can narrow the remaining possibilities and "
|
||
"suggest a more useful next experiment."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:484
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Consider the temporary-results example again. Its final source shows the arrangement "
|
||
"that worked, but the route to that source contains more information. Each of the "
|
||
"following experiments helped identify what still needed to change."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:497
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Experiment"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:498
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "What its result taught us"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:503
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Try a different way to copy the results"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:504
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "The copy code changes, but the function still differs."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:509
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Use the returned values directly"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:510
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Copying follows the original pattern, but temporary storage still differs."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:516
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Keep the temporary results alive together"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:517
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"They get separate storage, but one still overlaps a value used later for collision "
|
||
"checks."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:523
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Keep the collision-check value separate"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:524
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "A clean rebuild confirms the complete match."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:529
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Selected experiments from the attack-function reconstruction above, grouped by what "
|
||
"they taught us."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:533
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"A training record that keeps this sequence can teach more than the final source alone."
|
||
" It connects each proposed change to an observed result and the next decision. Keeping"
|
||
" ineffective variations matters too: they tell a later agent which hypotheses have "
|
||
"already been tested in that context."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/reverse-engineering-models/index.html:540
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}I would want the model to learn how to use feedback.{ph1} A neutral result is a "
|
||
"reason to reconsider the variation; a changed mismatch may point to another cause. "
|
||
"When local edits stop being informative, the agent should be able to revisit the "
|
||
"source representation or inspect the evidence again."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:549
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Learning to make those choices requires autonomy. Sometimes the useful next step is "
|
||
"inspecting another caller rather than compiling another edit. A rigid sequence of "
|
||
"required rewrites would remove that choice, along with part of the behavior we want "
|
||
"the model to learn."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:558
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Why RE is interesting for reinforcement learning"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:559
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Bounded reconstruction gives us a practical environment for studying these choices. "
|
||
"Once the target and compiler are pinned, many source experiments produce quick, "
|
||
"repeatable feedback. The agent can compile a candidate, inspect the mismatch and use "
|
||
"that observation to choose its next step."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:566
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Reinforcement learning could train that decision-making process through the feedback "
|
||
"it receives. A candidate accepted by a defined check gives us a concrete outcome, "
|
||
"while the sequence of attempts lets us observe how much work it took to reach it."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://aclanthology.org/2024.emnlp-main.203/" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a href="https://arxiv.org/html/2606.16162v1">
|
||
#. {ph3}: </a>
|
||
#: website/public/blog/reverse-engineering-models/index.html:572
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"There is already research supporting this direction. {ph0}LLM4Decompile{ph1} studies "
|
||
"models specialized for decompilation. {ph2}AutoDecompiler{ph3} trains multi-turn "
|
||
"refinement using compiler and execution feedback. Their studies focus on functional "
|
||
"recovery. For this work, I would use them as a starting point for the related task of "
|
||
"finding source that matches a historical compiler's output."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th08/commit/af9cb1d3e839b15a78b47ac1701506083cc82847"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#: website/public/blog/reverse-engineering-models/index.html:584
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"To reach such a well-defined task, though, we may first need to establish what a "
|
||
"function owns or devise a new runtime measurement. In TH08, for example, a "
|
||
"{ph0}collision difference led back to how the original program handled floating-point "
|
||
"calculations{ph1}. Before the agent could test a useful correction, it had to work out"
|
||
" what to measure."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:595
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"This suggests another role for a broadly capable model: helping make the problem "
|
||
"checkable in the first place. Once that check exists, we can investigate how far a "
|
||
"learned search policy can get with it."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:603
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "When the oracle is wrong"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:604
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Once we train against that check, its coverage becomes part of what the model learns. "
|
||
"I call the reference or checker an oracle. Even if it gives a repeatable answer, we "
|
||
"still need to understand what that answer covers."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:610
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"TH08 showed how much can hide outside that coverage. Some reconstructed functions "
|
||
"passed their exact comparisons with wrong floating constants. The comparator adjusted "
|
||
"relocated addresses before checking instructions, but it checked the values behind "
|
||
"those addresses only when they had been explicitly recorded for verification. Other "
|
||
"literal references could pass without their values being examined."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th08/commit/a393f400786e4cc6cbb1000af0dad3276da12c78"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <code>1.0f</code>
|
||
#. {ph3}: <code>32.0f</code>
|
||
#: website/public/blog/reverse-engineering-models/index.html:619
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"To close that gap, a {ph0}wider audit{ph1} found incorrect constants in functions that"
|
||
" had already been accepted. In one calculation, the reconstructed source added {ph2} "
|
||
"where the original added {ph3}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/reverse-engineering-models/index.html:629
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}A learner rewarded by the old check could learn to produce the wrong "
|
||
"reconstruction.{ph1} We had not trained an RL model against this oracle; the observed "
|
||
"failure was in the check itself. But using that check as a reward would have made the "
|
||
"same blind spot part of the learning environment."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://arxiv.org/html/2609.05370v1" >
|
||
#. {ph1}: </a >
|
||
#: website/public/blog/reverse-engineering-models/index.html:639
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"A functional test can have a similar blind spot. {ph0}Differential-fuzzing research on"
|
||
" LLM decompilers{ph1} has found behavior differences beyond the supplied tests. "
|
||
"Passing those tests therefore needs to be read in terms of the cases they exercise, "
|
||
"just as an instruction match needs to be read in terms of the bytes and data it "
|
||
"checks."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:649
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Before using either kind of check as a reward, I would test it with deliberate "
|
||
"failures. I would also keep final acceptance outside the candidate's editable source, "
|
||
"so the model has to satisfy the check through its reconstruction. Otherwise, something"
|
||
" like a byte array copied from the target could satisfy a naive score without "
|
||
"recovering useful source."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/reverse-engineering-models/index.html:657
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}Improving the learner and improving its oracle belong to the same research "
|
||
"problem.{ph1} As the learner gets better at optimizing the feedback we give it, "
|
||
"understanding that feedback becomes more important too."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:667
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "A comparison worth running"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:668
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"With those checks in place, I would start the comparison on a fixed VC7.1 task family."
|
||
" First, I would establish baselines for a strong general model and a smaller one. "
|
||
"Adding repository knowledge to the smaller model would show what retrieval changes. "
|
||
"From there, supervised specialization and an RL-trained version would let us examine "
|
||
"what training adds."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:676
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"To make those comparisons informative, each model would receive the same target "
|
||
"evidence and tools. For the training-specific comparisons, I would keep the base model"
|
||
" and available knowledge fixed as well. Repeated trials would help distinguish a "
|
||
"reliable search strategy from a lucky candidate."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:683
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"I would then separate two starting conditions: reconstructing a function from its "
|
||
"instructions, and closing the last few differences in maintained source. A specialist "
|
||
"might be excellent at the second task while a general model does much of the work "
|
||
"needed to reach it. Measuring them separately would reveal that division of work."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:691
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Both tasks need genuinely held-out examples. Because related Touhou games share engine"
|
||
" code, holding out a game's name would still allow nearly identical functions to "
|
||
"appear in training. I would instead hold out source families and keep their accepted "
|
||
"answers out of both training and retrieval."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:698
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"On those examples, the outcome would be complete, independently validated matches. "
|
||
"Giving each model the same candidate or compile budget would help compare search "
|
||
"quality. Measuring elapsed time and total cost, including compilation, would tell us "
|
||
"whether that quality produces an efficient workflow. Training costs would need their "
|
||
"own accounting too."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:706
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Both views matter because a cheaper proposal can become an expensive workflow if it "
|
||
"causes more uninformative compiles. Conversely, a slower model may pay for itself by "
|
||
"finding a useful experiment sooner. The comparison should capture those costs."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th09/commit/ab72fd77728293fc0beacfc656ca701b0e266016"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#: website/public/blog/reverse-engineering-models/index.html:712
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"Counting accepted results also keeps intermediate progress in perspective. One TH09 "
|
||
"{ph0}replay-save candidate{ph1} looked promising because the compiled function had the"
|
||
" expected size, but a full comparison still found substantial differences. Changes in "
|
||
"how the compiler arranges instructions can also make a candidate look closer without "
|
||
"resolving the underlying problem. Such diagnostics can guide the next experiment, but "
|
||
"I would validate any reward for \"getting closer\" against the full acceptance check."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:727
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"I would be interested in the pattern across these results. If a specialist does well "
|
||
"within a familiar compiler family, does that advantage survive a toolchain change? And"
|
||
" once both models have good retrieval, how much does training still add? The answers "
|
||
"would help us decide where each kind of model is most useful."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:736
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "What kind of agent does this suggest?"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:737
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"If the models turn out to help at different stages, a useful arrangement might be a "
|
||
"broad agent with access to a specialist. Once a task becomes a familiar compiler "
|
||
"search, it could ask the specialist for candidates. If the results stop making sense, "
|
||
"the broader agent could return to the target evidence or investigate the measurement "
|
||
"itself."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:745
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"In that arrangement, specialization becomes a tool the agent can choose as the "
|
||
"investigation develops. The agent keeps the freedom to change direction that made the "
|
||
"earlier breakthroughs possible."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:750
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"This follows naturally from the industrial shift I described in the previous essay. "
|
||
"Being able to run many more experiments changes how we organize the work. It also "
|
||
"gives us a reason to ask which decisions need broad judgment and which improve through"
|
||
" repeated experience with a particular craft."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:757
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"For now, the strongest general model has earned its place in my workflow by opening "
|
||
"problems I had left unresolved. Those successes are what make me want to examine the "
|
||
"work more closely: how much depended on the model's breadth, and how much could be "
|
||
"handled by a model trained in this particular kind of reconstruction?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/reverse-engineering-models/index.html:765
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}The repositories give us a way to test the question.{ph1} I would like to use "
|
||
"that record to build the comparison and see what we learn."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:775
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Evidence and model attribution"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:776
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"The examples describe historical function-level comparisons recorded in the linked "
|
||
"commits. Whole-game runtime checks are separate milestones. Source and matching "
|
||
"records were reviewed on 13 October 2026."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>gpt-dots</code>
|
||
#. {ph1}: <code>gpt-web</code>
|
||
#: website/public/blog/reverse-engineering-models/index.html:782
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"The TH09 label {ph0} identifies GPT-6-Astra. {ph1} changed with the model used at the "
|
||
"time, so that label alone does not identify an individual run. Explicit model names in"
|
||
" the other cited commits establish their recorded attribution; the histories do not "
|
||
"contain uniform per-run cost or effort measurements."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/N0zoM1z0/th09/commit/de63c0f9121963f3a6b1ab5471c4878625fd3425"
|
||
#. >
|
||
#. {ph3}: </a >
|
||
#. {ph4}: <a
|
||
#. href="https://github.com/N0zoM1z0/th09/commit/52929ed7c299f1a5f29cc13964e22510145fd616"
|
||
#. >
|
||
#. {ph5}: </a >
|
||
#: website/public/blog/reverse-engineering-models/index.html:791
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}TH09 temporary lifetimes:{ph1} the {ph2}earlier context review{ph3} and "
|
||
"{ph4}complete cold reconstruction{ph5}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/N0zoM1z0/th09/commit/f8d12d72aaf02212ee1b585a8f3f86d7ed000269"
|
||
#. >
|
||
#. {ph3}: </a >
|
||
#. {ph4}: <a
|
||
#. href="https://github.com/N0zoM1z0/th09/commit/da33a646221198ceb7f3df2b96e2ca0e9b2f705f"
|
||
#. >
|
||
#. {ph5}: </a >
|
||
#. {ph6}: <a
|
||
#. href="https://github.com/N0zoM1z0/th09/commit/5f825b28a862f8e1a6d4aea2f78a42f04c09a1c0"
|
||
#. >
|
||
#. {ph7}: </a >
|
||
#: website/public/blog/reverse-engineering-models/index.html:803
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}TH09 Front callback:{ph1} {ph2}non-exact diagnostic regions{ph3}, {ph4}Astra's "
|
||
"new graph{ph5} and its {ph6}accepted recompile replay{ph7}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/N0zoM1z0/th095/commit/26bb64bdb093a13f73abd0ee8ae7ce199ee4658f"
|
||
#. >
|
||
#. {ph3}: </a >
|
||
#. {ph4}: <a
|
||
#. href="https://github.com/N0zoM1z0/th04/commit/6dce0a79d5b931f0e2a08475b90e0c33d2321b98"
|
||
#. >
|
||
#. {ph5}: </a >
|
||
#. {ph6}: <a
|
||
#. href="https://github.com/N0zoM1z0/th09/commit/1eb843383941d00065622a9e353146c4bb96979e"
|
||
#. >
|
||
#. {ph7}: </a >
|
||
#: website/public/blog/reverse-engineering-models/index.html:819
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}Compiler knowledge:{ph1} {ph2}TH095 identifier-bucket reuse{ph3}, {ph4}TH04 "
|
||
"player source and linker order{ph5} and {ph6}Luna's TH09 enemy-spawn closure{ph7}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/N0zoM1z0/th08/commit/a393f400786e4cc6cbb1000af0dad3276da12c78"
|
||
#. >
|
||
#. {ph3}: </a >
|
||
#. {ph4}: <a
|
||
#. href="https://github.com/N0zoM1z0/th08/commit/af9cb1d3e839b15a78b47ac1701506083cc82847"
|
||
#. >
|
||
#. {ph5}: </a >
|
||
#. {ph6}: <a
|
||
#. href="https://github.com/N0zoM1z0/th09/commit/ab72fd77728293fc0beacfc656ca701b0e266016"
|
||
#. >
|
||
#. {ph7}: </a >
|
||
#: website/public/blog/reverse-engineering-models/index.html:835
|
||
#, python-brace-format
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"{ph0}Checks and diagnostics:{ph1} {ph2}TH08 floating-literal audit{ph3}, {ph4}TH08 "
|
||
"numerical investigation{ph5} and {ph6}TH09 replay-save reconstruction{ph7}."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:852
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"The proposed specialist and RL comparisons are future experiments. The project "
|
||
"histories motivate them; no trained specialist was evaluated for this essay."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:6
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Does reverse engineering need a bigger model? | REA"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:7
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid ""
|
||
"What Touhou reconstruction taught me about general models, specialist models and "
|
||
"learning to propose better hypotheses from compiler feedback."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:240
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:253
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Models and reverse engineering essay"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:491
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Selected reconstruction experiments"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/reverse-engineering-models/index.html:876
|
||
msgctxt "page:blog/reverse-engineering-models/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:103
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="../">
|
||
#. {ph3}: </a>
|
||
#: website/public/blog/touhou-reconstruction/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "{ph0}Home{ph1} / {ph2}Blog{ph3} / Touhou reconstruction"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:198
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Essay · Touhou reconstruction"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:199
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "The industrial revolution in reverse engineering."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:200
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "By N0zoM1z0 · 10 October 2026"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:202
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Takeaway"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:204
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}Give agents autonomy over the investigation.{ph1} Set a clear goal and acceptance"
|
||
" criteria, then let the agent decide what to try next."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:209
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}Use the repository and Git as working memory.{ph1} Keep the reasoning with the "
|
||
"code. Git checkpoints let the next session continue after the conversation ends."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:214
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}Let evidence decide what you claim.{ph1} A confident explanation still needs "
|
||
"testing. “Unknown” is a valid answer when the evidence is incomplete."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:219
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}Test the oracle too.{ph1} Try cases it should reject. If it misses a bug, revisit"
|
||
" the earlier results that depended on it."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/touhou-reconstruction/index.html:224
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}We are in the early days of RE's industrial revolution.{ph1} The methods are "
|
||
"still taking shape. There is plenty left to explore."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:236
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "How experience compounds"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:237
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "{ph0}Human direction{ph1} · Goal and acceptance criteria"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:325
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Autonomy"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:326
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Agent"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/blog/touhou-reconstruction/index.html:327
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Choose an experiment.{ph0}Propose a hypothesis."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:330
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Verification"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:331
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Oracle"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/blog/touhou-reconstruction/index.html:332
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Test against a{ph0}concrete reference."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:335
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Repository"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:336
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Working memory"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/blog/touhou-reconstruction/index.html:337
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Code, evidence,{ph0}checks and lessons."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#. {ph1}: <strong>
|
||
#. {ph2}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:339
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Mismatch{ph0}{ph1}Revise the hypothesis{ph2}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#. {ph1}: <strong>
|
||
#. {ph2}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:342
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "A better{ph0}{ph1}starting point{ph2}"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:345
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Reuse"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:346
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "{ph0}Pass{ph1} · Keep the result and its evidence"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:358
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"Each project leaves the next with a better starting point. That includes fixing the "
|
||
"checks when we discover a gap."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:365
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "In this article"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#august">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/touhou-reconstruction/index.html:367
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "{ph0}August 2026{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#th08">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/touhou-reconstruction/index.html:368
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "{ph0}TH08: the continuation{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#different-approaches">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/touhou-reconstruction/index.html:369
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "{ph0}Two approaches{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#th095">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/touhou-reconstruction/index.html:370
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "{ph0}TH095: compounding{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#th04">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/touhou-reconstruction/index.html:371
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "{ph0}TH04: across architectures{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#semantic-reconstruction">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/touhou-reconstruction/index.html:372
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "{ph0}From exact to readable{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#industrial-shift">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/touhou-reconstruction/index.html:375
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "{ph0}The industrial shift{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#possibilities">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/touhou-reconstruction/index.html:376
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "{ph0}What becomes possible{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:381
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "What changed in August 2026"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:382
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"Before this work, I had done a lot of manual reverse engineering. I would inspect a "
|
||
"function until I had an explanation, then test that explanation against the program. "
|
||
"Getting further meant spending more of my own time on the next function. It also meant"
|
||
" keeping an increasingly large picture in my head."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:389
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"Most of my RE work is on games. I reconstruct them so their behavior can be understood"
|
||
" and eventually carried into a port or a mod. That is the experience behind this "
|
||
"article. The method can be useful elsewhere, but each field needs to establish what it"
|
||
" can check against a reliable reference."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:396
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"In August 2026, I started exploring agent-driven RE seriously. I wanted to see how far"
|
||
" an agent could get with access to the program and ordinary development tools. Touhou "
|
||
"reconstruction gave me a substantial project in which to find out."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:402
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The early progress was startling. An investigation could keep moving without me "
|
||
"choosing every individual step. A failed comparison might send the agent to another "
|
||
"caller. It could write a small diagnostic and use the result to decide what to try "
|
||
"next. Giving it that freedom made a difference: I could spend more attention on the "
|
||
"project's direction and on whether its checks were trustworthy."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:411
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The pace got my attention first. Then I began wondering what would survive beyond the "
|
||
"current project. Would the next game benefit from everything we had just learned?"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:418
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "TH08: building on human work"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/N0zoM1z0/th08">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="https://github.com/GensokyoClub/th08" >
|
||
#. {ph3}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:419
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}TH08{ph1}, Imperishable Night, began as a continuation of {ph2}GensokyoClub's "
|
||
"reconstruction{ph3}. Their public source gave me a substantial foundation. It came "
|
||
"with knowledge of the build and a history of contributions that I preserved in the "
|
||
"continuation."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:428
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The imported history ends at the public 10 August checkpoint. My independent "
|
||
"continuation began on 13 August. By 19 August, the ledger recorded source for all "
|
||
"1,107 identified game functions."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:433
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"A playable Linux reconstruction port was committed on 24 August, roughly eleven days "
|
||
"after the continuation began. A Web edition followed. The native Linux 64-bit release "
|
||
"arrived on 30 August."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:438
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"What struck me was that the work had reached a program people could run. Getting there"
|
||
" required following problems beyond an individual function. Even when two functions "
|
||
"looked correct in isolation, they could accidentally use separate copies of state that"
|
||
" should have been shared."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:445
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"This made reference checks central to the work. I call them {ph0}oracles{ph1}. A code "
|
||
"comparison can tell us whether a reconstructed function reproduces the original "
|
||
"instructions. A runtime check can tell us whether an exercised route reaches the "
|
||
"expected state. The agent proposes an explanation and tests it; a mismatch gives it "
|
||
"something specific to investigate."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:453
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "An exact match with the wrong constant"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:454
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"An oracle is software someone wrote. TH08 gave me a clear reminder of how much can "
|
||
"depend on that software."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>0.0</code>
|
||
#. {ph1}: <code>128.0</code>
|
||
#: website/public/blog/touhou-reconstruction/index.html:458
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"In September, a bug reported by a downstream Switch port led back to item auto-"
|
||
"collection. The reconstructed source checked player power against {ph0}. The original "
|
||
"used {ph1}, the maximum-power threshold."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:464
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"Normal power is non-negative, so the reconstructed power check was effectively always "
|
||
"satisfied. Above the collection line, the game could attract items without requiring "
|
||
"maximum power. The other exceptions in the condition were correct. This one constant "
|
||
"changed the behavior."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/touhou-reconstruction/index.html:471
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "{ph0}Yet the function had already passed the exact comparison.{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:477
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"A rebuild can put a constant at a different address. The comparison tool accounted for"
|
||
" that by adjusting addresses in the compiled instructions before comparing them with "
|
||
"the original. But it never checked the floating-point value stored at the referenced "
|
||
"address."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>128.0</code>
|
||
#. {ph1}: <code>0.0</code>
|
||
#: website/public/blog/touhou-reconstruction/index.html:484
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"That left a hole in the check. It could point the reconstructed instruction at the "
|
||
"original's {ph0} while the source still said {ph1}. The instruction bytes matched. The"
|
||
" source meant something different."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/N0zoM1z0/th08/pull/11" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a href="https://github.com/N0zoM1z0/th08/pull/13">
|
||
#. {ph3}: </a>
|
||
#: website/public/blog/touhou-reconstruction/index.html:490
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The {ph0}2 September fix{ph1} corrected the source and made the comparison check the "
|
||
"referenced constant's actual bytes. A {ph2}wider audit{ph3} then examined 1,548 "
|
||
"floating-literal references. It found another twelve incorrect references across five "
|
||
"accepted functions."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:501
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The comparison now checks every such floating literal. Its tests include deliberately "
|
||
"wrong values to make sure they are rejected. We also had to revisit results that had "
|
||
"passed the weaker check."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:506
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}The oracle needed reconstructing too.{ph1} Repairing it was part of repairing the"
|
||
" game."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:510
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"That matters when the team is mostly one person working with agents. I cannot "
|
||
"personally inspect every line they produce, so much of my confidence rests on their "
|
||
"checks. A shared oracle's blind spot can affect many investigations before I notice "
|
||
"it. I have to understand what the checker actually verifies and test it against cases "
|
||
"that ought to fail."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/touhou-reconstruction/index.html:518
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"As the work continued, those checks became part of the repository. So did the reasons "
|
||
"for source changes and notes that let a later session pick up where an earlier one "
|
||
"stopped. {ph0}The repository was becoming the project's working memory.{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/touhou-reconstruction/index.html:527
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}A successful batch gave us both recovered code and a better environment for the "
|
||
"next batch.{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:535
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Two different ideas of reconstruction"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://web.archive.org/web/20260909051514/https://github.com/GensokyoClub/th08#important-
|
||
#. notice" >
|
||
#. {ph1}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:536
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"GensokyoClub's {ph0}public README{ph1} makes its disagreement with this kind of work "
|
||
"explicit. The notice announces that further development will happen privately until "
|
||
"completion. One passage reads:"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:547
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The rise of grifters (AI decompilations and ports) in this space taking from our work "
|
||
"paints a bad image for future decompilation efforts…"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:553
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The notice also describes the psychological toll on the maintainers. Their "
|
||
"contribution policy excludes pull requests produced primarily with AI. They have put "
|
||
"their free time into difficult work, and that work helped make my continuation "
|
||
"possible. I respect the effort behind it. The disagreement I want to discuss is about "
|
||
"how reconstruction should proceed and how a contribution should be judged."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:562
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"In the manual workflow I knew, developing an understanding of a function and "
|
||
"reconstructing it usually fell to the same person. A project relied heavily on that "
|
||
"person's expertise. Trust in the contributor mattered because so much of the reasoning"
|
||
" happened while they worked."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:569
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"Existing projects already preserve knowledge in their source and build tools. What "
|
||
"changed for me was that an agent could use that knowledge to pursue the next "
|
||
"investigation on its own."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:574
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"In my continuation, I decide the objective and the standard for accepting a result. "
|
||
"The agent has broad freedom to investigate. Its proposed reconstruction then has to "
|
||
"survive the relevant checks. I want another person to be able to examine why we chose "
|
||
"an implementation, even if an agent did most of the work."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:581
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"This can be a difficult transition. Years of careful work may become the foundation "
|
||
"for a continuation that moves much faster. That raises real questions about credit. It"
|
||
" also changes what maintainers need to know before accepting a contribution."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:587
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The industrial analogy helps me think about this. In a craft, much of the process "
|
||
"depends on the skill of the person carrying it out. Machinery changes where that skill"
|
||
" is needed. Someone still has to design the process and recognize when its output is "
|
||
"wrong. Different communities can choose how much of that change they want to take on."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:595
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"My choice is to continue openly, with the inherited work credited and its history "
|
||
"preserved. I want the new work to be reviewable. That gives us a way to ask how far "
|
||
"this approach can go and to learn from what goes wrong along the way."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/GensokyoClub/th08/blob/e874b98e210b3be1ed21c5e03d54b883eac5069c/README.md#important-
|
||
#. notice" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/GensokyoClub/th08/blob/f345c7dee07b849f2ff93a0029ab5ede126bf12c/CODE_OF_CONDUCT.md"
|
||
#. >
|
||
#. {ph3}: </a >
|
||
#. {ph4}: <a
|
||
#. href="https://github.com/N0zoM1z0/th08/blob/d2a00f4acb4a13916e07a00bd13f714961714628/README.md#credits-
|
||
#. and-provenance" >
|
||
#. {ph5}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:601
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"Source: GensokyoClub's {ph0}README notice{ph1}, checked on 10 October 2026, and its "
|
||
"{ph2}contribution policy{ph3}. The quotation is a shortened excerpt. TH08's "
|
||
"{ph4}credits and provenance{ph5} record the continuation boundary."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:619
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "TH095: experience starts compounding"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/N0zoM1z0/th095">
|
||
#. {ph1}: </a>
|
||
#: website/public/blog/touhou-reconstruction/index.html:620
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}TH095{ph1}, Shoot the Bullet, made the value of that experience much easier to "
|
||
"see. Its repository began on 29 August with zero confirmed game functions in the "
|
||
"ledger. We still had to learn the game. But we already knew much more about how to "
|
||
"begin a reconstruction and how to keep it moving."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:628
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"By 7 September, all 697 identified game functions had source. By 8 September, 696 had "
|
||
"been accepted as exact comparisons. The whole program linked on 9 September. The "
|
||
"Windows i386 reconstruction was marked playable on 10 September, about twelve days "
|
||
"after initialization."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:635
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"I found this more exciting than the first project's speed. A fresh target could "
|
||
"benefit from work done on another game. The experience was already present in the "
|
||
"tools and in the way the project was organized."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:641
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"For example, TH08 had taught us to pay attention to the assembled program early. If "
|
||
"several recovered functions depend on the same state, their isolated comparisons leave"
|
||
" an important question open. We need to see them working together. That lesson helped "
|
||
"shape how we approached TH095's whole-program build."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:648
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"A lesson that stays in my head is useful while I am there. Once it becomes a check "
|
||
"that another session can run, it can keep helping after I have moved on. The next "
|
||
"agent can use the result without repeating the investigation that led to it."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:654
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The floating-literal bug belongs in that memory too. It explains why checking a "
|
||
"reference also requires checking the data behind it. Keeping that correction with the "
|
||
"code helps later projects avoid inheriting the old check's blind spot."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/touhou-reconstruction/index.html:660
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}The method becomes part of the starting material for the next game.{ph1} We can "
|
||
"spend more of the next project's effort on what is actually new about its target."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:668
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The same benefit is available to people joining later. They can inspect a decision and"
|
||
" rerun its check before continuing the work. They do not have to reconstruct the "
|
||
"entire project's history to find out why the source looks the way it does."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:676
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "TH04: the workflow survives a different architecture"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/N0zoM1z0/th04">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="https://github.com/nmlgc/ReC98">
|
||
#. {ph3}: </a>
|
||
#: website/public/blog/touhou-reconstruction/index.html:677
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}TH04{ph1}, Lotus Land Story, took this work into the PC-98 DOS era. The target "
|
||
"was now a 16-bit environment with four cooperating programs. Understanding its "
|
||
"hardware behavior required different evidence from the Windows games. Existing "
|
||
"{ph2}ReC98 work{ph3} gave us valuable knowledge and source material here too."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:686
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The DOS reconstruction is now working. In my manual testing, I played complete Normal "
|
||
"routes through their endings and checked saves. The current work is a native 64-bit "
|
||
"port. Establishing a working DOS version first gives that port a reference."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:692
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The architecture changed what we needed to investigate. It also changed the compiler "
|
||
"and runtime against which we checked our work. But the agent could still follow a "
|
||
"question through to a result and let that result guide the next experiment."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:698
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"Consider the transition from gameplay to an ending. We need to know what state carries"
|
||
" across that boundary and which program is responsible for it. That is something we "
|
||
"can investigate against the DOS product. Once the evidence and checks are available, "
|
||
"an agent can work through the question much as it did on a Windows title."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:706
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"This is why TH04 matters to the argument. A substantial platform change did not force "
|
||
"us to start over with a new way of working. The architecture defined the problem; the "
|
||
"workflow still gave us a way to solve it."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:712
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"For the 64-bit port, we can now examine the new implementation against behavior "
|
||
"already recovered on DOS. The knowledge from reconstruction gives the port something "
|
||
"to build on."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th04/blob/bb9faca54e2eb3c0d6c757c75d59ac29d2cd5e93/docs/RE_HANDOFF.md"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a href="https://github.com/N0zoM1z0/th04/tree/port/modern-64" >
|
||
#. {ph3}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:717
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"Project state as of 10 October 2026: {ph0}DOS reconstruction and manual testing{ph1} ·"
|
||
" {ph2}64-bit port{ph3}. The port remains in development."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:730
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "From exact code to readable code"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:731
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Once a reconstruction works, I want someone else to be able to understand it."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:735
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"To me, assembly and raw offsets can feel like old friends. I realise this is a "
|
||
"slightly unusual definition of “readable.” Most people would prefer to follow the "
|
||
"game's logic without keeping the executable's memory layout in their head."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:741
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"That is where {ph0}semantic reconstruction{ph1} comes in. A recovered field may still "
|
||
"be known mainly by its offset. We follow how the game uses it until we can explain its"
|
||
" role. Then we can give it a meaningful name and a type that fits the evidence. We "
|
||
"keep the reasoning with the source so the next person can see where that "
|
||
"interpretation came from."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:749
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"This becomes especially important for a port. An absolute address tells me where "
|
||
"something lived in the old executable. It gives a 64-bit implementation little help in"
|
||
" deciding which object should own that state. To move the behavior safely, we need to "
|
||
"recover the relationship behind the old memory access."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:756
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "The order I now use is:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:758
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}Recover an exact baseline.{ph1} Compile the reconstructed pieces with the "
|
||
"historical compiler. Compare the relevant code and data with the original executable. "
|
||
"Record unresolved differences so the next phase has a clear starting point."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:765
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}Build and play it on the original platform.{ph1} Link those pieces into the real "
|
||
"program using the original architecture and compiler. Exercise important gameplay "
|
||
"paths. This is where we can find problems with shared state or initialization that an "
|
||
"isolated function comparison missed."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/touhou-reconstruction/index.html:772
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}Reconstruct the semantics against both references.{ph1} Take one coherent part of"
|
||
" the game at a time and establish what its recovered source means. Improve its "
|
||
"representation while preserving the exact comparisons and the playable historical "
|
||
"build."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:781
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}Make the modern port.{ph1} Move the established behavior into the new "
|
||
"environment, such as a native 64-bit build. The reconstructed original-platform game "
|
||
"remains a reference for comparing how the port behaves."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/blog/touhou-reconstruction/index.html:788
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The playable build from the second stage becomes a {ph0}second oracle{ph1} during the "
|
||
"third. The first oracle checks whether our changed source still reproduces the "
|
||
"relevant original code and data. The second checks that the reconstructed program "
|
||
"still builds and behaves correctly along the paths we exercise."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:796
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"They catch different mistakes. A type change can alter the generated instructions. An "
|
||
"ownership change can leave two parts of the game using different copies of state. "
|
||
"Keeping both checks available gives the agent a concrete failure to investigate before"
|
||
" carrying a refactor further."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:803
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"A name needs evidence of its own. An exact comparison cannot tell us whether a field "
|
||
"really means “invulnerability time.” We have to establish that from how the game "
|
||
"writes and uses it. If the meaning remains uncertain, a neutral name is more helpful "
|
||
"to the next reader than a confident guess."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-
|
||
#. factory/blob/717e1b8560783ed17a39fdf159d30aa16bb307a7/docs/semantic-
|
||
#. reconstruction.md" >
|
||
#. {ph1}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:810
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"We learned this order through the projects. TH08 already had playable ports before "
|
||
"some of its later historical-platform audits. That made certain defects harder to see."
|
||
" The {ph0}Factory's current workflow{ph1} puts the original-platform build first, so "
|
||
"semantic work can use it as a reference before porting begins."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/touhou-reconstruction/index.html:821
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}Exact reconstruction gives us a reference. Semantic reconstruction makes the "
|
||
"recovered knowledge usable.{ph1} A port can then build on both."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:830
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "What makes this an industrial shift"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:831
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"These projects changed where I spent my attention. Once agents could carry much of an "
|
||
"investigation forward, improving their working environment became one of the most "
|
||
"useful things I could do. A better tool could help with every later function that "
|
||
"needed it."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:838
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"Autonomy matters here. The useful next step often becomes clear only after a failed "
|
||
"experiment. An agent needs enough freedom to follow that result somewhere unexpected. "
|
||
"If it has to wait for me to prescribe each step, much of the work remains tied to my "
|
||
"attention."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:845
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"I expect the agent to make wrong hypotheses. What matters is whether we can test them "
|
||
"and learn from the result. A failed check should help it understand the mistake well "
|
||
"enough to try again. I still have to decide whether the accumulated evidence supports "
|
||
"a project milestone."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:852
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"REA gives the agent access to analysis tools. A question about a function's caller can"
|
||
" lead straight into inspecting that caller. The reconstruction project supplies the "
|
||
"compiler and its own reference checks. The agent can use those to test the source it "
|
||
"proposes and see where its explanation holds up."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:859
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The TH08 bug shows why those checks deserve engineering attention of their own. When "
|
||
"the same comparison is used across hundreds of functions, a gap in it can spread much "
|
||
"further than a mistake in one implementation. Testing the checker improves the "
|
||
"feedback available to all that later work."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://collection.sciencemuseumgroup.org.uk/objects/co51439/watts-
|
||
#. steam-engine-indicator" >
|
||
#. {ph1}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:866
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The industrial analogy has a useful historical example here. Boulton and Watt "
|
||
"introduced a {ph0}steam-engine indicator in 1796{ph1} to help adjust engine valves. A "
|
||
"recording version traced pressure through the piston stroke. It made the engine's "
|
||
"internal behavior available for inspection. Our comparison tools serve a similar "
|
||
"purpose: they let us examine what the machinery is doing while we improve it."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/touhou-reconstruction/index.html:879
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}We are in the early stages of this industrial shift.{ph1} Much of the "
|
||
"infrastructure is still immature. Agents can move faster than our checks were designed"
|
||
" to support, so the process has to develop alongside them. When we find a defect in a "
|
||
"shared tool, we have to repair it and revisit the results it affected. The next "
|
||
"project can then inherit a stronger tool."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:889
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"There is also a practical limit to any one conversation. It will end before a large "
|
||
"reconstruction is finished. The repository has to make it possible for another session"
|
||
" to continue without losing the reason for the last decision."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-factory" >
|
||
#. {ph1}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:895
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The {ph0}Touhou Reconstruction Factory{ph1} grew out of that need. It gives projects a"
|
||
" shared way to carry their checks and lessons forward. Work on one game can improve "
|
||
"the starting conditions for another."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:905
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"That is what makes the industrial analogy meaningful to me. Experience starts becoming"
|
||
" part of tools that others can use. Improving those tools changes how much the next "
|
||
"person—or the next agent—can get done."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:913
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "The projects we can now consider"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:914
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The pace matters because it changes the decision to begin. A game could be fascinating"
|
||
" to reverse engineer and still demand more of my own attention than I could "
|
||
"realistically give it. Many projects would stay ideas."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:920
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"Now I can see a way to keep such a project moving through repeated investigations. "
|
||
"Getting a working reconstruction makes a port more practical. Recovering readable "
|
||
"semantics makes it easier for someone else to explore a mod. The effort put into "
|
||
"understanding the game can keep paying off after the first version runs."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/blog/touhou-reconstruction/index.html:927
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"I now look at an unfamiliar program and ask: {ph0}what access, feedback and "
|
||
"accumulated knowledge would let an agent work on this reliably?{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:934
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"That question makes me consider projects I would previously have left alone. Each one "
|
||
"can improve the way we approach the next. I want to keep exploring how far that can "
|
||
"take us."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:942
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Project milestones and sources"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:943
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"The dates describe recorded project checkpoints, checked against public GitHub history"
|
||
" on 10 October 2026. Elapsed time is calendar time between commits. Source presence, "
|
||
"exact comparisons, a build and a runtime result each name a different milestone."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/N0zoM1z0/th08/commit/001bf3e9c91cc35b79c7a0e36b3565b86f494362"
|
||
#. >
|
||
#. {ph3}: </a >
|
||
#. {ph4}: <a
|
||
#. href="https://github.com/N0zoM1z0/th08/blob/15caba73df6735fc44eac4783bc61b8d098ea830/docs/PROGRESS.md"
|
||
#. >
|
||
#. {ph5}: </a >
|
||
#. {ph6}: <a
|
||
#. href="https://github.com/N0zoM1z0/th08/commit/da07b21c8cb63230142b0a66228d6aac66555f3f"
|
||
#. >
|
||
#. {ph7}: </a >
|
||
#. {ph8}: <a
|
||
#. href="https://github.com/N0zoM1z0/th08/commit/529eb1a3afa05ae36467731eaccb12e3e50e132f"
|
||
#. >
|
||
#. {ph9}: </a >
|
||
#. {ph10}: <a href="https://github.com/N0zoM1z0/th08/releases/tag/v0.2.0-linux-64bit" >
|
||
#. {ph11}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:951
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}TH08:{ph1} {ph2}13 August continuation{ph3}, {ph4}19 August source ledger{ph5}, "
|
||
"{ph6}24 August Linux port{ph7}, {ph8}26 August Web edition{ph9}, and {ph10}30 August "
|
||
"64-bit Linux release{ph11}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/N0zoM1z0/th095/blob/8c31e6f892d945423b7f7b439747a2bd915f82d8/docs/PROGRESS.md"
|
||
#. >
|
||
#. {ph3}: </a >
|
||
#. {ph4}: <a
|
||
#. href="https://github.com/N0zoM1z0/th095/blob/0fa857fb2b2ec6237732e4d6be8d0a28069c9330/docs/PROGRESS.md"
|
||
#. >
|
||
#. {ph5}: </a >
|
||
#. {ph6}: <a
|
||
#. href="https://github.com/N0zoM1z0/th095/blob/74baddfccb712d1311a4d6e7487a63cd1100452e/docs/PROGRESS.md"
|
||
#. >
|
||
#. {ph7}: </a >
|
||
#. {ph8}: <a
|
||
#. href="https://github.com/N0zoM1z0/th095/commit/33d46a0ee48f37060d973125a1a7632a40f8d998"
|
||
#. >
|
||
#. {ph9}: </a >
|
||
#. {ph10}: <a
|
||
#. href="https://github.com/N0zoM1z0/th095/blob/3442dcf29d9e0b5bef384a49bd0c9ad32a711826/docs/WHOLE_BUILD_TODO.md"
|
||
#. >
|
||
#. {ph11}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:974
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}TH095:{ph1} {ph2}29 August initial ledger{ph3}, {ph4}7 September source "
|
||
"ledger{ph5}, {ph6}8 September comparisons{ph7}, {ph8}9 September linkage{ph9}, and "
|
||
"{ph10}10 September playable-build record{ph11}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/N0zoM1z0/th04/blob/bb9faca54e2eb3c0d6c757c75d59ac29d2cd5e93/docs/RE_HANDOFF.md"
|
||
#. >
|
||
#. {ph3}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:997
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}TH04:{ph1} {ph2}10 October handoff{ph3} records the working DOS reconstruction, "
|
||
"the maintainer's complete Normal-route testing and the current 64-bit phase."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <a href="https://github.com/N0zoM1z0/th08/issues/10" >
|
||
#. {ph3}: </a >
|
||
#. {ph4}: <a
|
||
#. href="https://github.com/N0zoM1z0/th08/commit/7148a76ba224742677895c7160807a68897957d5"
|
||
#. >
|
||
#. {ph5}: </a >
|
||
#. {ph6}: <a
|
||
#. href="https://github.com/N0zoM1z0/th08/commit/a393f400786e4cc6cbb1000af0dad3276da12c78"
|
||
#. >
|
||
#. {ph7}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:1006
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}TH08 oracle correction:{ph1} {ph2}the reported auto-collection bug{ph3}, {ph4}the"
|
||
" source and comparison fix{ph5}, and {ph6}the full floating-literal audit{ph7}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/N0zoM1z0/th08/blob/d2a00f4acb4a13916e07a00bd13f714961714628/docs/SEMANTIC_PLAYBOOK.md"
|
||
#. >
|
||
#. {ph3}: </a >
|
||
#. {ph4}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-
|
||
#. factory/blob/717e1b8560783ed17a39fdf159d30aa16bb307a7/docs/semantic-
|
||
#. reconstruction.md" >
|
||
#. {ph5}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:1020
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}Semantic reconstruction:{ph1} {ph2}TH08's readability playbook{ph3} and {ph4}the "
|
||
"Factory's phase order and two validation paths{ph5}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <a href="https://collection.sciencemuseumgroup.org.uk/objects/co51439/watts-
|
||
#. steam-engine-indicator" >
|
||
#. {ph3}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:1032
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}Industrial history:{ph1} {ph2}the Science Museum Group's steam-engine indicator "
|
||
"record{ph3} describes the 1796 introduction and the pressure-recording mechanism."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-
|
||
#. factory/blob/038b6bed51d273c8b3680553b6f43e1b97d19bd1/docs/agent-autonomy.md" >
|
||
#. {ph3}: </a >
|
||
#. {ph4}: <a href="https://github.com/N0zoM1z0/touhou-reconstruction-
|
||
#. factory/blob/038b6bed51d273c8b3680553b6f43e1b97d19bd1/docs/knowledge-base.md" >
|
||
#. {ph5}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:1041
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"{ph0}Method:{ph1} the Factory's {ph2}agent autonomy{ph3} and {ph4}cross-game "
|
||
"knowledge{ph5} documents retain the working principles and lessons."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a class="text-link" href="../">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a class="text-link" href="../../showcase/th04/" >
|
||
#. {ph3}: </a >
|
||
#: website/public/blog/touhou-reconstruction/index.html:1056
|
||
#, python-brace-format
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "{ph0}More articles{ph1} · {ph2}Explore a TH04 investigation{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:6
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Reverse Engineering’s Industrial Revolution — REA"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:7
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid ""
|
||
"N0zoM1z0 reflects on manual reverse engineering, Touhou reconstruction with AI agents,"
|
||
" and how knowledge compounds across TH08, TH095 and PC-98 TH04."
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:350
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Experience carried between projects"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:364
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:379
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Touhou reconstruction essay"
|
||
msgstr ""
|
||
|
||
#: website/public/blog/touhou-reconstruction/index.html:1080
|
||
msgctxt "page:blog/touhou-reconstruction/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:104
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <span>
|
||
#. {ph3}: </span>
|
||
#: website/public/examples/dino-lab/index.html:195
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "{ph0}Home{ph1}{ph2}/{ph3}Dinosaur speed lab"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:198
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Inspect → rebuild → change"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:199
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Rebuild the dinosaur’s speed rule."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <mark class="prose-highlight">
|
||
#. {ph3}: </mark>
|
||
#: website/public/examples/dino-lab/index.html:200
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid ""
|
||
"To recreate the game’s acceleration, first find the rule that controls its speed. "
|
||
"{ph0}REA returned the running script;{ph1} we used its rule to build this mini-game "
|
||
"with {ph2}adjustable speed.{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:209
|
||
#: website/public/examples/dino-lab/index.html:208
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#play">
|
||
#. {ph1}: </a>
|
||
#: website/public/examples/dino-lab/index.html:211
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "{ph0}Play and change the speed{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#rule">
|
||
#. {ph1}: </a>
|
||
#: website/public/examples/dino-lab/index.html:212
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "{ph0}Read the recovered rule{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#check">
|
||
#. {ph1}: </a>
|
||
#: website/public/examples/dino-lab/index.html:213
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "{ph0}Check the reconstruction{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#inspect">
|
||
#. {ph1}: </a>
|
||
#: website/public/examples/dino-lab/index.html:214
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "{ph0}Try the analysis{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:219
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Play and change the speed"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:220
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid ""
|
||
"Press Play, then jump over the cactus. Move the speed slider to try a slower or faster"
|
||
" game; it switches to a fixed speed. Select the recovered rule to start at 6 and "
|
||
"gradually accelerate again."
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:226
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Play the reconstruction"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:258
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Play"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:261
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Jump ↑"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:262
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Restart"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:265
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Speed"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:275
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Use the recovered acceleration rule"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:279
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Original rule: start at 6, then increase toward 13."
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:282
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Move the slider to set your own speed. Space or Jump clears a cactus."
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:287
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid ""
|
||
"Enable JavaScript to play the reconstruction. The code and explanation above remain "
|
||
"readable."
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:295
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Read the script REA returned"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://wayou.github.io/t-rex-runner/" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <code>index.js</code>
|
||
#: website/public/examples/dino-lab/index.html:296
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid ""
|
||
"We inspected {ph0}wayou’s Chromium-derived browser edition{ph1} with REA. It returned "
|
||
"the loaded {ph2}, including this branch in the game’s update function:"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:306
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "REA · selected script source"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>SPEED: 6</code>
|
||
#. {ph1}: <code>ACCELERATION: 0.001</code>
|
||
#. {ph2}: <code>MAX_SPEED: 13</code>
|
||
#: website/public/examples/dino-lab/index.html:312
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid ""
|
||
"The settings are {ph0}, {ph1} and {ph2}. The game runs this branch on an update "
|
||
"without a collision."
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:317
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Use the same rule in the new game"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">dino-speed.js</span>
|
||
#: website/public/examples/dino-lab/index.html:320
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Reconstruction · {ph0}"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:323
|
||
#: website/public/examples/dino-lab/index.html:422
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Copy"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:336
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid ""
|
||
"The mini-game uses this function for automatic acceleration. Moving the slider "
|
||
"supplies a fixed speed instead. Drawing, jump physics and rectangle collision checks "
|
||
"are new code for this teaching game; its simulation advances at 60 updates per second."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../assets/dino-speed.js" download >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a href="../../assets/dino-demo.js">
|
||
#. {ph3}: </a>
|
||
#: website/public/examples/dino-lab/index.html:342
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "{ph0}Download the speed rule{ph1} · {ph2}Read the game code{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:350
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Check the reconstruction"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:351
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid ""
|
||
"We called the original game’s update function with obstacles and automatic scheduling "
|
||
"disabled. Compare those recorded speeds with a replay of the recovered rule."
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:360
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Updates"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:361
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Original game"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:362
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Reconstructed rule"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:389
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Run the speed check"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:392
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid ""
|
||
"Values rounded to three decimals. The branch checks before adding, so the final "
|
||
"increment can take speed just above 13."
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:398
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Try the analysis yourself"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../get-started/">
|
||
#. {ph1}: </a>
|
||
#: website/public/examples/dino-lab/index.html:400
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "{ph0}Set up REA{ph1} with your coding agent."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../guides/browser/#prepare" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <code>https://wayou.github.io/t-rex-runner/</code>
|
||
#: website/public/examples/dino-lab/index.html:404
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Follow the {ph0}browser connection steps{ph1}, using {ph2} as the page URL."
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:411
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid ""
|
||
"Give your agent the page URL and local debugging endpoint, then copy this prompt."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/examples/dino-lab/index.html:418
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="lab-analysis-prompt" >
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph5}: </span>
|
||
#: website/public/examples/dino-lab/index.html:431
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}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.{ph3}{ph4}{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/examples/dino-lab/index.html:440
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid ""
|
||
"Ask a follow-up: {ph0}“Where is jump height calculated? Add a jump-height control to "
|
||
"the new version.”{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/wayou/t-rex-
|
||
#. runner/blob/5455bfa408ec6b707c7300ff194b7390733a766d/index.js#L565-L571" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a href="../../assets/licenses/dinosaur.txt" >
|
||
#. {ph3}: </a >
|
||
#: website/public/examples/dino-lab/index.html:447
|
||
#, python-brace-format
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid ""
|
||
"Source: {ph0}inspected speed code{ph1}, Chromium Authors. {ph2}Copyright and BSD "
|
||
"license{ph3}. REA 4.1.0 inspected the running HTTP edition in Chrome 150."
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:6
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Chrome Dinosaur Game: Rebuild Its Speed Rule — REA"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:7
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid ""
|
||
"Read the dinosaur game’s speed rule with REA, rebuild it, then change the speed and "
|
||
"play."
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:217
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Dinosaur speed reconstruction"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:248
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid ""
|
||
"Dinosaur mini-game. Use the Jump button or press Space while the game is focused."
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:323
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Copy reconstructed speed rule"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:422
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Copy dinosaur analysis prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/examples/dino-lab/index.html:475
|
||
msgctxt "page:examples/dino-lab/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:103
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid "{ph0}Home{ph1} / FAQ"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:195
|
||
msgctxt "page:faq/index.html"
|
||
msgid "REA FAQ."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:196
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Setup, updates, analysis and troubleshooting."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:200
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Topics"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#setup">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:202
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid "{ph0}Setup and updates{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#analysis">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:203
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid "{ph0}Analysis{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#troubleshooting">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:204
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid "{ph0}Troubleshooting{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#sharing">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:205
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid "{ph0}Data and sharing{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:214
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Setup and updates"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:217
|
||
msgctxt "page:faq/index.html"
|
||
msgid "How do I install REA?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">Node.js</span>
|
||
#: website/public/faq/index.html:218
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"With {ph0} and npm available, run setup, choose your coding agent and review the "
|
||
"proposed changes."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:225
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Terminal · agent setup"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:226 website/public/faq/index.html:267
|
||
#: website/public/faq/index.html:285 website/public/faq/index.html:369
|
||
#: website/public/faq/index.html:416 website/public/faq/index.html:456
|
||
#: website/public/faq/index.html:476
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Copy"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../get-started/">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:237
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Setup registers REA's MCP connection and installs the matching investigation skill. "
|
||
"Restart your agent when it finishes, then give it a target path and a question. "
|
||
"{ph0}Follow the setup guide{ph1} for prerequisites and your first analysis."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:246
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Which coding agents can use REA?"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:247
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Any agent that supports local MCP servers. Setup includes Claude Code, Claude Desktop,"
|
||
" Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, Antigravity, GitHub Copilot "
|
||
"CLI, Command Code, Grok Build, OMP, and VS Code. Grok Bot's connector is added from "
|
||
"its chat."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../get-started/#agent">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:254
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid "{ph0}Connect your coding agent{ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:259
|
||
msgctxt "page:faq/index.html"
|
||
msgid "How do I update REA?"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:260
|
||
msgctxt "page:faq/index.html"
|
||
msgid "REA releases frequently, including bug fixes. If you installed the CLI with npm:"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:266
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Terminal · installed CLI"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>npx</code>
|
||
#: website/public/faq/index.html:278
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Follow the setup refresh command printed by the update. If you set up your agent "
|
||
"through {ph0}, run:"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:284
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Terminal · refresh agent setup"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>npx -y rea-agents@latest</code>
|
||
#: website/public/faq/index.html:296
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Review the changes and restart your agent. Its REA connection pins a package version, "
|
||
"so refreshing setup makes it use the new release. For one-off CLI commands, use {ph0} "
|
||
"followed by the command."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:304
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Is installing the skill from skills.sh enough?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#install">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:307
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"The skill gives your agent investigation instructions. Run {ph0}REA setup{ph1} to "
|
||
"connect the MCP server and install the matching skill, then restart your agent so it "
|
||
"can call the tools."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:318
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Analysis"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:321
|
||
msgctxt "page:faq/index.html"
|
||
msgid "What can I analyze with REA?"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:322
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Start with the kind of software you have:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../guides/native/" >
|
||
#. {ph1}: </a >
|
||
#: website/public/faq/index.html:324
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"{ph0}Native executables and libraries{ph1}: functions, assembly, pseudocode and "
|
||
"references."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../guides/javascript/" >
|
||
#. {ph1}: </a >
|
||
#: website/public/faq/index.html:329
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"{ph0}JavaScript and Electron apps{ph1}: modules, imports, IPC and source locations."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../guides/browser/">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:334
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid "{ph0}Browser pages{ph1}: scripts, requests and runtime observations."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../showcase/">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:339
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"REA also has workflows for managed assemblies, Android APKs, firmware and packaged "
|
||
"resources. {ph0}See the case studies{ph1} for worked investigations."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:347
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Do I need Hopper, Ghidra or IDA?"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:348
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Deep native analysis uses one of them. Static JavaScript and .NET inspection work with"
|
||
" the supplied files and do not need a native analysis engine."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../get-started/#native">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:353
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Connect your existing Ghidra or IDA installation, or let setup detect Hopper and "
|
||
"propose an installation. Your host and target determine which provider can be used. "
|
||
"{ph0}Set up native analysis{ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:361
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Can I use REA without a coding agent?"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:362
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Yes. The CLI uses the same analysis workflows. For a local JavaScript or Electron app:"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:368
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Terminal · static application analysis"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../get-started/#terminal">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:381
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Replace the path with an extracted application folder or ASAR file. {ph0}Use the "
|
||
"CLI{ph1} for installation options."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:388
|
||
msgctxt "page:faq/index.html"
|
||
msgid "What code does REA return?"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:389
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Native analysis returns assembly and pseudocode, with calls, references and relevant "
|
||
"constants. JavaScript analysis returns modules, their relationships and source "
|
||
"locations."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../showcase/dx-ball/#sound-pan" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a href="../showcase/ctf/">
|
||
#. {ph3}: </a>
|
||
#: website/public/faq/index.html:394
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Your agent uses these findings to explain the behavior or write and test an "
|
||
"implementation. The {ph0}DX-Ball calculation{ph1} and {ph2}CTF flag checker{ph3} show "
|
||
"how that process works."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:405
|
||
msgctxt "page:faq/index.html"
|
||
msgid "What should I ask my agent?"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:406
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Give it a local target and one behavior to investigate. For a JavaScript or Electron "
|
||
"app:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/faq/index.html:412
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="faq-analysis-prompt" >
|
||
#. {ph3}: <span translate="no">/absolute/path/to/app</span>
|
||
#. {ph4}: </span >
|
||
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph6}: </span>
|
||
#: website/public/faq/index.html:425
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Use REA to analyze {ph3} and explain how it exports data. Show the "
|
||
"relevant code and source locations.{ph4}{ph5}{ph6}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../guides/">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:435
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Replace the path with your target. The {ph0}guides{ph1} provide prompts for native, "
|
||
"Electron and browser examples."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:445
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Troubleshooting"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:448
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Why can't my agent see the REA tools?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>doctor</code>
|
||
#: website/public/faq/index.html:449
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Restart or reconnect your agent after setup. Check its REA registration with {ph0}; "
|
||
"for Codex:"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:455
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Terminal · check one client"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>codex</code>
|
||
#. {ph1}: <code>claude_code</code>
|
||
#. {ph2}: <code>cursor</code>
|
||
#: website/public/faq/index.html:467
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Replace {ph0} with your client ID, such as {ph1} or {ph2}. If the report shows a "
|
||
"missing or stale registration, run setup for that client:"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:475
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Terminal · repair one client's setup"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../get-started/#help">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:487
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Review its plan and restart the client. If registration is healthy but tools remain "
|
||
"absent, check the client's MCP connection error. {ph0}More setup diagnostics{ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:495
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Do I need to start Hopper first?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../get-started/#native">
|
||
#. {ph1}: </a >
|
||
#: website/public/faq/index.html:496
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"REA starts Hopper when an operation needs it. On macOS, complete the first-run choice "
|
||
"of demo mode or license activation before unattended analysis. {ph0}See native "
|
||
"provider setup{ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:505
|
||
msgctxt "page:faq/index.html"
|
||
msgid "What should I do if I hit a bug?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#update">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:506
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"{ph0}Update REA{ph1}, restart your agent and retry the same task. A recent release may"
|
||
" already fix the problem."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/morluto/rea/issues/new/choose" >
|
||
#. {ph1}: </a >
|
||
#: website/public/faq/index.html:510
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"If it persists, {ph0}open an issue{ph1} with your REA version, operating system, "
|
||
"target type, steps to reproduce and error output. Include the provider name when the "
|
||
"problem involves native analysis."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:524
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Data and sharing"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:527
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Does REA upload my app?"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:528
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"REA analyzes targets on your machine. Your agent receives the results, and its model "
|
||
"provider's data policy applies to those results."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:535
|
||
msgctxt "page:faq/index.html"
|
||
msgid "How can I share an example or contribute?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/morluto/rea/issues/new/choose" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a href="https://github.com/morluto/rea/pulls">
|
||
#. {ph3}: </a >
|
||
#: website/public/faq/index.html:536
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Have a useful REA example? We'd love to see it. Share the target, your question, the "
|
||
"findings and how you checked them in an {ph0}issue{ph1} or {ph2}pull request{ph3}. "
|
||
"Short code excerpts and figures help others follow the investigation."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://discord.gg/GkcryMnJDM">
|
||
#. {ph1}: </a>
|
||
#: website/public/faq/index.html:548
|
||
#, python-brace-format
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Bug reports, feature requests, documentation and code improvements are welcome too. "
|
||
"You can also discuss an example in the {ph0}community{ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:6
|
||
msgctxt "page:faq/index.html"
|
||
msgid "REA FAQ: Setup, Updates and Troubleshooting"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:7
|
||
msgctxt "page:faq/index.html"
|
||
msgid ""
|
||
"Answers to common REA questions: installation, updates, analysis tools, coding agents,"
|
||
" troubleshooting and sharing examples."
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:199
|
||
msgctxt "page:faq/index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:208
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Frequently asked questions about REA"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:226
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Copy REA setup command"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:267
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Copy REA update command"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:285
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Copy agent setup refresh command"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:369
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Copy REA CLI analysis command"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:416
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Copy example analysis prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:456
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Copy client diagnosis command"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:476
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Copy scoped setup command"
|
||
msgstr ""
|
||
|
||
#: website/public/faq/index.html:573
|
||
msgctxt "page:faq/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:103
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../">
|
||
#. {ph1}: </a>
|
||
#: website/public/first-investigation/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "{ph0}Home{ph1} / Your first investigation"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/first-investigation/index.html:197
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Find out where{ph0}exported notes go."
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:198
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"Use REA to inspect a small app, follow its Export notes button and check one detail "
|
||
"yourself."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">Node.js</span>
|
||
#: website/public/first-investigation/index.html:202
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "A supplied example · {ph0} and npm · Your coding agent"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:209
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "In this exercise"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#setup">
|
||
#. {ph1}: </a>
|
||
#: website/public/first-investigation/index.html:211
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "{ph0}1. Set up{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#ask">
|
||
#. {ph1}: </a>
|
||
#: website/public/first-investigation/index.html:212
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "{ph0}2. Ask about export{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#answer">
|
||
#. {ph1}: </a>
|
||
#: website/public/first-investigation/index.html:213
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "{ph0}3. Follow the answer{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#check">
|
||
#. {ph1}: </a>
|
||
#: website/public/first-investigation/index.html:214
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "{ph0}4. Check a prediction{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#next">
|
||
#. {ph1}: </a>
|
||
#: website/public/first-investigation/index.html:215
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "{ph0}5. Ask another question{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:220
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "1. Connect your agent to REA"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">Node.js</span>
|
||
#. {ph1}: <a href="../get-started/">
|
||
#. {ph2}: </a >
|
||
#: website/public/first-investigation/index.html:221
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"Use a coding agent such as Claude Code, Codex or Cursor. You’ll need {ph0} and npm; "
|
||
"the {ph1}setup guide lists supported versions{ph2}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/first-investigation/index.html:229
|
||
#: website/public/first-investigation/index.html:279
|
||
#: website/public/first-investigation/index.html:401
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:234
|
||
#: website/public/first-investigation/index.html:256
|
||
#: website/public/first-investigation/index.html:284
|
||
#: website/public/first-investigation/index.html:406
|
||
#: website/public/first-investigation/index.html:448
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Copy"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="first-install-prompt" >
|
||
#. {ph3}: <span translate="no">npx rea-agents@latest setup</span>
|
||
#. {ph4}: </span >
|
||
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph6}: </span>
|
||
#: website/public/first-investigation/index.html:243
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}. Show me "
|
||
"the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:253
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Or run this command in your terminal:"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:265
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"Review the plan, approve the setup, then restart your agent. Already connected? "
|
||
"Continue below."
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:271
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "2. Ask where the CSV is written"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/first-investigation/index.html:272
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"The example is a six-file Electron app with an {ph0}Export notes{ph1} button. Your "
|
||
"agent can inspect its code without installing or launching Electron."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="first-analysis-prompt" >
|
||
#. {ph3}: <span translate="no" >https://rea.tools/examples/notes-example.zip</span >
|
||
#. {ph4}: <span translate="no">notes.csv</span>
|
||
#. {ph5}: </span >
|
||
#. {ph6}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph7}: </span>
|
||
#: website/public/first-investigation/index.html:293
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Download {ph3} into a new example folder and unpack it. Use REA to "
|
||
"find what happens when I click Export notes. Show where {ph4} is written, which fields"
|
||
" it contains, and the relevant files and lines.{ph5}{ph6}{ph7}"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:307
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"Your agent downloads the files and gives the unpacked folder to REA for inspection."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a class="button" href="../examples/notes-example.zip" download="notes-
|
||
#. example.zip" >
|
||
#. {ph1}: </a >
|
||
#: website/public/first-investigation/index.html:311
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "{ph0}Download example ZIP{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>notes-example</code>
|
||
#: website/public/first-investigation/index.html:319
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"If your agent can’t download files, unzip this archive yourself. Give it the path to "
|
||
"the {ph0} folder and the same export question."
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:326
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "3. Follow the answer back to the code"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:327
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Look for a short explanation with file and line references:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>notes:export</code>
|
||
#. {ph1}: <code>notes.csv</code>
|
||
#. {ph2}: <code>id</code>
|
||
#. {ph3}: <code>title</code>
|
||
#: website/public/first-investigation/index.html:329
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"The button sends a {ph0} message. The main process formats the notes as CSV and writes"
|
||
" {ph1} in the user’s Downloads folder. The columns are {ph2} and {ph3}."
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:337
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "From the button to the file writer"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label" >
|
||
#. {ph1}: <span translate="no">renderer.js</span>
|
||
#. {ph2}: </span >
|
||
#. {ph3}: <span class="flow-node">
|
||
#. {ph4}: </span >
|
||
#. {ph5}: <span class="flow-note" >
|
||
#. {ph6}: <code>notes.exportCsv()</code>
|
||
#. {ph7}: </span >
|
||
#: website/public/first-investigation/index.html:339
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "{ph0}Page · {ph1}{ph2}{ph3}Export notes{ph4}{ph5}Calls {ph6}.{ph7}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label" >
|
||
#. {ph1}: <span translate="no">preload.js</span>
|
||
#. {ph2}: </span >
|
||
#. {ph3}: <span class="flow-node">
|
||
#. {ph4}: <code>notes:export</code>
|
||
#. {ph5}: </span >
|
||
#. {ph6}: <span class="flow-note" >
|
||
#. {ph7}: </span >
|
||
#: website/public/first-investigation/index.html:347
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"{ph0}Bridge · {ph1}{ph2}{ph3}{ph4}{ph5}{ph6}Sends a named message to the main "
|
||
"process.{ph7}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label" >
|
||
#. {ph1}: <span translate="no">main.js</span>
|
||
#. {ph2}: </span >
|
||
#. {ph3}: <span class="flow-node" >
|
||
#. {ph4}: <span translate="no">notes.csv</span>
|
||
#. {ph5}: </span >
|
||
#. {ph6}: <span class="flow-note" >
|
||
#. {ph7}: <code>csv.js</code>
|
||
#. {ph8}: </span >
|
||
#: website/public/first-investigation/index.html:355
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"{ph0}Handler · {ph1}{ph2}{ph3}Write {ph4}{ph5}{ph6}Calls the formatter in {ph7} and "
|
||
"writes the file.{ph8}"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:366
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"REA’s static analysis pairs the message with its handler. The destination is read from"
|
||
" code."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">main.js</span>
|
||
#: website/public/first-investigation/index.html:373
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "{ph0} · lines 8–12"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:374
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Source"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:382
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"The file path, formatter and write call are together in this handler. Ask your agent "
|
||
"to show these lines if its answer leaves them out."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../guides/javascript/#follow" >
|
||
#. {ph1}: </a >
|
||
#: website/public/first-investigation/index.html:387
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "{ph0}See the full code trace and recorded REA result{ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:394
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "4. Check a prediction"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:395
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"A comma separates CSV columns. What happens when a note title itself contains a comma "
|
||
"or quotation marks?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="first-check-prompt" >
|
||
#. {ph3}: <span translate="no">Hello, "REA"</span>
|
||
#. {ph4}: <span translate="no">toCsv</span>
|
||
#. {ph5}: <span translate="no">Node.js</span>
|
||
#. {ph6}: </span >
|
||
#. {ph7}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph8}: </span>
|
||
#: website/public/first-investigation/index.html:415
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Predict the CSV for a note with id 1 and title {ph3}. Then run the "
|
||
"example’s {ph4} formatter with {ph5} to check it. Show the prediction and actual "
|
||
"output.{ph6}{ph7}{ph8}"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:428
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Expected formatter output"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">Node.js</span>
|
||
#: website/public/first-investigation/index.html:433
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"The title stays in one quoted field; each quotation mark is doubled. This checks the "
|
||
"formatter directly with {ph0}."
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:439
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Run the check yourself"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>notes-example</code>
|
||
#: website/public/first-investigation/index.html:440
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Open a terminal in the unpacked {ph0} folder:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">Node.js</span>
|
||
#: website/public/first-investigation/index.html:446
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "{ph0} · CSV formatter"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:462
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"This command uses a shell with here-document support, such as Bash or Zsh. Your agent "
|
||
"can run the same JavaScript in your platform’s shell."
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:470
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "5. Ask another question"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:471
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Try a follow-up in the same conversation:"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:473
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "What happens if the file can’t be written? Follow the error back to the page."
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:478
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"Or give your agent an app of your own and ask about one button, file or behavior."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../showcase/notion/">
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span >
|
||
#. {ph3}: </span >
|
||
#: website/public/first-investigation/index.html:483
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"{ph0}How Notion copies text and HTML{ph1}{ph2}Follow a clipboard feature in a packaged"
|
||
" Electron app.{ph3}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../showcase/dx-ball/" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span >
|
||
#. {ph3}: </span >
|
||
#: website/public/first-investigation/index.html:489
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"{ph0}How DX-Ball calculates sound panning{ph1}{ph2}Read the original instructions and "
|
||
"the reconstruction’s checks.{ph3}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../faq/#troubleshooting" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span >
|
||
#. {ph3}: </span >
|
||
#: website/public/first-investigation/index.html:497
|
||
#, python-brace-format
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"{ph0}Troubleshoot setup or analysis{ph1}{ph2}Update REA and check the connection if "
|
||
"you get stuck.{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:6
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Your First Reverse Engineering Investigation — REA"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:7
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid ""
|
||
"Try REA on a small Notes app. Set up your agent, ask where exported notes go, and "
|
||
"check the CSV formatter with a sample title."
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:208
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:218
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Your first REA investigation"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:234
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Copy REA installation prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:256
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Copy setup command"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:284
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Copy Notes investigation prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:406
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Copy CSV check prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:448
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Copy formatter check command"
|
||
msgstr ""
|
||
|
||
#: website/public/first-investigation/index.html:523
|
||
msgctxt "page:first-investigation/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:103
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../">
|
||
#. {ph1}: </a>
|
||
#: website/public/get-started/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}Home{ph1} / Get started"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:195
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Set up REA."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:196
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Connect REA to your coding agent, or inspect a local app from your terminal."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">Node.js</span>
|
||
#. {ph1}: <span translate="no">Node.js</span>
|
||
#: website/public/get-started/index.html:200
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "You'll need {ph0} 22 (22.19+), 24 (24.11+) or 26+. npm comes with {ph1}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">Node.js</span>
|
||
#: website/public/get-started/index.html:205
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Don't have {ph0}, or not sure?"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:208
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Open a terminal and check:"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:211 website/public/get-started/index.html:468
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Terminal"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:212 website/public/get-started/index.html:233
|
||
#: website/public/get-started/index.html:256 website/public/get-started/index.html:272
|
||
#: website/public/get-started/index.html:287 website/public/get-started/index.html:302
|
||
#: website/public/get-started/index.html:318 website/public/get-started/index.html:337
|
||
#: website/public/get-started/index.html:423 website/public/get-started/index.html:469
|
||
#: website/public/get-started/index.html:545 website/public/get-started/index.html:604
|
||
#: website/public/get-started/index.html:645 website/public/get-started/index.html:677
|
||
#: website/public/get-started/index.html:734 website/public/get-started/index.html:775
|
||
#: website/public/get-started/index.html:815 website/public/get-started/index.html:831
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>node -v</code>
|
||
#. {ph1}: <span translate="no">Node.js</span>
|
||
#: website/public/get-started/index.html:224
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"If {ph0} prints v22.19+, v24.11+ or v26+, you're ready. If it prints an older version "
|
||
"or \"not recognized\" / \"command not found\", install {ph1} 24 LTS:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/get-started/index.html:229
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}Windows (PowerShell){ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>node -v</code>
|
||
#: website/public/get-started/index.html:244
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Type Y if asked to accept the terms. Close PowerShell, open it again, then run {ph0}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <em>
|
||
#. {ph1}: </em>
|
||
#. {ph2}: <code>npx</code>
|
||
#: website/public/get-started/index.html:248
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"If PowerShell later says {ph0}\"running scripts is disabled on this system\"{ph1} when"
|
||
" you run {ph2}, run this once and try again:"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:268
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "If you use Homebrew:"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:283
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Otherwise:"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:298
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Close Terminal, open it again, then:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>curl</code>
|
||
#. {ph1}: <code>unzip</code>
|
||
#. {ph2}: <code>sudo apt install curl unzip</code>
|
||
#: website/public/get-started/index.html:329
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"The installer needs {ph0} and {ph1} (on Debian/Ubuntu: {ph2}). Close the terminal, "
|
||
"open it again, then:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>nodejs</code>
|
||
#. {ph1}: <code>node -v</code>
|
||
#: website/public/get-started/index.html:349
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Your distribution's own {ph0} package is often older than 22.19, so check {ph1} if you"
|
||
" use it instead."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://nodejs.org/en/download">
|
||
#. {ph1}: </a>
|
||
#: website/public/get-started/index.html:353
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Prefer a regular installer? Download the LTS version from {ph0}nodejs.org{ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:361
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Setup options"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#agent">
|
||
#. {ph1}: </a>
|
||
#: website/public/get-started/index.html:363
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}Connect your coding agent{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#terminal">
|
||
#. {ph1}: </a>
|
||
#: website/public/get-started/index.html:364
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}Use the CLI{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#native">
|
||
#. {ph1}: </a>
|
||
#: website/public/get-started/index.html:365
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}Set up native analysis{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#help">
|
||
#. {ph1}: </a>
|
||
#: website/public/get-started/index.html:366
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}Getting help{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:371
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Connect your coding agent"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:372
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Run setup to connect REA to your coding agent. Client choices include Claude Code, "
|
||
"Codex, Cursor, Gemini CLI, Windsurf, Grok Build, and other supported MCP clients. Grok"
|
||
" Bot's connector is added from its chat."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:379
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "New to coding agents?"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:380
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"A coding agent is an AI assistant that works on your computer instead of in a browser "
|
||
"tab. It can read files and run commands, and it asks before making changes. REA gives "
|
||
"it reverse-engineering tools."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:386
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "If you don't have one yet, pick one, follow its install page and sign in:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: <a href="https://code.claude.com/docs/en/setup" >
|
||
#. {ph2}: </a >
|
||
#. {ph3}: </strong >
|
||
#: website/public/get-started/index.html:391
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}{ph1}Claude Code{ph2}{ph3} by Anthropic. Needs a paid Claude plan."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: <a href="https://github.com/openai/codex">
|
||
#. {ph2}: </a>
|
||
#. {ph3}: </strong >
|
||
#: website/public/get-started/index.html:399
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}{ph1}Codex{ph2}{ph3} by OpenAI. Sign in with your ChatGPT account."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: <a href="https://opencode.ai/docs">
|
||
#. {ph2}: </a>
|
||
#. {ph3}: </strong >
|
||
#: website/public/get-started/index.html:405
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"{ph0}{ph1}OpenCode{ph2}{ph3}, open source. Connect the model provider of your choice."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:411
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Then open it and copy the prompt below into it. The agent runs REA's setup and shows "
|
||
"you the plan before changing anything."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/get-started/index.html:418
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="agent-install-prompt" >
|
||
#. {ph3}: <span translate="no">npx rea-agents@latest setup</span>
|
||
#. {ph4}: </span >
|
||
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph6}: </span>
|
||
#: website/public/get-started/index.html:432
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}. Show me "
|
||
"the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:443
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Or run setup yourself"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:445
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "How do I open a terminal?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <em>
|
||
#. {ph3}: </em>
|
||
#: website/public/get-started/index.html:447
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"{ph0}Windows:{ph1} open the Start menu, type {ph2}PowerShell{ph3} and press Enter."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <kbd>⌘</kbd>
|
||
#. {ph3}: <kbd>Space</kbd>
|
||
#. {ph4}: <em>
|
||
#. {ph5}: </em>
|
||
#: website/public/get-started/index.html:451
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}macOS:{ph1} press {ph2} {ph3}, type {ph4}Terminal{ph5} and press Enter."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <kbd>Ctrl</kbd>
|
||
#. {ph3}: <kbd>Alt</kbd>
|
||
#. {ph4}: <kbd>T</kbd>
|
||
#: website/public/get-started/index.html:455
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}Linux:{ph1} press {ph2} {ph3} {ph4} on most desktops."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <kbd>Ctrl</kbd>
|
||
#. {ph1}: <kbd>V</kbd>
|
||
#. {ph2}: <kbd>⌘</kbd>
|
||
#. {ph3}: <kbd>V</kbd>
|
||
#. {ph4}: <kbd>Ctrl</kbd>
|
||
#. {ph5}: <kbd>Shift</kbd>
|
||
#. {ph6}: <kbd>V</kbd>
|
||
#: website/public/get-started/index.html:460
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Paste a command with {ph0} {ph1} (macOS: {ph2} {ph3}; Linux terminals: {ph4} {ph5} "
|
||
"{ph6}), then press Enter."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:481
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Choose your client and review the setup plan. REA adds its MCP connection and the "
|
||
"matching investigation skill, keeping a backup of existing configuration. It asks "
|
||
"before applying the changes."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:486
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Restart your client when setup finishes."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:488
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "How do I restart my client?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <kbd>⌘</kbd>
|
||
#. {ph3}: <kbd>Q</kbd>
|
||
#: website/public/get-started/index.html:489
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"{ph0}Desktop apps{ph1} (Claude Desktop, Cursor, Windsurf, VS Code): quit the app "
|
||
"completely, then open it again. Closing the window isn't enough. On macOS press {ph2} "
|
||
"{ph3}; on Windows, also quit from the tray icon if there is one."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/get-started/index.html:496
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"{ph0}Terminal agents{ph1} (Claude Code, Codex, Gemini CLI): exit the session and start"
|
||
" it again."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:501
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Give your agent a target path and a specific question. For a JavaScript or Electron "
|
||
"app, you might start with:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>/absolute/path/to/app</code>
|
||
#: website/public/get-started/index.html:506
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Look at {ph0} and find how it exports data. Show the entry points, calls and "
|
||
"dependencies involved, with the source locations for your findings."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:512
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Replace the path with your local target."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:514
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "How do I get a folder's full path?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <em>
|
||
#. {ph3}: </em>
|
||
#: website/public/get-started/index.html:516
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"{ph0}Windows:{ph1} in File Explorer, right-click the folder and choose {ph2}Copy as "
|
||
"path{ph3}. On Windows 10, hold Shift while right-clicking."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <em>
|
||
#. {ph3}: </em>
|
||
#: website/public/get-started/index.html:521
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"{ph0}macOS:{ph1} in Finder, right-click the folder, hold Option and choose {ph2}Copy "
|
||
"\"…\" as Pathname{ph3}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/get-started/index.html:525
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"{ph0}Any system:{ph1} drag the folder into a terminal window and its path appears."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:530
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "In a terminal, put quotes around a path that contains spaces."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:537
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Use the CLI"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:538
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Analyze a JavaScript or Electron application folder or ASAR archive without running "
|
||
"the app:"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:544
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Static application analysis"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>.asar</code>
|
||
#. {ph1}: <code>"D:/apps/example"</code>
|
||
#: website/public/get-started/index.html:557
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Replace the path with your extracted app directory or {ph0} file. On Windows, a path "
|
||
"such as {ph1} works here."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:563
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Where do I find an app's .asar file?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>resources</code>
|
||
#: website/public/get-started/index.html:564
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Electron apps usually keep it in a {ph0} folder:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code
|
||
#. >C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar</code >
|
||
#: website/public/get-started/index.html:569
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}Windows:{ph1} {ph2}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code >/Applications/<App>.app/Contents/Resources/app.asar</code >
|
||
#. {ph3}: <em>
|
||
#. {ph4}: </em>
|
||
#: website/public/get-started/index.html:575
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"{ph0}macOS:{ph1} {ph2} (right-click the app and choose {ph3}Show Package "
|
||
"Contents{ph4})"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>/opt/<App>/resources/app.asar</code>
|
||
#: website/public/get-started/index.html:583
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}Linux:{ph1} often {ph2}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>app.asar</code>
|
||
#: website/public/get-started/index.html:588
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Some apps install elsewhere. Search the app's folder for {ph0}."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:593
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"The result identifies the app, shows connections between modules and gives their "
|
||
"source locations. Connections REA cannot resolve are marked in the result."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>rea</code>
|
||
#: website/public/get-started/index.html:598
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "If you'd like a permanent {ph0} command in your shell:"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:603
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Install the CLI"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../guides/javascript/" >
|
||
#. {ph1}: </a >
|
||
#: website/public/get-started/index.html:615
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}Continue with the JavaScript application guide{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:623
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Set up native analysis"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:624
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Native binaries need a local analysis tool. Choose and configure one below, then give "
|
||
"REA your executable or library."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:629
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Choose a tool: Ghidra, Hopper or IDA"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:634
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Use an existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer on Linux or "
|
||
"macOS, on x64 or arm64. Your Ghidra installation needs a native decompiler for your "
|
||
"host architecture. Set the paths before running setup:"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:641
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Connect your Ghidra installation"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:644
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Ghidra connection · macOS / Linux"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:659
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Replace both paths with your existing installations. Setup checks them and records "
|
||
"valid settings for your selected client. On Linux arm64, you may need to build "
|
||
"Ghidra's native decompiler separately."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:667
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Connect Ghidra on Windows"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:668
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Windows x64 has experimental, read-only support for native x86 and x64 PE applications"
|
||
" and DLLs on fixed local NTFS drives. Use an existing Ghidra 12.1.x installation and a"
|
||
" 64-bit JDK 21 or newer:"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:676
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Ghidra connection · Windows PowerShell"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:691
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Replace the two paths with your installations, then review setup's plan."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:701
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Connect Hopper on macOS or Linux. Run the setup command above; it detects an existing "
|
||
"installation or offers an installation plan for your approval."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:706
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"On macOS, complete Hopper's first-run choice of demo mode or license activation before"
|
||
" an unattended analysis."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:715
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"The verified IDA setups use Windows, with an existing MCP registration for an attached"
|
||
" GUI or a headless database. Linux and macOS headless analysis remains unverified."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:721
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Connect an existing IDA MCP registration"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>command</code>
|
||
#. {ph1}: <code>args</code>
|
||
#. {ph2}: <code>env</code>
|
||
#. {ph3}: <code>mcpServers</code>
|
||
#. {ph4}: <code>ida-pro-mcp</code>
|
||
#: website/public/get-started/index.html:724
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Keep the upstream server's working {ph0}, {ph1} and optional {ph2} in a JSON file. An "
|
||
"existing {ph3} object with an {ph4} entry is also accepted. Point REA at that file "
|
||
"before setup:"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:733
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "IDA connection · Windows PowerShell"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>"mode": "headless"</code>
|
||
#: website/public/get-started/index.html:748
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"The attached profile uses upstream legacy 1.4.0 tools with the original binary already"
|
||
" open in IDA. The headless profile uses the upstream database-supervisor API and a "
|
||
"registration with {ph0}; real verification covers an IDA 9.3 Windows x64 supervisor. "
|
||
"Doctor checks the registration without starting IDA."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>--provider ida</code>
|
||
#. {ph1}: <code>REA_IDA_MCP_CONFIG</code>
|
||
#: website/public/get-started/index.html:757
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Give REA the original executable path, with {ph0} in a CLI query. For an agent, "
|
||
"include {ph1} in the REA registration's environment and select IDA when opening the "
|
||
"binary."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:769
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "For an existing Ghidra setup, inspect a function with:"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:774
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Function analysis"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>main</code>
|
||
#: website/public/get-started/index.html:787
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Replace {ph0} with the function name or address you want to inspect."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:792
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "How native analysis sessions work"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:793
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Each CLI command imports and analyzes the binary, then closes its session. Your "
|
||
"agent's MCP queries reuse the imported binary while that session is open."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../guides/native/">
|
||
#. {ph1}: </a>
|
||
#: website/public/get-started/index.html:799
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"{ph0}Follow a native analysis example{ph1} to see how the function result leads to a "
|
||
"recovered calculation."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:806
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Getting help"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:807
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "If your agent doesn't see REA"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>doctor</code>
|
||
#: website/public/get-started/index.html:808
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Restart or reconnect the client after setup. Check its REA connection with {ph0}; for "
|
||
"Codex:"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:814
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Check one client"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:826
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "If a provider needs attention"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:827
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Check the provider you're using. For Ghidra:"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:830
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Check one provider"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:842
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "The report gives the failed check and a suggested next step."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../faq/">
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span>
|
||
#. {ph3}: </span>
|
||
#: website/public/get-started/index.html:844
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}REA FAQ{ph1}{ph2}Quick answers on updates, agents and analysis.{ph3}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../guides/">
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span >
|
||
#. {ph3}: </span >
|
||
#: website/public/get-started/index.html:848
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"{ph0}Choose an investigation guide{ph1}{ph2}Worked examples for a binary, an Electron "
|
||
"app and a browser.{ph3}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/morluto/rea/issues">
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span>
|
||
#. {ph3}: </span>
|
||
#: website/public/get-started/index.html:855
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"{ph0}GitHub issues{ph1}{ph2}Report a problem with the command and diagnostics.{ph3}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://discord.gg/GkcryMnJDM">
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span>
|
||
#. {ph3}: </span>
|
||
#: website/public/get-started/index.html:859
|
||
#, python-brace-format
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "{ph0}REA community{ph1}{ph2}Questions, investigations and work in progress.{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:6
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Install REA and Set Up Your Coding Agent"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:7
|
||
msgctxt "page:get-started/index.html"
|
||
msgid ""
|
||
"Connect REA to your coding agent or inspect a local JavaScript or Electron app from "
|
||
"the terminal. Setup, first questions and native provider guides."
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:212
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy Node.js version check"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:233
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy Node.js installation command for Windows"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:256
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy PowerShell execution policy command"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:272
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy Homebrew Node.js installation command"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:287
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy fnm installation command for macOS"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:302
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy Node.js 24 commands for macOS"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:318
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy fnm installation command for Linux"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:337
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy Node.js 24 commands for Linux"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:360
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:369
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "REA getting started guide"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:423
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy REA installation prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:469
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy agent setup command"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:545
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy JavaScript analysis command"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:604
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy CLI installation command"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:645
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy Ghidra connection for macOS and Linux"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:677
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy Ghidra connection for Windows PowerShell"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:734
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy IDA connection for Windows PowerShell"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:775
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy native function analysis command"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:815
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy client diagnosis command"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:831
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Copy provider diagnosis command"
|
||
msgstr ""
|
||
|
||
#: website/public/get-started/index.html:882
|
||
msgctxt "page:get-started/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:103
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="../">
|
||
#. {ph3}: </a>
|
||
#: website/public/guides/browser/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Browser observation"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/guides/browser/index.html:198
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "See what happens{ph0}when you click."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:199
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"Use a small browser app to connect an action, its network request and the JavaScript "
|
||
"that builds a download."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:206
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "In this guide"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#example">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/browser/index.html:208
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "{ph0}The example{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#prepare">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/browser/index.html:209
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "{ph0}Open the browser{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#ask">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/browser/index.html:210
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "{ph0}Ask your agent{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#capture">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/browser/index.html:211
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "{ph0}Capture from CLI{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#result">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/browser/index.html:212
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "{ph0}Read the request and script{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:217
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "What happens when you click Export?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../examples/notes-web/">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <strong>
|
||
#. {ph3}: </strong>
|
||
#. {ph4}: <code>notes.json</code>
|
||
#: website/public/guides/browser/index.html:218
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"The {ph0}Notes browser example{ph1} has an {ph2}Export notes{ph3} button. Clicking it "
|
||
"loads {ph4}, formats the two notes as CSV, and starts a download."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:226
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "From the click to the CSV download"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/guides/browser/index.html:228
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"{ph0}01 · You{ph1}{ph2}Click Export notes{ph3}{ph4}Perform the action in your browser "
|
||
"while the capture is running.{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/guides/browser/index.html:236
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"{ph0}02 · REA{ph1}{ph2}Record the request{ph3}{ph4}Capture the request URL, response "
|
||
"status and JSON structure from the selected page.{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: <code>fetch("./notes.json")</code>
|
||
#. {ph6}: <code>export.js</code>
|
||
#. {ph7}: </span >
|
||
#: website/public/guides/browser/index.html:244
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"{ph0}03 · Your agent{ph1}{ph2}Read the export code{ph3}{ph4}Connect the observed "
|
||
"request to {ph5} in {ph6}.{ph7}"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:257
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Start the capture before clicking Export notes."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:263
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Open Chrome with remote debugging"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:264
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"Open the hosted Notes example with a separate browser profile and a local debugging "
|
||
"port. On Linux:"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:270
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Start the example browser"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:271
|
||
#: website/public/guides/browser/index.html:303
|
||
#: website/public/guides/browser/index.html:337
|
||
#: website/public/guides/browser/index.html:356
|
||
#: website/public/guides/browser/index.html:421
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Copy"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:285
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"Use your installed browser's executable path on macOS or Windows. You can replace the "
|
||
"page URL with another page you want to inspect."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:290
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"REA connects to this existing browser. You keep control of the page, perform the "
|
||
"action, and close the browser when finished."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:296
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Ask your agent to watch one action"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/guides/browser/index.html:299
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="browser-prompt" >
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph5}: </span>
|
||
#: website/public/guides/browser/index.html:312
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Use REA to inspect this page while I click Export notes. What request "
|
||
"does it make, and how is the CSV built?{ph3}{ph4}{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>http://127.0.0.1:9222</code>
|
||
#: website/public/guides/browser/index.html:320
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"Example prompt. Give your agent the debugging endpoint, {ph0}, and the page URL. Let "
|
||
"it start the capture before you click."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:325
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"Your agent discovers the page target, starts an observation window, and reads the "
|
||
"resulting evidence. It can then inspect the script behind the export."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:332
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Or capture from the terminal"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:333
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Find the page's target ID:"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:336
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Find the page"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>TARGET_ID</code>
|
||
#: website/public/guides/browser/index.html:349
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"Choose the target with the Notes example URL. Replace {ph0} below with its ID, then "
|
||
"run:"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:355
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Capture the next ten seconds"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/guides/browser/index.html:371
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"Let the command connect for a few seconds, then click {ph0}Export notes{ph1} in that "
|
||
"browser. The result arrives after the observation window ends."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:376
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"The captured result includes the selected page, network activity during that window, "
|
||
"and the shape of the JSON response. Earlier requests are outside this capture."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:383
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Read the request and export script"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:386
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Recorded with REA 4.1.0 on the local Notes example"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:391
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Captured fact"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:392
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Value"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:397
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Request"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:401
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Response"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:405
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Request initiator"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>export.js</code>
|
||
#: website/public/guides/browser/index.html:406
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "{ph0} · script"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:409
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Response structure"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>notes[]</code>
|
||
#. {ph1}: <code>id</code>
|
||
#. {ph2}: <code>title</code>
|
||
#: website/public/guides/browser/index.html:410
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "{ph0} with {ph1} and {ph2} fields"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:420
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Read the loaded scripts"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>export.js</code>
|
||
#: website/public/guides/browser/index.html:434
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"The request identifies the data source, and REA records {ph0} as its initiator. Read "
|
||
"the captured script source to see how the data is used:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">export.js</span>
|
||
#: website/public/guides/browser/index.html:441
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "{ph0} · example source excerpt"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>notes.json</code>
|
||
#: website/public/guides/browser/index.html:454
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"The download is constructed in the page using the JSON response. The CSV formatting "
|
||
"step comes from the script; the network capture establishes that this click requested "
|
||
"{ph0}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../examples/notes-web/">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="../../examples/notes-web/export.js" download >
|
||
#. {ph3}: <span translate="no">export.js</span>
|
||
#. {ph4}: </a >
|
||
#. {ph5}: <a href="../../examples/notes-web/notes.json" download >
|
||
#. {ph6}: <span translate="no">notes.json</span>
|
||
#. {ph7}: </a >
|
||
#: website/public/guides/browser/index.html:459
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "{ph0}Open the example{ph1} · {ph2}Download {ph3}{ph4} · {ph5}Download {ph6}{ph7}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>notes.json</code>
|
||
#: website/public/guides/browser/index.html:470
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"Find the script that requests {ph0}. How does it escape titles containing commas or "
|
||
"quotation marks?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../javascript/">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/browser/index.html:475
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"For an installed JavaScript or Electron app, continue with the {ph0}application "
|
||
"workflow{ph1} to follow files and process boundaries."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/morluto/rea/blob/main/docs/web-network-
|
||
#. captures.md" >
|
||
#. {ph1}: </a >
|
||
#: website/public/guides/browser/index.html:480
|
||
#, python-brace-format
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"For HTTP request and response bodies, use {ph0}Fiddler Everywhere: SAZ captures, MCP "
|
||
"and public skills{ph1}. Export SAZ or HAR 1.2 for offline REA capture Evidence, or "
|
||
"connect Everywhere's MCP server to inspect captured traffic with your agent."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:6
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Browser and Network Analysis — REA"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:7
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid ""
|
||
"Observe a Notes export with REA: select a browser page, capture a click, inspect the "
|
||
"request and follow the export script."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:205
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:215
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Browser observation"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:271
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Copy start the example browser"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:303
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Copy example prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:337
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Copy find the page"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:356
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Copy capture the next ten seconds"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:421
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Copy read the loaded scripts"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/browser/index.html:507
|
||
msgctxt "page:guides/browser/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:103
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:guides/index.html"
|
||
msgid "{ph0}Home{ph1} / Guides"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:195
|
||
msgctxt "page:guides/index.html"
|
||
msgid "REA guides."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:196
|
||
msgctxt "page:guides/index.html"
|
||
msgid ""
|
||
"Analyze a native function, an Electron export or a browser request. Each guide "
|
||
"includes a prompt, code and results."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:203
|
||
msgctxt "page:guides/index.html"
|
||
msgid "First investigation"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:205
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Set up REA"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:206
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Connect your coding agent or use REA from the terminal."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:207
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Get started with REA"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:211
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Native binaries"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:213
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Recover a sound-pan calculation"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:214
|
||
msgctxt "page:guides/index.html"
|
||
msgid ""
|
||
"Start with a Windows game executable. Inspect instructions, follow a caller, read "
|
||
"numeric constants and check the recovered C."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:219
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Instructions"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:220
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Caller"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:221
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Constants"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:222
|
||
msgctxt "page:guides/index.html"
|
||
msgid "C function"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:224
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Native analysis guide"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:228
|
||
msgctxt "page:guides/index.html"
|
||
msgid "JavaScript & Electron"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:230
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Follow a CSV export"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:231
|
||
msgctxt "page:guides/index.html"
|
||
msgid ""
|
||
"A small Notes app spreads one feature across the renderer, preload and main process. "
|
||
"Use REA to connect the API, IPC channel and file writer."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:237
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Button"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:238
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Preload API"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:239
|
||
msgctxt "page:guides/index.html"
|
||
msgid "IPC"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:239
|
||
msgctxt "page:guides/index.html"
|
||
msgid "CSV file"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:241
|
||
msgctxt "page:guides/index.html"
|
||
msgid "JavaScript & Electron guide"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../showcase/notion/">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/index.html:244
|
||
#, python-brace-format
|
||
msgctxt "page:guides/index.html"
|
||
msgid "For a larger packaged app, follow {ph0}Notion's clipboard bridge{ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:251
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Browser behavior"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:253
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Observe a click"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:254
|
||
msgctxt "page:guides/index.html"
|
||
msgid ""
|
||
"Open a working Notes example, capture an export request and find the code that turns "
|
||
"its response into a download."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:259
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Your click"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:260
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Captured request"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:261
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Export script"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:263
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Browser observation guide"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:6
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Reverse Engineering Guides — REA"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:7
|
||
msgctxt "page:guides/index.html"
|
||
msgid ""
|
||
"Learn REA through short worked examples: a native calculation, an Electron CSV export "
|
||
"and a browser request."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/index.html:282
|
||
msgctxt "page:guides/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:103
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="../">
|
||
#. {ph3}: </a>
|
||
#: website/public/guides/javascript/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / JavaScript & Electron"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/guides/javascript/index.html:198
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "Trace an Electron{ph0}CSV export."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:199
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"Follow a button click from the page API, through Electron IPC, to the CSV file writer."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:206
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "In this guide"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#example">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/javascript/index.html:208
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "{ph0}The example{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#ask">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/javascript/index.html:209
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "{ph0}Ask your agent{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#follow">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/javascript/index.html:210
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "{ph0}Trace the export code{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#try">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/javascript/index.html:211
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "{ph0}Try the example{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#next">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/javascript/index.html:212
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "{ph0}Inspect the CSV writer{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:217
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "Where does “Export notes” go?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/guides/javascript/index.html:218
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"This guide uses a small Electron app. Clicking {ph0}Export notes{ph1} calls an API in "
|
||
"the page, crosses into the main process, and writes a CSV. The behavior is spread "
|
||
"across several files."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:225
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "The CSV export across Electron processes"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: <code>notes.exportCsv()</code>
|
||
#. {ph4}: </span >
|
||
#. {ph5}: <span class="flow-note" >
|
||
#. {ph6}: <code>renderer.js</code>
|
||
#. {ph7}: <code>preload.js</code>
|
||
#. {ph8}: </span >
|
||
#: website/public/guides/javascript/index.html:229
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"{ph0}Renderer → preload{ph1}{ph2}{ph3}{ph4}{ph5}{ph6} calls the API exposed by "
|
||
"{ph7}.{ph8}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: <code>notes:export</code>
|
||
#. {ph4}: </span >
|
||
#. {ph5}: <span class="flow-note" >
|
||
#. {ph6}: </span >
|
||
#: website/public/guides/javascript/index.html:237
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"{ph0}Between processes{ph1}{ph2}{ph3}{ph4}{ph5}The preload invokes an IPC channel: a "
|
||
"named message to the main process.{ph6}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: <code>main.js</code>
|
||
#. {ph6}: </span >
|
||
#: website/public/guides/javascript/index.html:245
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"{ph0}Main process{ph1}{ph2}An export handler{ph3}{ph4}{ph5} handles that channel and "
|
||
"calls the CSV writer.{ph6}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>csv.js</code>
|
||
#. {ph1}: <code>main.js</code>
|
||
#. {ph2}: <code>downloads/notes.csv</code>
|
||
#: website/public/guides/javascript/index.html:254
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "{ph0} formats the notes → {ph1} writes {ph2}."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:258
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"REA matches the literal IPC call to its handler and identifies the exposed API. The "
|
||
"path is inferred from code; a runtime capture can check what executes."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:266
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "Ask about the CSV export"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../get-started/#agent">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/javascript/index.html:267
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "{ph0}Connect your agent to REA{ph1} and give it the app directory or ASAR file:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/guides/javascript/index.html:273
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:277
|
||
#: website/public/guides/javascript/index.html:426
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "Copy"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="javascript-prompt" >
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph5}: </span>
|
||
#: website/public/guides/javascript/index.html:286
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Use REA to find what happens when I export notes in this app. Where is"
|
||
" the CSV created?{ph3}{ph4}{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>app.asar</code>
|
||
#: website/public/guides/javascript/index.html:294
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "Example prompt. Include the absolute path to the application folder or {ph0}."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:298
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"REA reads the application files and builds a map of entrypoints, modules and process "
|
||
"boundaries. Your agent uses that map to narrow the investigation to the export "
|
||
"feature."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:305
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "Trace the export code"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:306
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "The page calls a small API"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">renderer.js</span>
|
||
#: website/public/guides/javascript/index.html:309
|
||
#: website/public/guides/javascript/index.html:325
|
||
#: website/public/guides/javascript/index.html:340
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "{ph0} · example source"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:319
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"The page knows the method name. The implementation lives in the preload, which exposes"
|
||
" it to the renderer."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>notes.exportCsv</code>
|
||
#. {ph1}: <code>notes:export</code>
|
||
#: website/public/guides/javascript/index.html:333
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"REA records {ph0} and the literal channel {ph1}. It pairs that invocation with the "
|
||
"single matching handler in the main process."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>csv.js</code>
|
||
#. {ph1}: <code>notes.csv</code>
|
||
#: website/public/guides/javascript/index.html:350
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"Reading the handler answers the original question: {ph0} formats the notes, and the "
|
||
"main process writes {ph1} into the user's Downloads folder."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:357
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "REA result · summary.ipc excerpt"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:367
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"Recorded by REA 4.1.0 on the downloadable example below. Source locations accompany "
|
||
"the API, channel and handler findings."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:373
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "Analyze the example yourself"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>notes-example</code>
|
||
#. {ph1}: <span translate="no">Node.js</span>
|
||
#: website/public/guides/javascript/index.html:374
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"Download the example and unzip it. The archive contains the complete {ph0} folder. "
|
||
"Analyze it with {ph1} and npm; Electron is not needed for this example."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a class="button" href="../../examples/notes-example.zip" download="notes-
|
||
#. example.zip" >
|
||
#. {ph1}: </a >
|
||
#: website/public/guides/javascript/index.html:380
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "{ph0}Download example ZIP{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:389
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "Browse the six source files"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:425
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "Static application analysis"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>normalized_result.summary.ipc</code>
|
||
#. {ph1}: <code>normalized_result.graph</code>
|
||
#: website/public/guides/javascript/index.html:438
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"Replace the path with the folder you unzipped. You should find one IPC channel and one"
|
||
" matching handler in {ph0}. Source locations are in {ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:444
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"For your own app, use the same command with its directory or ASAR path. An agent can "
|
||
"follow a literal string, API name or IPC channel with REA's feature tracing tools."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:451
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "Inspect the CSV writer"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>notes:export</code>
|
||
#: website/public/guides/javascript/index.html:453
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"Follow {ph0} to its handler. Which inputs reach the CSV writer, and what happens if "
|
||
"writing the file fails?"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:459
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"Use the source locations to inspect those details. Computed channel names and "
|
||
"ambiguous handlers can remain unresolved; runtime observations give you another way to"
|
||
" investigate them."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../showcase/notion/" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span>
|
||
#. {ph3}: </span>
|
||
#: website/public/guides/javascript/index.html:465
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"{ph0}Follow Notion's clipboard bridge{ph1} {ph2}Apply the same approach to a packaged "
|
||
"Electron app.{ph3}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../browser/">
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span >
|
||
#. {ph3}: </span >
|
||
#: website/public/guides/javascript/index.html:471
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"{ph0}Observe a browser export{ph1}{ph2}Capture a real click and see which request it "
|
||
"makes.{ph3}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../native/">
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span >
|
||
#. {ph3}: </span >
|
||
#: website/public/guides/javascript/index.html:477
|
||
#, python-brace-format
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"{ph0}Follow a native function{ph1}{ph2}Continue into a binary when a feature depends "
|
||
"on native code.{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:6
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "JavaScript and Electron Analysis — REA"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:7
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid ""
|
||
"Trace a Notes CSV export through a renderer API, preload and IPC handler with REA. "
|
||
"Includes downloadable example files and a verified analysis result."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:205
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:215
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "JavaScript & Electron"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:277
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "Copy example prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:426
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "Copy static application analysis"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/javascript/index.html:503
|
||
msgctxt "page:guides/javascript/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:103
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="../">
|
||
#. {ph3}: </a>
|
||
#: website/public/guides/native/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "{ph0}Home{ph1} / {ph2}Guides{ph3} / Native analysis"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/guides/native/index.html:197
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Recover DX-Ball's{ph0}sound-pan calculation."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:198
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"Inspect the original instructions, identify the input and constants, then check the "
|
||
"recovered C."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:205
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "In this guide"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#example">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/native/index.html:207
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "{ph0}The example{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#ask">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/native/index.html:208
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "{ph0}Ask your agent{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#follow">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/native/index.html:209
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "{ph0}Read the REA results{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#result">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/native/index.html:210
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "{ph0}Recover and check{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#try">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/native/index.html:211
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "{ph0}Use your own binary{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:216
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Calculate left/right sound panning"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:217
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"In DX-Ball, a brick hit supplies a horizontal screen position. The sound code turns it"
|
||
" into a left/right panning value."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>0x00406400</code>
|
||
#. {ph1}: <code>__ftol()</code>
|
||
#: website/public/guides/native/index.html:221
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"The starting function, {ph0}, has a short decompiler result: a call to {ph1}. REA also"
|
||
" returns its instructions and callers, which give the agent a way to investigate the "
|
||
"missing arithmetic."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:228
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "New to these terms?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>MOV</code>
|
||
#. {ph3}: <code>ADD</code>
|
||
#: website/public/guides/native/index.html:230
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"{ph0}Instructions:{ph1} the steps the processor runs, shown in readable form such as "
|
||
"{ph2} or {ph3}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/guides/native/index.html:235
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"{ph0}Decompiler result / pseudocode:{ph1} an analysis tool's attempt to turn "
|
||
"instructions back into C-like code. It can miss parts, as in this example."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/guides/native/index.html:240
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"{ph0}Caller:{ph1} a function that calls this one. It shows which values are passed in."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>0x00406400</code>
|
||
#: website/public/guides/native/index.html:244
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"{ph0}Address:{ph1} a location in the program, written in hexadecimal, such as {ph2}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/guides/native/index.html:248
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"{ph0}Constants:{ph1} fixed numbers stored in the program, read as raw bytes and "
|
||
"decoded."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:255
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Three pieces of evidence, one calculation"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/guides/native/index.html:259
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"{ph0}01 · Instructions{ph1}{ph2}An integer input{ph3}{ph4}A stack read supplies the "
|
||
"value used by the floating-point instructions.{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: <code>20 + 30 × tile_x</code>
|
||
#. {ph6}: </span >
|
||
#: website/public/guides/native/index.html:267
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"{ph0}02 · Caller{ph1}{ph2}A screen coordinate{ph3}{ph4}The brick-hit caller passes "
|
||
"{ph5}.{ph6}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: <code>1.5625</code>
|
||
#. {ph6}: <code>500.0</code>
|
||
#. {ph7}: </span >
|
||
#: website/public/guides/native/index.html:275
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"{ph0}03 · Data bytes{ph1}{ph2}The numeric constants{ph3}{ph4}Referenced bytes decode "
|
||
"to {ph5}, {ph6} and a scale value.{ph7}"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:287
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"REA supplies the instructions, call relationship and bytes. The agent interprets them "
|
||
"together."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:294
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Ask about the behavior"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../get-started/#agent" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a href="../../get-started/#native" >
|
||
#. {ph3}: </a >
|
||
#: website/public/guides/native/index.html:295
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"After {ph0}connecting REA to your agent{ph1} and {ph2}setting up a native analysis "
|
||
"tool{ph3}, provide the local executable and a question:"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:306
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Which analysis tool should I use?"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:307
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "REA needs one of these to read native programs:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/guides/native/index.html:309
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"{ph0}Hopper{ph1} (macOS or Linux): REA's setup detects it or offers to install it. On "
|
||
"macOS, open Hopper once and choose demo mode or activate a license before your first "
|
||
"analysis."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/guides/native/index.html:315
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"{ph0}Ghidra{ph1} (macOS or Linux; experimental on Windows): free, but needs an "
|
||
"existing Ghidra 12.1.x installation and a 64-bit JDK 21 or newer."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/guides/native/index.html:320
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "{ph0}IDA{ph1} (Windows): for an existing IDA setup with an MCP registration."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../get-started/#native">
|
||
#. {ph1}: </a>
|
||
#: website/public/guides/native/index.html:325
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "See {ph0}Set up native analysis{ph1} for the steps."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/guides/native/index.html:333
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:337
|
||
#: website/public/guides/native/index.html:468
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Copy"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="native-prompt" >
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph5}: </span>
|
||
#: website/public/guides/native/index.html:346
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. Explain the "
|
||
"calculation and show the code.{ph3}{ph4}{ph5}"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:354
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"Example prompt. Give your agent the path to your local DX-Ball 1.07 executable. REA "
|
||
"doesn't include DX-Ball, so use your own copy, or ask the same kind of question about "
|
||
"another small Windows program you have."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:361
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "How do I get a file's full path?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <em>
|
||
#. {ph3}: </em>
|
||
#: website/public/guides/native/index.html:363
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"{ph0}Windows:{ph1} in File Explorer, right-click the file and choose {ph2}Copy as "
|
||
"path{ph3}. On Windows 10, hold Shift while right-clicking."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <em>
|
||
#. {ph3}: </em>
|
||
#: website/public/guides/native/index.html:368
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"{ph0}macOS:{ph1} in Finder, right-click the file, hold Option and choose {ph2}Copy "
|
||
"\"…\" as Pathname{ph3}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/guides/native/index.html:372
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "{ph0}Any system:{ph1} drag the file into a terminal window and its path appears."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:380
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Read the REA results"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:381
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Read the input"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:384
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "REA instruction excerpt · 0x406409"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:390
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"The instructions load an integer argument and convert it for floating-point "
|
||
"arithmetic. This is the input absent from the first pseudocode view."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:395
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Follow the caller"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:398
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "REA caller excerpt · 0x411f5b"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>0x14</code>
|
||
#: website/public/guides/native/index.html:404
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"REA identifies the brick-hit caller. Its earlier instructions multiply the tile "
|
||
"coordinate by 30; adding {ph0} (20) gives the brick's screen position."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:409
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Read the referenced constants"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:412
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "REA byte results · interpreted as little-endian doubles"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:420
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"The arithmetic references these addresses. Reading the bytes supplies the actual "
|
||
"values; the instruction order tells the agent how they are used."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:427
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Write and check the recovered function"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:429
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Recovered C · excerpt"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:436
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"With a scale of 1.0, screen positions 0, 320 and 640 map to −500, 0 and 500 before "
|
||
"integer conversion. The calculation puts the center of the screen at the center of the"
|
||
" stereo field."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:441
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"The agent used REA's findings to write the C. Separate checks compared 3,205 inputs "
|
||
"against the original x86 function and reproduced all 63 compiled bytes of the complete"
|
||
" function."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../showcase/dx-ball/#sound-pan" >
|
||
#. {ph1}: </a >
|
||
#: website/public/guides/native/index.html:446
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "{ph0}See the full investigation and assembly-to-C comparison{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:453
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Try it with your own binary"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../get-started/#native" >
|
||
#. {ph1}: </a >
|
||
#: website/public/guides/native/index.html:454
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"{ph0}Connect a native analysis provider{ph1}, then give your agent a local executable "
|
||
"or library and a feature to investigate. Useful starting questions include “How is "
|
||
"this file parsed?” or “Which function handles this menu action?”"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:461
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"If you already know a function name or address, you can query it from the terminal. "
|
||
"For a configured Ghidra installation:"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:467
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Function analysis"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>main</code>
|
||
#: website/public/guides/native/index.html:480
|
||
#, python-brace-format
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"Replace the target path and {ph0} with your own function name or address. Each CLI "
|
||
"invocation imports and analyzes the binary, then closes its session. Your agent's MCP "
|
||
"queries reuse the imported binary while that session is open."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:486
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"Read the pseudocode alongside instructions and references. When a result leaves a call"
|
||
" or value unresolved, use that location as the next question."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:6
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Native Binary Analysis — REA"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:7
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid ""
|
||
"Recover a native calculation with REA: inspect instructions, follow a caller, read "
|
||
"constants and check reconstructed C."
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:204
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:214
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Native analysis"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:337
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Copy example prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:468
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Copy function analysis"
|
||
msgstr ""
|
||
|
||
#: website/public/guides/native/index.html:509
|
||
msgctxt "page:guides/native/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:105
|
||
msgctxt "page:index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:196 website/public/index.html:206
|
||
#: website/public/index.html:204
|
||
msgctxt "page:index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:197 website/public/index.html:251
|
||
msgctxt "page:index.html"
|
||
msgid "Set up REA"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#setup" aria-current="location">
|
||
#. {ph1}: </a>
|
||
#: website/public/index.html:208
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}Set up REA{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#what-is-re">
|
||
#. {ph1}: </a>
|
||
#: website/public/index.html:209
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}What is RE?{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#how-rea-helps">
|
||
#. {ph1}: </a>
|
||
#: website/public/index.html:210
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}How REA helps{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#dinosaur">
|
||
#. {ph1}: </a>
|
||
#: website/public/index.html:211
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}Dinosaur game{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#calculator">
|
||
#. {ph1}: </a>
|
||
#: website/public/index.html:212
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}Calculator{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#try-rea">
|
||
#. {ph1}: </a>
|
||
#: website/public/index.html:213
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}Try REA{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#analyze">
|
||
#. {ph1}: </a>
|
||
#: website/public/index.html:214
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}Go deeper{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#questions">
|
||
#. {ph1}: </a>
|
||
#: website/public/index.html:215
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}Help & feedback{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#community">
|
||
#. {ph1}: </a>
|
||
#: website/public/index.html:216
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}Community{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:225
|
||
msgctxt "page:index.html"
|
||
msgid "Reverse engineering, with your coding agent"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/index.html:226
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "Find out how{ph0}software works."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:227
|
||
msgctxt "page:index.html"
|
||
msgid "REA gives your agent the tools to inspect a program and explain what it does."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:232
|
||
msgctxt "page:index.html"
|
||
msgid "See how REA works ↓"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="button-arrow" aria-hidden="true" data-i18n-skip >→</span >
|
||
#: website/public/index.html:233
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "Get started {ph0}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:239
|
||
msgctxt "page:index.html"
|
||
msgid "Showcases →"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#analysis-guides">
|
||
#. {ph1}: </a>
|
||
#: website/public/index.html:241
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "Already know RE? {ph0}Skip to analysis guides →{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="blog/">
|
||
#. {ph1}: </a>
|
||
#: website/public/index.html:245
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "Want to go deeper? {ph0}Read the Blog →{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:252
|
||
msgctxt "page:index.html"
|
||
msgid "Copy this into your coding agent:"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/index.html:255
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:260 website/public/index.html:282
|
||
#: website/public/index.html:497 website/public/index.html:665
|
||
#: website/public/index.html:901 website/public/index.html:1063
|
||
#: website/public/index.html:1091
|
||
msgctxt "page:index.html"
|
||
msgid "Copy"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="home-install-prompt" >
|
||
#. {ph3}: <span translate="no">npx rea-agents@latest setup</span>
|
||
#. {ph4}: </span >
|
||
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph6}: </span>
|
||
#: website/public/index.html:269
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Install REA and connect it to this coding agent using {ph3}. Show me "
|
||
"the setup plan for approval, then verify the installation.{ph4}{ph5}{ph6}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:279
|
||
msgctxt "page:index.html"
|
||
msgid "Or run this in your terminal:"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:291
|
||
msgctxt "page:index.html"
|
||
msgid "Approve the setup plan, then restart your agent."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">Node.js</span>
|
||
#. {ph1}: <a href="get-started/">
|
||
#. {ph2}: </a>
|
||
#: website/public/index.html:294
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"First time, or missing {ph0} or a coding agent? {ph1}Follow the step-by-step setup "
|
||
"guide →{ph2}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:306
|
||
msgctxt "page:index.html"
|
||
msgid "What is reverse engineering?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/index.html:307
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "Finding out how software works by {ph0}examining the program itself.{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <mark class="prose-highlight">
|
||
#. {ph1}: </mark>
|
||
#. {ph2}: <mark class="prose-highlight">
|
||
#. {ph3}: </mark>
|
||
#. {ph4}: <mark class="prose-highlight">
|
||
#. {ph5}: </mark>
|
||
#: website/public/index.html:312
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"The goal: understand a feature well enough to {ph0}explain it{ph1}, {ph2}change "
|
||
"it{ph3} or {ph4}rebuild it.{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: <span translate="no">200 + 10%</span>
|
||
#. {ph2}: </strong >
|
||
#: website/public/index.html:318
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "One question: {ph0}why does Calculator give 220 for {ph1}?{ph2}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong class="prose-highlight">
|
||
#. {ph1}: </strong>
|
||
#: website/public/index.html:330
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "Before REA · You investigate it {ph0}yourself{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/index.html:339
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}01{ph1} Decode branches"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/index.html:347
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}02{ph1} Trace calls"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/index.html:355
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}03{ph1} Recover the rule"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#. {ph2}: <span class="assembly-disclosure" aria-hidden="true">
|
||
#. {ph3}: </span>
|
||
#: website/public/index.html:370
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}Original x64 · selected instructions{ph1} {ph2}{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:409
|
||
msgctxt "page:index.html"
|
||
msgid "01 · Which branch?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/index.html:410
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "“{ph0}0x5b? 0x5c?{ph1} Two jumps to the same place. Which operators are these?”"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:414
|
||
msgctxt "page:index.html"
|
||
msgid "Look up the command IDs, then label the branch."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:420
|
||
msgctxt "page:index.html"
|
||
msgid "Divide ÷"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:424
|
||
msgctxt "page:index.html"
|
||
msgid "Multiply ×"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:429
|
||
msgctxt "page:index.html"
|
||
msgid "02 · What do the calls do?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong >
|
||
#: website/public/index.html:430
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"“100 is clear. The calls are just addresses. {ph0}Which one divides? Which value goes "
|
||
"in?{ph1}”"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:435
|
||
msgctxt "page:index.html"
|
||
msgid "Inspect the helpers and trace the stored values."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:445
|
||
msgctxt "page:index.html"
|
||
msgid "Divide"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:450
|
||
msgctxt "page:index.html"
|
||
msgid "03 · What is the rule?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/index.html:451
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"“This path multiplies by the other input. So {ph0}10% means 10% of 200{ph1} after +.”"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:455
|
||
msgctxt "page:index.html"
|
||
msgid "Name the operands and check both operator paths."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:471 website/public/index.html:399
|
||
msgctxt "page:index.html"
|
||
msgid "Illustrative expert reasoning"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/index.html:474
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}You decode the instructions, follow the calls and reconstruct the "
|
||
"calculation.{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong class="prose-highlight">
|
||
#. {ph1}: </strong>
|
||
#: website/public/index.html:482
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "With REA · You ask {ph0}your agent{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:486
|
||
msgctxt "page:index.html"
|
||
msgid "One prompt."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/index.html:487
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "Ask your agent {ph0}in plain English.{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/index.html:492
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Calculator"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="home-analysis-prompt" >
|
||
#. {ph3}: <span translate="no">200 + 10%</span>
|
||
#. {ph4}: </span >
|
||
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph6}: </span>
|
||
#: website/public/index.html:506
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator. Why does {ph3} give "
|
||
"220?{ph4}{ph5}{ph6}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:514
|
||
msgctxt "page:index.html"
|
||
msgid "Example answer · based on the findings"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/index.html:517
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "After +, the % button takes {ph0}a percentage of the first number.{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:529
|
||
msgctxt "page:index.html"
|
||
msgid "REA supplies"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:530
|
||
msgctxt "page:index.html"
|
||
msgid "The handler’s instructions, decompiled code and calls."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:535
|
||
msgctxt "page:index.html"
|
||
msgid "Your agent explains"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:536
|
||
msgctxt "page:index.html"
|
||
msgid "Which branch applies, what it calculates and how to rebuild it."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#calculator">
|
||
#. {ph1}: </a>
|
||
#: website/public/index.html:543
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"Selected assembly from the installed Calculator DLL. The thoughts and reply illustrate"
|
||
" the findings. {ph0}Continue with the Calculator example ↓{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/index.html:554
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}Let's try two examples.{ph1} Change a game's speed, then return to Calculator and"
|
||
" rebuild its % button."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:560
|
||
msgctxt "page:index.html"
|
||
msgid "Example 01 · Chrome’s dinosaur game"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:561
|
||
msgctxt "page:index.html"
|
||
msgid "Why does the dinosaur get faster?"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:565 website/public/index.html:803
|
||
msgctxt "page:index.html"
|
||
msgid "Goal"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <mark class="prose-highlight">
|
||
#. {ph1}: </mark>
|
||
#: website/public/index.html:566
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "Rebuild the game with {ph0}adjustable speed.{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:572 website/public/index.html:810
|
||
msgctxt "page:index.html"
|
||
msgid "Why reverse engineer it?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/index.html:573
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"To reproduce its acceleration, we need {ph0}the rule in the running game{ph1}: how "
|
||
"fast it starts, how much it increases and when it stops."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:582
|
||
msgctxt "page:index.html"
|
||
msgid "Play the reconstruction"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:614
|
||
msgctxt "page:index.html"
|
||
msgid "Play"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:617
|
||
msgctxt "page:index.html"
|
||
msgid "Jump ↑"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:618
|
||
msgctxt "page:index.html"
|
||
msgid "Restart"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:621
|
||
msgctxt "page:index.html"
|
||
msgid "Speed"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:631
|
||
msgctxt "page:index.html"
|
||
msgid "Use the recovered acceleration rule"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:635
|
||
msgctxt "page:index.html"
|
||
msgid "Original rule: start at 6, then increase toward 13."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:638
|
||
msgctxt "page:index.html"
|
||
msgid "Move the slider to set your own speed. Space or Jump clears a cactus."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:643
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"Enable JavaScript to play the reconstruction. The code and explanation above remain "
|
||
"readable."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:651 website/public/index.html:881
|
||
msgctxt "page:index.html"
|
||
msgid "REA returned"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/index.html:652
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}The script actually running in the page.{ph1} The agent reads its update function"
|
||
" and speed settings, then uses that rule in a new game."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/index.html:660
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Dinosaur game"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="dino-analysis-prompt" >
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph5}: </span>
|
||
#: website/public/index.html:674
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}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.{ph3}{ph4}{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://wayou.github.io/t-rex-runner/" >
|
||
#. {ph1}: </a >
|
||
#: website/public/index.html:683
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "Inspected target: {ph0}wayou’s Chromium-derived browser edition{ph1}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">index.js</span>
|
||
#: website/public/index.html:691
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "REA · loaded {ph0} · selected lines"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <strong>
|
||
#. {ph3}: </strong>
|
||
#. {ph4}: <strong>
|
||
#. {ph5}: </strong>
|
||
#: website/public/index.html:700
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}Start at 6.{ph1} Add {ph2}0.001{ph3} each update without a collision, while speed"
|
||
" is below {ph4}13{ph5}."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:705
|
||
msgctxt "page:index.html"
|
||
msgid "Open the speed lab →"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:711
|
||
msgctxt "page:index.html"
|
||
msgid "What each part does"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/index.html:713
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}01 · REA{ph1}{ph2}Read the running game’s script{ph3}{ph4}Return its actual code "
|
||
"and settings to the agent.{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/index.html:720
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}02 · Your agent{ph1}{ph2}Rebuild the rule, add a control{ph3}{ph4}Use the "
|
||
"recovered acceleration in a small game with a speed slider.{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/index.html:728
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}03 · You{ph1}{ph2}Change the speed and play{ph3}{ph4}Try the original "
|
||
"acceleration, then choose your own pace.{ph5}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:739
|
||
msgctxt "page:index.html"
|
||
msgid "See the script, checks and how to try the analysis"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>index.js</code>
|
||
#: website/public/index.html:742
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"REA inspected the HTTP browser edition through a local debugging connection and "
|
||
"returned the loaded {ph0}, including its source and digest."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:749
|
||
msgctxt "page:index.html"
|
||
msgid "Selected settings from the inspected script"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:755
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"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."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="examples/dino-lab/">
|
||
#. {ph1}: </a>
|
||
#: website/public/index.html:761
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"The new mini-game keeps that speed rule. Its drawing, jumping and collision code are a"
|
||
" small teaching implementation. {ph0}Open the lab{ph1} to see the new code and run the"
|
||
" same speed check."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="guides/browser/#prepare">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="https://wayou.github.io/t-rex-runner/" >
|
||
#. {ph3}: </a >
|
||
#: website/public/index.html:767
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"To inspect the target yourself, follow the {ph0}browser connection steps{ph1} using "
|
||
"{ph2}the dinosaur page{ph3}. Give your agent that page URL and your local debugging "
|
||
"endpoint, then copy the prompt above."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/wayou/t-rex-
|
||
#. runner/blob/5455bfa408ec6b707c7300ff194b7390733a766d/index.js#L565-L571" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a href="assets/licenses/dinosaur.txt" >
|
||
#. {ph3}: </a >
|
||
#: website/public/index.html:776
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}Inspected speed code{ph1} · {ph2}Chromium Authors · BSD license{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:793
|
||
msgctxt "page:index.html"
|
||
msgid "Example 02 · Windows Calculator"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:794
|
||
msgctxt "page:index.html"
|
||
msgid "Rebuild Calculator’s % button."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: <span translate="no">200 + 10%</span>
|
||
#. {ph2}: </strong>
|
||
#: website/public/index.html:795
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"We saw why {ph0}{ph1} gives 220.{ph2} Now let’s recover the rules for both + and ×, "
|
||
"and try them."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <mark class="prose-highlight">
|
||
#. {ph1}: </mark>
|
||
#: website/public/index.html:804
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "Build a small calculator that handles {ph0}both + and × correctly.{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/index.html:811
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"The same button uses {ph0}different rules after + and ×.{ph1} We inspect the installed"
|
||
" app to find which number the percentage is applied to."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:820
|
||
msgctxt "page:index.html"
|
||
msgid "Try the calculation"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:864
|
||
msgctxt "page:index.html"
|
||
msgid "Reset"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:872
|
||
msgctxt "page:index.html"
|
||
msgid "10% of 200 = 20. Then 200 + 20 = 220."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:875
|
||
msgctxt "page:index.html"
|
||
msgid "Interactive illustration of the inspected percentage rule."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/index.html:882
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}One branch divides by 100. The other also multiplies by the first number.{ph1} "
|
||
"The agent uses both to recreate the % button."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>previous = 200</code>
|
||
#. {ph1}: <code>current = 10</code>
|
||
#: website/public/index.html:890
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "For this example, {ph0} and {ph1}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/index.html:896
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Rebuild the % button"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="calculator-analysis-prompt" >
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph5}: </span>
|
||
#: website/public/index.html:910
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Use REA to inspect Windows Calculator’s % button. Recover the rules "
|
||
"after + and ×, then build a small calculator that uses both.{ph3}{ph4}{ph5}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:921
|
||
msgctxt "page:index.html"
|
||
msgid "Readable summary of the % handler"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:931
|
||
msgctxt "page:index.html"
|
||
msgid "With +"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong >
|
||
#. {ph2}: <code>10% of 200 = 20 → 200 + 20 = 220</code>
|
||
#: website/public/index.html:932
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}Take 10% of the first number.{ph1}{ph2}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:938
|
||
msgctxt "page:index.html"
|
||
msgid "With ×"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong >
|
||
#. {ph2}: <code>200 × 0.1 = 20</code>
|
||
#: website/public/index.html:939
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}Turn 10% into 0.1.{ph1}{ph2}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:948
|
||
msgctxt "page:index.html"
|
||
msgid "From the installed app to a working % button"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label" >
|
||
#. {ph1}: <span translate="no">calc.exe</span>
|
||
#. {ph2}: </span >
|
||
#. {ph3}: <span class="flow-node">
|
||
#. {ph4}: </span >
|
||
#. {ph5}: <span class="flow-note" >
|
||
#. {ph6}: <code>ms-calculator:</code>
|
||
#. {ph7}: </span >
|
||
#: website/public/index.html:952
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}01 · REA reads {ph1}{ph2}{ph3}It launches the Calculator app{ph4}{ph5}The code "
|
||
"opens {ph6}. The agent then selects the installed app’s library.{ph7}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: <code>100</code>
|
||
#. {ph6}: </span >
|
||
#: website/public/index.html:961
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}02 · REA reads the library{ph1}{ph2}Return the % handler’s code{ph3}{ph4}The "
|
||
"function checks the operator and uses the constant {ph5}.{ph6}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/index.html:969
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}03 · Your agent interprets it{ph1}{ph2}Explain and reproduce the "
|
||
"rules{ph3}{ph4}Crosscheck the branch with Microsoft’s source, then try + and × "
|
||
"above.{ph5}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:980
|
||
msgctxt "page:index.html"
|
||
msgid "See the real code and how the answer was checked"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:985
|
||
msgctxt "page:index.html"
|
||
msgid "REA · selected original instructions"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:996
|
||
msgctxt "page:index.html"
|
||
msgid "Operator IDs · Microsoft’s source"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1006
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"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."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/microsoft/calculator/blob/d125246a4e19842ce1332e6c7839cf0e110027d8/src/CalcManager/CEngine/scifunc.cpp#L98-L111"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/microsoft/calculator/blob/d125246a4e19842ce1332e6c7839cf0e110027d8/src/CalculatorUnitTests/CalculatorManagerTest.cpp#L350-L370"
|
||
#. >
|
||
#. {ph3}: </a >
|
||
#. {ph4}: <a href="guides/native/">
|
||
#. {ph5}: </a>
|
||
#: website/public/index.html:1011
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}Percentage implementation{ph1} · {ph2}Microsoft’s test cases{ph3} · {ph4}Native "
|
||
"setup guide{ph5}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1030
|
||
msgctxt "page:index.html"
|
||
msgid "Your first investigation"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1031
|
||
msgctxt "page:index.html"
|
||
msgid "Try REA on a small app."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1032
|
||
msgctxt "page:index.html"
|
||
msgid "Download our Notes example, trace its CSV export, and check one changed input."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1037
|
||
msgctxt "page:index.html"
|
||
msgid "Try the guided example"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1046
|
||
msgctxt "page:index.html"
|
||
msgid "Want to go deeper?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <strong>
|
||
#. {ph3}: </strong>
|
||
#: website/public/index.html:1047
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"Tell your agent what you want to understand or build. With REA, you can work together "
|
||
"on anything from {ph0}cloning this website{ph1} to {ph2}reconstructing a game from its"
|
||
" executable.{ph3}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/index.html:1058
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Website"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="website-project-prompt" >
|
||
#. {ph3}: <span translate="no">https://rea.tools/</span>
|
||
#. {ph4}: </span >
|
||
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph6}: </span>
|
||
#: website/public/index.html:1072
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Clone this website for me.{ph4}{ph5}{ph6}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1081
|
||
msgctxt "page:index.html"
|
||
msgid "Yes, this one."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/index.html:1086
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Example prompt · Game reconstruction"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="game-project-prompt" >
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph5}: </span>
|
||
#: website/public/index.html:1100
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Use REA to reconstruct this game from its executable. Recover the "
|
||
"gameplay logic in C and test it against the original.{ph3}{ph4}{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="showcase/dx-ball/">
|
||
#. {ph1}: </a>
|
||
#: website/public/index.html:1109
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid "{ph0}See the DX-Ball case study →{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1114
|
||
msgctxt "page:index.html"
|
||
msgid "For setup and analysis steps, choose your target:"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1119
|
||
msgctxt "page:index.html"
|
||
msgid "Native binaries"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1120
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"Inspect functions, strings, references and call relationships in executables and "
|
||
"libraries."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1124
|
||
msgctxt "page:index.html"
|
||
msgid "Native analysis guide"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1127
|
||
msgctxt "page:index.html"
|
||
msgid "JavaScript & Electron"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1128
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"Map modules, routes, IPC and native dependencies from an application folder or ASAR "
|
||
"archive."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1132
|
||
msgctxt "page:index.html"
|
||
msgid "Application workflows"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1135
|
||
msgctxt "page:index.html"
|
||
msgid "Browser & runtime activity"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1136
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"Capture selected browser or process activity, then compare the results across runs."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1140
|
||
msgctxt "page:index.html"
|
||
msgid "Browser observation guide"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1147
|
||
msgctxt "page:index.html"
|
||
msgid "Any questions?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="faq/">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="https://discord.gg/GkcryMnJDM">
|
||
#. {ph3}: </a>
|
||
#. {ph4}: <a href="https://github.com/morluto/rea/issues/new/choose" >
|
||
#. {ph5}: </a >
|
||
#: website/public/index.html:1148
|
||
#, python-brace-format
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"{ph0}Read the FAQ{ph1}, {ph2}chat with us on Discord{ph3}, or {ph4}open a GitHub "
|
||
"issue{ph5} for bugs and feature requests."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1161 website/public/index.html:1167
|
||
msgctxt "page:index.html"
|
||
msgid "Join the community"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1162
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"Share investigations and get help from other REA users on Discord. Follow REA on X for"
|
||
" project updates."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1170
|
||
msgctxt "page:index.html"
|
||
msgid "Follow @reatools on X"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:6
|
||
msgctxt "page:index.html"
|
||
msgid "REA — Reverse Engineering for Your Coding Agent"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:7
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"Reverse engineer apps, binaries and browser behavior with your coding agent. Follow "
|
||
"clear guides and try interactive examples with REA."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:260
|
||
msgctxt "page:index.html"
|
||
msgid "Copy REA installation prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:282
|
||
msgctxt "page:index.html"
|
||
msgid "Copy setup command"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:334
|
||
msgctxt "page:index.html"
|
||
msgid "Follow the manual Calculator analysis"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:497
|
||
msgctxt "page:index.html"
|
||
msgid "Copy Calculator percentage question"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:604
|
||
msgctxt "page:index.html"
|
||
msgid ""
|
||
"Dinosaur mini-game. Use the Jump button or press Space while the game is focused."
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:665
|
||
msgctxt "page:index.html"
|
||
msgid "Copy dinosaur analysis prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:821
|
||
msgctxt "page:index.html"
|
||
msgid "Choose the calculation"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:901
|
||
msgctxt "page:index.html"
|
||
msgid "Copy Calculator analysis prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1063
|
||
msgctxt "page:index.html"
|
||
msgid "Copy website project prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1091
|
||
msgctxt "page:index.html"
|
||
msgid "Copy game reconstruction prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/index.html:1191
|
||
msgctxt "page:index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:104
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="../">
|
||
#. {ph3}: </a>
|
||
#: website/public/showcase/aegis/index.html:195
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Android"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:198
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Case study · Aegis Authenticator"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/showcase/aegis/index.html:199
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "How does an authenticator{ph0}generate a login code?"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:200
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"A six-digit code changes every 30 seconds. Use REA to find the calculation in an "
|
||
"Android APK, then rebuild it with a clock you can control."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:205
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Aegis 3.4.3 · Android · Official release APK · 6.9 MB"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:208
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "View Aegis on GitHub"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:214
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "From an APK to a code you can reproduce"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <strong class="flow-node" >
|
||
#. {ph3}: </strong >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/showcase/aegis/index.html:216
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"{ph0}01 · Locate the feature{ph1}{ph2}3,077 classes → generating methods{ph3}{ph4}REA "
|
||
"searches the package and traces the code used by the display and copy actions.{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <strong class="flow-node">
|
||
#. {ph3}: </strong >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/showcase/aegis/index.html:225
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"{ph0}02 · Read the calculation{ph1}{ph2}Time + account key → six digits{ph3}{ph4}REA "
|
||
"returns the methods and defaults. The agent explains how they fit together.{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <strong class="flow-node">
|
||
#. {ph3}: </strong >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/showcase/aegis/index.html:233
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"{ph0}03 · Rebuild and check{ph1}{ph2}Change the clock. Watch the code.{ph3}{ph4}A new "
|
||
"browser demo reproduces the rule and checks it against public reference cases.{ph5}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:246
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "In this case study"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#ask">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/aegis/index.html:248
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "{ph0}Ask your agent{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#demo">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/aegis/index.html:249
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "{ph0}Try the code generator{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#find">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/aegis/index.html:250
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "{ph0}Find the code with REA{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#calculation">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/aegis/index.html:251
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "{ph0}Read the calculation{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#verify">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/aegis/index.html:252
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "{ph0}Check the reconstruction{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#try">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/aegis/index.html:253
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "{ph0}Inspect the APK yourself{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:258
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Ask your agent"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/showcase/aegis/index.html:259
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"The app shows a changing login code. We want to find {ph0}what makes it change{ph1} "
|
||
"and reproduce that behavior."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/showcase/aegis/index.html:265
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:269
|
||
#: website/public/showcase/aegis/index.html:732
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Copy"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="aegis-prompt" >
|
||
#. {ph3}: <span translate="no">aegis-v3.4.3.apk</span>
|
||
#. {ph4}: </span >
|
||
#. {ph5}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph6}: </span>
|
||
#: website/public/showcase/aegis/index.html:278
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Use REA to inspect {ph3}. Find how it generates the six-digit login "
|
||
"code, explain why it changes every 30 seconds, and rebuild a small demo where I can "
|
||
"change the time.{ph4}{ph5}{ph6}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#try">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/aegis/index.html:289
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"An example prompt for the downloaded APK, with REA's Android analysis configured. "
|
||
"{ph0}Get the APK and analysis setup ↓{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:297
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Try the code generator"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <mark class="prose-highlight">
|
||
#. {ph1}: </mark>
|
||
#: website/public/showcase/aegis/index.html:298
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"The app groups time into {ph0}30-second blocks.{ph1} It combines the block number with"
|
||
" the account key to generate a code. The same key and block produce the same code."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:305
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Move the clock across 60 seconds"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:308
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Time"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:310
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "seconds"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:311
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Our adjustable example clock"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:314
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "30-second block"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:316
|
||
#: website/public/showcase/aegis/index.html:643
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Block"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code data-aegis-division>floor(59 / 30)</code>
|
||
#. {ph1}: <br />
|
||
#. {ph2}: <span data-aegis-window >
|
||
#. {ph3}: </span >
|
||
#: website/public/showcase/aegis/index.html:317
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "{ph0}{ph1}{ph2}30–59 seconds{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:325
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Generated code"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:333
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Account key + block → six digits"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:339
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Example time, in seconds"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:354
|
||
#: website/public/showcase/aegis/index.html:654
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "59 seconds"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:361
|
||
#: website/public/showcase/aegis/index.html:659
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "60 seconds"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <strong>
|
||
#. {ph3}: </strong>
|
||
#: website/public/showcase/aegis/index.html:370
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"At 59 seconds: {ph0}287082.{ph1} At 60 seconds: {ph2}359152.{ph3} Moving within one "
|
||
"block leaves the code unchanged."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://www.rfc-editor.org/rfc/rfc6238.html#appendix-B" >
|
||
#. {ph1}: </a >
|
||
#: website/public/showcase/aegis/index.html:377
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"The key is fixed, public {ph0}RFC 6238 test data{ph1}. The demo implements the "
|
||
"calculation recovered from the APK."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:384
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"The diagram shows the result at 59 seconds. Enable JavaScript to change the clock."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:393
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Find the code with REA"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:396
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Narrow the APK to three classes"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:399
|
||
#: website/public/showcase/aegis/index.html:431
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Agent → REA"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:409
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "REA → agent · selected results"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>TotpInfo</code>
|
||
#: website/public/showcase/aegis/index.html:421
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"{ph0} is the calculation candidate; the other two concern the progress bar and "
|
||
"imported accounts. TOTP means a time-based one-time password."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:428
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Connect the generator to the app's display"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:445
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "REA → agent · methods and callers"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>EntryHolder.getOtp</code>
|
||
#. {ph1}: <code>TotpInfo.getOtp(timestamp)</code>
|
||
#: website/public/showcase/aegis/index.html:456
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"REA identifies the timestamp overload and finds the base method's callers. Inspecting "
|
||
"{ph0} then shows the display calling {ph1}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>com.beemdevelopment.aegis</code>
|
||
#: website/public/showcase/aegis/index.html:464
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"Requests show a shortened input path. Result class names omit the common {ph0} prefix."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:471
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Read the calculation"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/showcase/aegis/index.html:472
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"REA returns {ph0}the clock conversion, default settings and generating methods.{ph1} "
|
||
"The constructors set a 30-second interval and six digits; the timestamp method turns "
|
||
"seconds into a block number."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/aegis/index.html:487
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "{ph0}01{ph1} Time block"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/aegis/index.html:495
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "{ph0}02{ph1} Key + block"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/aegis/index.html:503
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "{ph0}03{ph1} Six digits"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:515
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "REA · selected decompiled Java"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:545
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Readable summary · agent's interpretation"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/showcase/aegis/index.html:562
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"{ph0}Time chooses the block.{ph1} Seconds 30 through 59 all give block 1. At 60 "
|
||
"seconds, the block becomes 2."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/showcase/aegis/index.html:568
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"{ph0}The key matters too.{ph1} The generator combines the account key with the block. "
|
||
"An account with a different key can show a different code at the same time."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/showcase/aegis/index.html:575
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"{ph0}Keep six digits.{ph1} The remainder after division by 1,000,000 is padded with "
|
||
"zeroes when needed, so a code can begin with 0."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/LICENSE"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#: website/public/showcase/aegis/index.html:582
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"Excerpts from several inspected methods, with line wrapping for display. The right "
|
||
"panel is an explanatory summary. {ph0}Aegis code is GPL-3.0.{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:591
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Inside the generator"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>generateOTP</code>
|
||
#. {ph1}: <code>kotlin.ExceptionsKt</code>
|
||
#. {ph2}: <code>TotpInfo</code>
|
||
#. {ph3}: <code>HOTP</code>
|
||
#: website/public/showcase/aegis/index.html:592
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"The released APK puts {ph0} in {ph1}. REA follows the call from {ph2} and returns this"
|
||
" body; the original source calls the helper {ph3}."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:600
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "REA · generateOTP, complete body"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:614
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"The last hash byte selects a position. Four bytes at that position provide a positive "
|
||
"31-bit number; formatting reduces it to the requested number of digits. The "
|
||
"constructor's last argument selects the code-formatting branch introduced by "
|
||
"compilation."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/app/src/main/java/com/beemdevelopment/aegis/crypto/otp/HOTP.java"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#: website/public/showcase/aegis/index.html:621
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "{ph0}Compare with the matching release source{ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:631
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Check the reconstruction"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/showcase/aegis/index.html:632
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"We assembled the selected REA-returned Java methods in a small test program. Their "
|
||
"output matched an independent reconstruction on {ph0}133 test cases{ph1}, including "
|
||
"time-block boundaries and codes beginning with zero."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:642
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Example time"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:644
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Six-digit code"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:649
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "30 seconds"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:664
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "1,111,111,109 seconds"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://www.rfc-editor.org/rfc/rfc6238.html#appendix-B" >
|
||
#. {ph1}: </a >
|
||
#: website/public/showcase/aegis/index.html:671
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"The generator also matches the six published SHA-1 reference cases in {ph0}RFC "
|
||
"6238{ph1}. Check the browser implementation against them:"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:679
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Run reference checks"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:686
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Read the demo's calculation"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:690
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"The reference cases use eight digits. The check also verifies their six-digit results."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:699
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"Verification runs extracted Java methods and the new demo. The Android APK was "
|
||
"inspected statically."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:706
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Inspect the APK yourself"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../get-started/">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/aegis/index.html:707
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"{ph0}Set up REA{ph1} on macOS or Linux, then download these two files into the same "
|
||
"folder. On Windows, use a Linux environment such as WSL."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>JAVA_HOME</code>
|
||
#. {ph1}: <code>PATH</code>
|
||
#: website/public/showcase/aegis/index.html:712
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"Android analysis needs a full JDK 17 or later. Select it with {ph0} or {ph1}. This "
|
||
"case used JDK 21."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:718
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Download Aegis APK"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:722
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Download Android analysis provider"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:728
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Point REA at the provider file and inspect the APK:"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:731
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "macOS / Linux"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>REA_JADX_MCP_JAR</code>
|
||
#: website/public/showcase/aegis/index.html:745
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"Your agent can continue through REA's CLI using the prompt above. For MCP, add {ph0} "
|
||
"to the REA server's environment and reconnect it."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong >
|
||
#. {ph1}: </strong >
|
||
#: website/public/showcase/aegis/index.html:750
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"A next question: {ph0}what happens when an account uses eight digits or a different "
|
||
"time interval?{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:760
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Sources"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/beemdevelopment/Aegis/releases/tag/v3.4.3" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/beemdevelopment/Aegis/tree/d6f4e5925a97e4e91593f1542085eae03432a759"
|
||
#. >
|
||
#. {ph3}: </a >
|
||
#. {ph4}: <a
|
||
#. href="https://github.com/beemdevelopment/Aegis/blob/d6f4e5925a97e4e91593f1542085eae03432a759/LICENSE"
|
||
#. >
|
||
#. {ph5}: </a >
|
||
#: website/public/showcase/aegis/index.html:762
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"{ph0}Official Aegis 3.4.3 release{ph1} · {ph2}Matching source commit{ph3} · "
|
||
"{ph4}GPL-3.0 license{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://www.rfc-editor.org/rfc/rfc6238.html#appendix-B" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a href="test-vectors.json">
|
||
#. {ph3}: </a>
|
||
#: website/public/showcase/aegis/index.html:778
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "{ph0}RFC 6238 reference cases{ph1} · {ph2}Demo test data{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:785
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"Inspected with REA 6.1.0 on 9 October 2026. Decompiled excerpts are credited to Aegis;"
|
||
" the diagram, readable summary and browser reconstruction are new teaching material."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:6
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Aegis APK Reverse Engineering: Login Codes — REA"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:7
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid ""
|
||
"Inspect the Aegis Android APK with REA, recover its six-digit login-code calculation "
|
||
"and try a reconstruction with an adjustable clock."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:245
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:256
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Aegis APK case study"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:269
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Copy Aegis example prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:482
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Follow the login-code calculation"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:732
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Copy APK inspection command"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/aegis/index.html:808
|
||
msgctxt "page:showcase/aegis/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:103
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="../">
|
||
#. {ph3}: </a>
|
||
#: website/public/showcase/ctf/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / CTF"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:197
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Case study · DownUnderCTF 2023"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/showcase/ctf/index.html:198
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Find the flag in{ph0}a CTF binary."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>Correct!</code>
|
||
#: website/public/showcase/ctf/index.html:199
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"Use REA to inspect a small flag checker, turn its rules into equations and find an "
|
||
"input that makes the original program print {ph0}."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:204
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "masked squares flag checker · Easy · Linux x86-64"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:207
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "View the original challenge"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:215
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "From a binary to a checked answer"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <strong class="flow-node">
|
||
#. {ph3}: </strong >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/showcase/ctf/index.html:217
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"{ph0}01 · Find the check{ph1}{ph2}Strings → checking functions{ph3}{ph4}REA finds the "
|
||
"prompt, its references and the code that accepts or rejects an input.{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <strong class="flow-node">
|
||
#. {ph3}: </strong >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/showcase/ctf/index.html:225
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"{ph0}02 · Extract the rules{ph1}{ph2}36 characters · 26 sums{ph3}{ph4}REA returns the "
|
||
"instructions and data behind each check. The agent turns them into equations.{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <strong class="flow-node">
|
||
#. {ph3}: </strong >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/showcase/ctf/index.html:233
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"{ph0}03 · Solve and run{ph1}{ph2}Recovered flag → Correct!{ph3}{ph4}A Python script "
|
||
"solves the equations. REA captures the original program accepting the result.{ph5}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:242
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "The challenge is by joseph, published in DownUnderCTF's official repository."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:250
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "In this case study"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#find">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/ctf/index.html:252
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "{ph0}Find the checking code{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#mask">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/ctf/index.html:253
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "{ph0}Read one mask{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#code">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/ctf/index.html:254
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "{ph0}Assembly to readable code{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#solve">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/ctf/index.html:255
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "{ph0}Solve the equations{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#verify">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/ctf/index.html:256
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "{ph0}Check the answer{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#try">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/ctf/index.html:257
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "{ph0}Try it yourself{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:262
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Find the checking code"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>Correct!</code>
|
||
#. {ph1}: <code>Incorrect!</code>
|
||
#: website/public/showcase/ctf/index.html:263
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"The handout is a 15 KB executable. It asks for a flag, then prints {ph0} or {ph1}. "
|
||
"Start with a simple request to your agent."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/showcase/ctf/index.html:270
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:275 website/public/showcase/ctf/index.html:494
|
||
#: website/public/showcase/ctf/index.html:518 website/public/showcase/ctf/index.html:588
|
||
#: website/public/showcase/ctf/index.html:735
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Copy"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="ctf-prompt" >
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph5}: </span>
|
||
#: website/public/showcase/ctf/index.html:284
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Use REA to analyze ms_flag_checker and find the flag. Explain how the "
|
||
"checks work, then verify the answer with the original program.{ph3}{ph4}{ph5}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:293
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"An example prompt, with the downloaded challenge available locally and a native "
|
||
"analysis provider connected."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:299
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Follow the input prompt to its function"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:302 website/public/showcase/ctf/index.html:338
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Agent → REA"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:318
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "REA → agent · selected results"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:328
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"The reference gives the agent a place to investigate, even though the executable's "
|
||
"original function names have been removed."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:335
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Read the checker and its two helpers"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:350
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "REA → agent · selected instructions"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>0x18</code>
|
||
#. {ph1}: <code>0x270</code>
|
||
#: website/public/showcase/ctf/index.html:363
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"The first loop copies 36 character codes. The checking loop decodes a mask, sums the "
|
||
"selected codes and compares the result with a stored number. Its {ph0}-byte steps "
|
||
"across {ph1} bytes give 26 masks."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:371
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"These are selected results from a fresh REA analysis. The local target path is "
|
||
"shortened for display; addresses refer to REA's imported image."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:379
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "One check reveals one character"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:380
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"The checker arranges the input in a 6×6 grid. A mask chooses which cells contribute to"
|
||
" a sum. Its compact encoding uses negative numbers to skip cells and positive numbers "
|
||
"to select them."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../assets/figures/ctf-mask-equation.svg" >
|
||
#. {ph1}: </a >
|
||
#: website/public/showcase/ctf/index.html:400
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "The seventh check selects just one position. {ph0}Open figure{ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:407
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Read the mask and its target from the binary"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:413
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Agent → REA · read_bytes"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:420
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "REA → agent · seventh entries"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>MOVSX</code>
|
||
#. {ph1}: <code>eb</code>
|
||
#. {ph2}: <code>code[21] = 55</code>
|
||
#. {ph3}: <code>7</code>
|
||
#: website/public/showcase/ctf/index.html:429
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"The instruction {ph0} reads mask bytes as signed values. This is why {ph1} means −21. "
|
||
"The target is a little-endian integer. Together, these bytes tell the agent that "
|
||
"{ph2}, so that character is {ph3}."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:438
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "From instructions to a readable check"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:439
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"Select a step to connect the summing helper and its caller to the same rule in C."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/ctf/index.html:449
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "{ph0}01{ph1} Start"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/ctf/index.html:457
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "{ph0}02{ph1} Select"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/ctf/index.html:465
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "{ph0}03{ph1} Add"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/ctf/index.html:473
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "{ph0}04{ph1} Advance"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/ctf/index.html:481
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "{ph0}05{ph1} Compare"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:493
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "REA · selected original instructions"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:517
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Readable C · one-check summary"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>ECX</code>
|
||
#: website/public/showcase/ctf/index.html:546
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "{ph0}01 · Start at zero.{ph1} {ph2} holds the running sum."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/showcase/ctf/index.html:550
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"{ph0}02 · Check the mask cell.{ph1} A zero value skips the character; a nonzero value "
|
||
"includes it."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/showcase/ctf/index.html:554
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"{ph0}03 · Add a character code.{ph1} The input's integer at the same offset is added "
|
||
"to the sum."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#: website/public/showcase/ctf/index.html:558
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"{ph0}04 · Move to the next cell.{ph1} The original loop advances four bytes per "
|
||
"integer and visits six rows of six cells."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>EAX</code>
|
||
#. {ph3}: <code>Incorrect!</code>
|
||
#: website/public/showcase/ctf/index.html:563
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"{ph0}05 · Compare with the stored target.{ph1} The caller receives the sum in {ph2}. A"
|
||
" mismatch jumps to {ph3}."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:570
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"The instructions come from the summing helper and its caller. The C is an explanatory "
|
||
"summary with descriptive names and a flattened 36-cell loop."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:578
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Solve the 26 equations"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:579
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"Most masks select several cells. For example, the first check adds 16 character codes "
|
||
"and requires a total of 1441. The overlapping selections give equations that a small "
|
||
"Python script can solve together."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:587
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Python · solver excerpt"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>DUCTF{…}</code>
|
||
#: website/public/showcase/ctf/index.html:615
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"Z3 is a solver that finds values satisfying these equations. This excerpt uses the "
|
||
"extracted checks and assumes a {ph0} flag with letters, digits, underscores and "
|
||
"braces. The complete download includes all 26 masks and targets."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:621
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Download the complete solver"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:627
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Check the answer with the original program"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>z</code>
|
||
#. {ph1}: <code>y</code>
|
||
#: website/public/showcase/ctf/index.html:628
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"REA's process capture records the original executable accepting the solved flag. "
|
||
"Changing one selected character from {ph0} to {ph1} makes the first sum 1440 instead "
|
||
"of 1441, and the program rejects it."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:638
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Input"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:639
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Observed output"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:640
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Exit code"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:645
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Solver's flag"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:650
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "One character changed"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:658
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Show the recovered flag and captured output"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:661
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "REA · original program output"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:662
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Copy flag"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:674
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"The recovered value also matches the flag in the organizers' published challenge "
|
||
"metadata, checked after solving the binary."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:680
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Source, target identity and analysis details"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:681
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"Fresh analysis and two process captures on 8 October 2026, using REA 4.1.0 with Ghidra"
|
||
" 12.1.4 on Linux x64. The binary is a stripped x86-64 ELF, 15,248 bytes."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:688
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Original executable · SHA-256"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:692
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"The string references, functions and constants were inspected before reading the "
|
||
"organizers' source or solution. The Python solver and the diagram were built from "
|
||
"those REA results."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/DownUnderCTF/Challenges_2023_Public/blob/b48f83db2984bc7fa2ec7879a32d7efb1be8d333/rev/masked-
|
||
#. squares-flag-checker/src/ms_flag_checker.c" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/DownUnderCTF/Challenges_2023_Public/blob/b48f83db2984bc7fa2ec7879a32d7efb1be8d333/rev/masked-
|
||
#. squares-flag-checker/ctfcli.yaml" >
|
||
#. {ph3}: </a >
|
||
#. {ph4}: <a href="https://github.com/morluto/rea/blob/main/website/evidence/ctf-masked-
|
||
#. squares.md" >
|
||
#. {ph5}: </a >
|
||
#: website/public/showcase/ctf/index.html:697
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"{ph0}Compare with the organizers' source{ph1} · {ph2}Challenge metadata and flag{ph3} "
|
||
"· {ph4}REA evidence notes{ph5}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:717
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Try it yourself"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:718
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"Download the original challenge and the solver into one folder. Use the prompt above "
|
||
"to investigate with your agent, or run the included script."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:724
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Download the original challenge"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:728
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Download solver"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:734
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Terminal · solve and run"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>z3-solver</code>
|
||
#: website/public/showcase/ctf/index.html:751
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"The script prints a candidate flag; paste it at the program's prompt. Solving needs "
|
||
"Python and {ph0}. Running the original executable needs Linux x86-64."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:756
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Set up REA with your coding agent"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:6
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "CTF Reverse Engineering: DownUnderCTF Flag Checker — REA"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:7
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"Use REA to solve DownUnderCTF's masked squares flag checker. Find the checking "
|
||
"functions, extract the masks and compare a recovered flag with the original program."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:249
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:260
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "CTF flag-checker case study"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:275
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Copy CTF example prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:386
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "CTF mask equation; scroll horizontally on smaller screens"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:392
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid ""
|
||
"The seventh mask skips 21 cells, selects position 21, then skips 14. Only that cell "
|
||
"contributes to the sum. Its required character code is 55, which means the character "
|
||
"is 7."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:444
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Follow the CTF check"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:494
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Copy CTF assembly"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:518
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Copy readable CTF check"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:588
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Copy CTF solver excerpt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:662
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Copy recovered flag"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:735
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Copy CTF solver commands"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/ctf/index.html:777
|
||
msgctxt "page:showcase/ctf/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:103
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="../">
|
||
#. {ph3}: </a>
|
||
#: website/public/showcase/dx-ball/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / DX-Ball"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:197
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Case study · DX-Ball 1.07"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/showcase/dx-ball/index.html:198
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Rebuilding DX-Ball{ph0}from its executable."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:199
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"The goal is a maintainable C version of the 1996 Windows game. REA helps the agent "
|
||
"inspect the original, one function at a time."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:203
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Windows i386 · C · REA"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../assets/figures/dx-ball-sound-pan-investigation.svg" >
|
||
#. {ph1}: </a >
|
||
#: website/public/showcase/dx-ball/index.html:220
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"One function, from executable to checked C. REA supplies the instructions, callers and"
|
||
" data reads; the reconstruction project implements and tests the result. {ph0}Open "
|
||
"figure{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:231
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "In this case study"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#progress">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/dx-ball/index.html:233
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "{ph0}The project{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#sound-pan">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/dx-ball/index.html:234
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "{ph0}Sound pan{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#checking">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/dx-ball/index.html:235
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "{ph0}Checking the result{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#continue">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/dx-ball/index.html:236
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "{ph0}Continue the work{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:244
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "maintained C functions"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:248
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "comparisons with original code"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:252
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "functions with matching compiled bytes"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-
|
||
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/PROGRESS.md" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a href="https://github.com/N0zoM1z0/dx-
|
||
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/ORACLES.md" >
|
||
#. {ph3}: </a >
|
||
#: website/public/showcase/dx-ball/index.html:255
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"Project checkpoint: 7 October 2026. {ph0}Progress ledger{ph1} · {ph2}Test "
|
||
"coverage{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:267
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "The project so far"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:268
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"The recovered code covers board and resource handling, brick hits, animations, "
|
||
"particles and bonus production. Current builds provide inspection utilities and an "
|
||
"analysis library. Work on the playable game continues with ball and paddle physics, "
|
||
"power-up handling and Windows integration."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:278
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Finding the sound-pan calculation"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:279
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"When a brick is hit, its horizontal position is passed to the sound code. The "
|
||
"investigation needed to recover how that screen coordinate becomes a left/right "
|
||
"panning value."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/showcase/dx-ball/index.html:286
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:290
|
||
#: website/public/showcase/dx-ball/index.html:481
|
||
#: website/public/showcase/dx-ball/index.html:502
|
||
#: website/public/showcase/dx-ball/index.html:573
|
||
#: website/public/showcase/dx-ball/index.html:727
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Copy"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="dxball-prompt" >
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph5}: </span>
|
||
#: website/public/showcase/dx-ball/index.html:299
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Use REA to find how DX-Ball calculates sound panning. Explain the "
|
||
"calculation and show the code.{ph3}{ph4}{ph5}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:307
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"An example prompt for your coding agent, with the local executable available. The "
|
||
"investigation below shows the REA queries and evidence behind the answer."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:312
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"The agent used REA to inspect the function, follow its brick-hit caller and read the "
|
||
"constants from the executable. Those results supplied the input and arithmetic needed "
|
||
"to write the C function below."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>0x406400</code>
|
||
#. {ph1}: <code>FUN_00406400(void)</code>
|
||
#. {ph2}: <code>__ftol()</code>
|
||
#: website/public/showcase/dx-ball/index.html:318
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"The first function result for {ph0} included pseudocode declaring {ph1} and calling "
|
||
"{ph2}. Its instruction view showed a stack input and floating-point operations. That "
|
||
"discrepancy gave the agent a concrete reason to keep investigating."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:326
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "The first decompiler view"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:329
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "REA result · pseudocode excerpt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:339
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"The output shows a conversion call. Reading the instructions below reveals the input "
|
||
"and the calculation feeding that call."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:345
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Three questions answered through REA"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:348
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Recover the missing input"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>analyze_function</code>
|
||
#: website/public/showcase/dx-ball/index.html:352
|
||
#: website/public/showcase/dx-ball/index.html:376
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Agent → REA · {ph0}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:358
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "REA → agent · instruction excerpt"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>[EBP+8]</code>
|
||
#: website/public/showcase/dx-ball/index.html:365
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"The function result includes instructions alongside pseudocode and callers. Here, "
|
||
"{ph0} exposes the integer input missing from the decompiler view."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:372
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Follow the caller to understand the input"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:382
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "REA → agent · caller excerpt"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>tile_x</code>
|
||
#. {ph1}: <code>20 + 30 × tile_x</code>
|
||
#: website/public/showcase/dx-ball/index.html:389
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"REA identified this caller in the first result. Its preceding instructions scale {ph0}"
|
||
" by 30; adding 20 gives the brick's screen coordinate, {ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:396
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Read the values behind the memory addresses"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>read_bytes</code>
|
||
#: website/public/showcase/dx-ball/index.html:400
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Agent → REA · two {ph0} requests"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:410
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "REA byte results · decoded as doubles"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:417
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"The returned bytes establish the two arithmetic constants and initial pan scale. The "
|
||
"agent now has the values needed for the C expression."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:425
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "From REA's findings to C"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:426
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"Follow the five steps below. Each selection highlights the original instructions and "
|
||
"the C lines they informed."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/dx-ball/index.html:436
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "{ph0}01{ph1} Input"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/dx-ball/index.html:444
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "{ph0}02{ph1} Multiply"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/dx-ball/index.html:452
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "{ph0}03{ph1} Subtract"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/dx-ball/index.html:460
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "{ph0}04{ph1} Scale"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/dx-ball/index.html:468
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "{ph0}05{ph1} Return"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:480
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Original x86 · excerpt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:501
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Reconstructed C"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>[EBP+8]</code>
|
||
#. {ph3}: <code>FILD</code>
|
||
#. {ph4}: <code>x</code>
|
||
#: website/public/showcase/dx-ball/index.html:528
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"{ph0}01 · Read the input.{ph1} The instruction view in REA's function result reads "
|
||
"{ph2} and uses {ph3} to load the integer. Following its caller through REA establishes"
|
||
" the screen-coordinate meaning of the C parameter {ph4}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>FMUL</code>
|
||
#. {ph3}: <code>0x420068</code>
|
||
#. {ph4}: <code>read_bytes</code>
|
||
#. {ph5}: <code>1.5625</code>
|
||
#: website/public/showcase/dx-ball/index.html:535
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"{ph0}02 · Multiply by 1.5625.{ph1} {ph2} reads the double at {ph3}. The bytes returned"
|
||
" by REA's {ph4} decode to {ph5}; the C uses the same constant."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>FSUB</code>
|
||
#. {ph3}: <code>0x420070</code>
|
||
#. {ph4}: <code>500.0</code>
|
||
#. {ph5}: <code>320</code>
|
||
#: website/public/showcase/dx-ball/index.html:541
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"{ph0}03 · Subtract 500.0.{ph1} {ph2} reads the double at {ph3}. REA's byte result "
|
||
"decodes to {ph4}, shifting the calculation's center to screen coordinate {ph5}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>FMUL</code>
|
||
#. {ph3}: <code>0x4210a0</code>
|
||
#. {ph4}: <code>dxball_pan_scale</code>
|
||
#. {ph5}: <code>1.0</code>
|
||
#: website/public/showcase/dx-ball/index.html:547
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"{ph0}04 · Apply the stored scale.{ph1} The second {ph2} reads {ph3}. That global is "
|
||
"named {ph4} in the maintained source. REA's second byte read establishes its initial "
|
||
"value of {ph5}."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>0x406430</code>
|
||
#. {ph3}: <code>__ftol</code>
|
||
#. {ph4}: <code>DxBallInt</code>
|
||
#: website/public/showcase/dx-ball/index.html:554
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"{ph0}05 · Return an integer.{ph1} The call at {ph2} reaches {ph3}, identified in REA's"
|
||
" callee results. The C casts the result to {ph4}; original-x86 comparisons check the "
|
||
"returned value."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:563
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"The assembly excerpt selects the input, arithmetic and return instructions. The full "
|
||
"listing below also includes the intervening stores and function setup and cleanup."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:569
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Full assembly and supporting evidence"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:572
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "REA result · 0x406400–0x40643e"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:606
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "What the caller supplies"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>0x411f40</code>
|
||
#: website/public/showcase/dx-ball/index.html:607
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"The brick-hit function at {ph0} scales its tile coordinate by 30, adds 20, then pushes"
|
||
" it before the call:"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:621
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "What the data reads establish"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:624
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "REA byte reads, decoded as little-endian doubles"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:629
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Address"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:630
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Value"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:631
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Used for"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:638
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "First multiplication"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:643
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Subtraction"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>1.0</code>
|
||
#: website/public/showcase/dx-ball/index.html:647
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "{ph0} initially"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:648
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Stored pan scale"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:653
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"Recorded with REA 4.1.0 for the hash-pinned DX-Ball 1.07 target. The linked "
|
||
"investigation notes retain the Evidence IDs."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-
|
||
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/src/gameplay.c#L41" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a href="https://github.com/N0zoM1z0/dx-
|
||
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/GAMEPLAY_OWNER.md" >
|
||
#. {ph3}: </a >
|
||
#: website/public/showcase/dx-ball/index.html:658
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"{ph0}Maintained source{ph1} · {ph2}Investigation notes and evidence references{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:672
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Checking the recovered function"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:673
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"The recovered function passes two checks: its return values match the original, and "
|
||
"its compiled bytes match the executable."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:679
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "3,205 behavior cases"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:680
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"The tests execute the original x86 function and compare its return value with the "
|
||
"maintained C. They cover every integer position from 0 to 640 at five pan scales: 0, "
|
||
"0.5, 1, 20 and −1."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:688
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "63 matching bytes"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:689
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"The C function is compiled with the pinned VC4.0 toolchain. Compiler replay matches "
|
||
"the complete function after applying the reviewed relocations and checking the "
|
||
"referenced constants."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:697
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"At a scale of 1, the recovered calculation returns −500 at the left edge, 0 at the "
|
||
"center and 500 at the right edge. The next part of the audio work is integrating that "
|
||
"value with the game's sound backend."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-
|
||
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/BUILD_MATCHING.md" >
|
||
#. {ph1}: </a >
|
||
#: website/public/showcase/dx-ball/index.html:703
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "{ph0}Read the compiler replay details{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:712
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Continue the investigation"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:713
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"The same approach is being used for particle updates, explosion queues and bonus "
|
||
"generation: inspect the relevant functions, recover their state and dependencies, then"
|
||
" compare the implementation with the original."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:719
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"To inspect the sound-pan function yourself, follow the DX-Ball project's setup "
|
||
"instructions and supply its matching original target. Then run:"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:726
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "In the DX-Ball checkout"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-ball" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span>
|
||
#. {ph3}: </span>
|
||
#: website/public/showcase/dx-ball/index.html:740
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "{ph0}DX-Ball repository{ph1}{ph2}Current source, progress and local setup.{ph3}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../guides/native/">
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span >
|
||
#. {ph3}: </span >
|
||
#: website/public/showcase/dx-ball/index.html:745
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"{ph0}REA analysis workflow{ph1}{ph2}Follow the calculation, then use the same approach"
|
||
" with your own binary.{ph3}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="https://github.com/N0zoM1z0/dx-
|
||
#. ball/blob/a55dca27ec0a07018c1b2c95ae2be027f7d8c3c4/docs/ENTITIES_OWNER.md" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span >
|
||
#. {ph3}: </span >
|
||
#: website/public/showcase/dx-ball/index.html:752
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"{ph0}Particles and bonus production{ph1}{ph2}A larger investigation into state, queues"
|
||
" and pixel writes.{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:763
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Start with your own target"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:6
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "DX-Ball Reverse Engineering: Sound Panning — REA"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:7
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"Follow a DX-Ball reconstruction from binary analysis through REA to maintained C, "
|
||
"original-x86 tests and matching compiled function bytes."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:206
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "DX-Ball sound-pan investigation; scroll horizontally on smaller screens"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:212
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid ""
|
||
"DXBALL.EXE function 0x00406400 is inspected with REA. A brick-hit caller supplies 20 "
|
||
"plus 30 times tile_x. Instructions load x, multiply by 1.5625, subtract 500.0, apply "
|
||
"pan_scale and return an integer. The maintained C is checked independently against the"
|
||
" original x86 in 3,205 cases and by VC4.0 compiler replay matching 63 bytes."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:230
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:239
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "DX-Ball reconstruction case study"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:290
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Copy example prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:431
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Follow the sound-pan calculation"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:481
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Copy original assembly excerpt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:502
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Copy sound-pan function"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:573
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Copy complete sound-pan assembly"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:727
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Copy DX-Ball analysis command"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/dx-ball/index.html:785
|
||
msgctxt "page:showcase/dx-ball/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:103
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "{ph0}Home{ph1} / Showcases"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:195
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "REA case studies."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:196
|
||
msgctxt "page:showcase/index.html"
|
||
msgid ""
|
||
"Android, games, Electron and a CTF challenge, with code, figures and checked results."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:203
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Android · APK analysis"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:205
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "How an authenticator generates a login code"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:206
|
||
msgctxt "page:showcase/index.html"
|
||
msgid ""
|
||
"Find Aegis's six-digit code calculation in its released APK. Trace the generating "
|
||
"methods with REA, then move a demo clock to see why the code changes every 30 seconds."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:212
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "APK"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:213
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Generating code"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:214
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Recovered rule"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:215
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Adjustable clock"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:217
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Read the Android case study"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:221
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "CTF · Native analysis"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:223
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Solve a CTF flag checker"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:224
|
||
msgctxt "page:showcase/index.html"
|
||
msgid ""
|
||
"Inspect an easy DownUnderCTF challenge with REA. Find its checking functions, turn "
|
||
"masks and sums into equations, then verify the solved flag with the original program."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:230
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Binary"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:231
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Checking code"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:232
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Equations"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:233
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Correct!"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:235
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Read the CTF case study"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:239
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Native · Reconstruction"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:241
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "DX-Ball's sound-pan calculation"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:242
|
||
msgctxt "page:showcase/index.html"
|
||
msgid ""
|
||
"Recover a sound-pan calculation from a 1996 Windows game. REA's instructions, caller "
|
||
"references and numeric constants lead to a small C function, checked against the "
|
||
"original behavior and all 63 compiled bytes."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:249
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Executable"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:250
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "REA findings"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:251
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Recovered C"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:252
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Validation"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:254
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Read the DX-Ball case study"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:258
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Electron · Feature tracing"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:260
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "How Notion copies text and HTML"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:261
|
||
msgctxt "page:showcase/index.html"
|
||
msgid ""
|
||
"Trace a page-facing API through Notion's packaged JavaScript. Follow its IPC wrappers "
|
||
"to the system clipboard, then see how a small HTML marker keeps rich block data "
|
||
"connected to a copy."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:267
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Packaged app"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:268
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Exposed API"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:269
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "IPC wrappers"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:270
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Clipboard"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:272
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Read the Notion case study"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:276
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "PC-98 DOS · Reconstruction"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:278
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "How TH04 aims a ring of bullets"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:279
|
||
msgctxt "page:showcase/index.html"
|
||
msgid ""
|
||
"Inspect the original 16-bit angle helper with REA. Match its multiply, divide and "
|
||
"coordinate operations to readable C++, then see how they produce a ring aimed at the "
|
||
"player."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:285
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Original DOS code"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:286
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "REA instructions"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:287
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Angle calculation"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:288
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Bullet ring"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:290
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Read the TH04 case study"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:295
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Step-by-step guides"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:296
|
||
msgctxt "page:showcase/index.html"
|
||
msgid ""
|
||
"The guides walk through a native calculation, an Electron export and a browser "
|
||
"request. Each starts with a prompt and a concrete target."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:300
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Read the guides"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:6
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Reverse Engineering Case Studies — REA"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:7
|
||
msgctxt "page:showcase/index.html"
|
||
msgid ""
|
||
"Follow REA investigations through code, figures and demos: an Android authenticator, "
|
||
"DX-Ball, Notion, TH04 and a DownUnderCTF flag checker."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/index.html:317
|
||
msgctxt "page:showcase/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:103
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="../">
|
||
#. {ph3}: </a>
|
||
#: website/public/showcase/notion/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / Notion"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:197
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Case study · Electron"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/showcase/notion/index.html:198
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "How Notion copies{ph0}text and HTML."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:199
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"Trace a clipboard call from Notion's page API, through the preload and main process, "
|
||
"to Electron's clipboard writer."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:203
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Notion Desktop 7.6.1 · JavaScript · REA"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:207
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "The bridge inside Notion's desktop package"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span>
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: <code>clipboard.write(data)</code>
|
||
#. {ph4}: </span>
|
||
#. {ph5}: <span class="flow-note" >
|
||
#. {ph6}: </span >
|
||
#: website/public/showcase/notion/index.html:209
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"{ph0}01 · Page-facing API{ph1} {ph2}{ph3}{ph4} {ph5}The preload exposes a callable "
|
||
"method.{ph6}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span>
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: <code>ipcRenderer.invoke</code>
|
||
#. {ph4}: </span>
|
||
#. {ph5}: <span class="flow-note" >
|
||
#. {ph6}: </span >
|
||
#: website/public/showcase/notion/index.html:216
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"{ph0}02 · Preload wrapper{ph1} {ph2}{ph3}{ph4} {ph5}The wrapper sends the channel and "
|
||
"arguments.{ph6}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span>
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: <code>ipcMain.handle</code>
|
||
#. {ph4}: </span>
|
||
#. {ph5}: <span class="flow-note" >
|
||
#. {ph6}: </span >
|
||
#: website/public/showcase/notion/index.html:223
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"{ph0}03 · Main-process handler{ph1} {ph2}{ph3}{ph4} {ph5}The receiver checks which "
|
||
"page sent it.{ph6}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span>
|
||
#. {ph2}: <span class="flow-node">
|
||
#. {ph3}: <code>clipboard.write(data)</code>
|
||
#. {ph4}: </span>
|
||
#. {ph5}: <span class="flow-note" >
|
||
#. {ph6}: </span >
|
||
#: website/public/showcase/notion/index.html:230
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"{ph0}04 · System clipboard{ph1} {ph2}{ph3}{ph4} {ph5}Electron writes the supplied text"
|
||
" and HTML.{ph6}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code class="notion-channel">notion:clipboard:write</code>
|
||
#: website/public/showcase/notion/index.html:238
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "One channel joins the two sides: {ph0}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:242
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"The packaged code uses the same channel in the preload and main process. Resolving the"
|
||
" wrappers reveals the Electron calls behind those names."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:251
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "In this case study"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#clipboard">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/notion/index.html:253
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "{ph0}Follow the clipboard bridge{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#rich-clipboard">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/notion/index.html:254
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "{ph0}Keeping a block's structure{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#continue">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/notion/index.html:255
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "{ph0}More examples and sources{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:260
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Where does the copy operation go?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>clipboard.write</code>
|
||
#: website/public/showcase/notion/index.html:261
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"The page sees a method called {ph0}. Its implementation in the preload is a wrapper. "
|
||
"The useful question is what that wrapper sends, and which code receives it."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/showcase/notion/index.html:268
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:272
|
||
#: website/public/showcase/notion/index.html:345
|
||
#: website/public/showcase/notion/index.html:374
|
||
#: website/public/showcase/notion/index.html:405
|
||
#: website/public/showcase/notion/index.html:433
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Copy"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="notion-prompt" >
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph5}: </span>
|
||
#: website/public/showcase/notion/index.html:281
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Use REA to trace how Notion copies text and HTML to the system "
|
||
"clipboard. Show the code at each step.{ph3}{ph4}{ph5}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:289
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"An example prompt with Notion's local application package available to your coding "
|
||
"agent."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:294
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "REA finds where to start reading"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:295
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"Analyzing the tab preload with REA locates the API exposed to the page and the call "
|
||
"that sends an IPC request. Both findings come with source ranges in the minified "
|
||
"bundle:"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:301
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "REA findings → two places to open"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:304
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Exposed page API"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:310
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Renderer IPC call"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>analyze_javascript_application</code>
|
||
#: website/public/showcase/notion/index.html:316
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"Selected fields from a fresh {ph0} result on Notion's tab preload, recorded with REA "
|
||
"4.1.0. Positions use the original bundle's line and zero-based column."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>invokerInMain</code>
|
||
#. {ph1}: <code class="notion-channel">notion:clipboard:write</code>
|
||
#: website/public/showcase/notion/index.html:323
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"The agent opens those locations, finds the clipboard member in the assembled API, and "
|
||
"reads {ph0}. Its call site supplies {ph1}. That name gives the agent something precise"
|
||
" to look for in the main bundle. The four excerpts below show the route it connects."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:332
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Four short pieces of code"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:333
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"Simplified from the packaged JavaScript, with readable variable names. Unrelated "
|
||
"members are omitted."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:339
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Start at the API exposed to the page"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">preload.js</span>
|
||
#: website/public/showcase/notion/index.html:342
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "tab_browser_view/{ph0} · API member"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>invokerInMain</code>
|
||
#: website/public/showcase/notion/index.html:361
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"This member supplies the channel name. The implementation of {ph0} tells us how the "
|
||
"request leaves the page's process."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:368
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Resolve the preload's wrapper"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">preload.js</span>
|
||
#: website/public/showcase/notion/index.html:371
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "tab_browser_view/{ph0} · IPC helper"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code class="notion-channel">notion:clipboard:write</code>
|
||
#: website/public/showcase/notion/index.html:391
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"The returned function forwards the arguments through Electron's request-and-response "
|
||
"IPC. We can now look for {ph0} on the main-process side."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:399
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Check how the receiver is registered"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">index.js</span>
|
||
#: website/public/showcase/notion/index.html:402
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "main/{ph0} · handler helper"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>addListener</code>
|
||
#. {ph1}: <code>ipcMain.handle</code>
|
||
#: website/public/showcase/notion/index.html:420
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"The main process uses another wrapper. Its {ph0} method registers an {ph1} receiver "
|
||
"for that channel."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:427
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Find the write and its sender check"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span translate="no">index.js</span>
|
||
#: website/public/showcase/notion/index.html:430
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "main/{ph0} · clipboard receiver"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:450
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"This is the destination. After checking the sender, the handler passes the supplied "
|
||
"data to Electron's clipboard API. The channel and the two resolved wrappers connect "
|
||
"the exposed method to this call."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:461
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "How does a copied block keep its structure?"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>electronApi.clipboard.write</code>
|
||
#: website/public/showcase/notion/index.html:462
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"Notion's web editor sends text and HTML through {ph0}. It keeps the block data locally"
|
||
" and puts an ID in the copied HTML to connect them."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:468
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "HTML links to saved block data"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:472
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Sent to the system clipboard"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:480
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Saved locally by Notion"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:492
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Read the HTML ID"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:493
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Find the same local ID"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:494
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Restore Notion block data"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:496
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"Illustrative text and ID. The recorded module test restores the block data when IDs "
|
||
"match; a stale entry returns only text and HTML."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:502
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"On paste, Notion looks for the HTML ID and checks it against the saved copy. Matching "
|
||
"IDs restore the block data."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:506
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Clipboard format recorded from web assets cached on July 13, 2026."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:512
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "More examples and sources"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:514
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Another example: Markdown tables"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:515
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"Notion parses Markdown into block data. This example shows how a table becomes header "
|
||
"and data rows."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:520
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "A table through Notion's Markdown parser"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:525
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Markdown input"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:532
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Structured parser output · excerpt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:541
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"Recorded output from an extracted Markdown parser. The table becomes rows and cells."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:548
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Another path: the offline SQLite connection"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>getSqliteMeta</code>
|
||
#: website/public/showcase/notion/index.html:549
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"Notion's renderer requests {ph0} through IPC. The main process creates a message "
|
||
"channel and gives one port to the renderer and the other to a SQLite utility process. "
|
||
"Subsequent statement batches and results travel over that port."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:555
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"Following this handoff explains where the database work runs, and why tracing only the"
|
||
" initial IPC request misses the later conversation."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:562
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Sources and how to read the excerpts"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>app.asar</code>
|
||
#. {ph1}: <code>main/index.js</code>
|
||
#. {ph2}: <code>isNotionWebContents</code>
|
||
#: website/public/showcase/notion/index.html:563
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"The clipboard bridge comes from Notion Desktop 7.6.1's {ph0}: the tab preload and "
|
||
"{ph1}. The excerpts expand minified variable names and omit unrelated code; the "
|
||
"sender-check helper is shown with its underlying {ph2} call."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>747001</code>
|
||
#. {ph1}: <code>58169</code>
|
||
#. {ph2}: <code>736810</code>
|
||
#. {ph3}: <code>422457</code>
|
||
#: website/public/showcase/notion/index.html:571
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"The virtual clipboard and Markdown examples come from web assets cached on July 13, "
|
||
"2026, including modules {ph0}, {ph1}, {ph2} and {ph3}. Those assets have their own "
|
||
"version. Saved probes executed extracted modules and small harnesses; their outputs "
|
||
"describe those probes rather than a captured desktop UI session."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:579
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"The REA result shown here is a focused analysis of the saved tab preload, recorded "
|
||
"with the published REA 4.1.0 package. It locates the API and invoke operation. The "
|
||
"clipboard member and matching receiver are connected by reading their wrapper "
|
||
"implementations in the package."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>422457</code>
|
||
#: website/public/showcase/notion/index.html:586
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"The Markdown example uses parser module {ph0}. Saved module tests show that both page "
|
||
"and chat filters preserve this table. The paste/import, structured Markdown and "
|
||
"AI/chat parsers have separate entry points and intermediate formats."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../guides/javascript/" >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span >
|
||
#. {ph3}: </span >
|
||
#: website/public/showcase/notion/index.html:594
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"{ph0}JavaScript application guide{ph1}{ph2}Follow a small Electron application's "
|
||
"export feature.{ph3}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../dx-ball/">
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span >
|
||
#. {ph3}: </span >
|
||
#: website/public/showcase/notion/index.html:601
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"{ph0}DX-Ball reconstruction{ph1}{ph2}Follow native instructions to a checked C "
|
||
"function.{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:609
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Analyze your own app"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:6
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Notion Electron Reverse Engineering: Clipboard — REA"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:7
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid ""
|
||
"Follow Notion's clipboard API through Electron's preload, IPC wrappers and main "
|
||
"process, with short code excerpts and a look at its rich clipboard format."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:250
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:258
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Notion Electron case study"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:272
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Copy Notion analysis prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:345
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Copy Notion preload excerpt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:374
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Copy Notion invoke wrapper excerpt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:405
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Copy Notion handler wrapper excerpt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:433
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Copy Notion clipboard receiver excerpt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:488
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Restoring rich clipboard data on paste"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/notion/index.html:631
|
||
msgctxt "page:showcase/notion/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:103
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Skip to content"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../">
|
||
#. {ph1}: </a>
|
||
#. {ph2}: <a href="../">
|
||
#. {ph3}: </a>
|
||
#: website/public/showcase/th04/index.html:194
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}Home{ph1} / {ph2}Showcases{ph3} / TH04"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:197
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Case study · Touhou 4: Lotus Land Story"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <br />
|
||
#: website/public/showcase/th04/index.html:198
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Reconstructing TH04's{ph0}bullet patterns."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:199
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"A ring of bullets starts with a short angle calculation. Use REA to inspect the "
|
||
"original DOS function, then follow its instructions into readable C++."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:204
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "PC-98 · 16-bit DOS · C++ and assembly"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:205
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "View the TH04 reconstruction"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:211
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "From original instructions to checked source"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <strong class="flow-node">
|
||
#. {ph3}: </strong >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/showcase/th04/index.html:213
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0}01 · Original game{ph1}{ph2}MAIN.EXE{ph3}{ph4}The PC-98 executable and its "
|
||
"bullet-angle helper.{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <strong class="flow-node">
|
||
#. {ph3}: </strong >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/showcase/th04/index.html:220
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0}02 · Inspect with REA{ph1}{ph2}Instructions + references{ph3}{ph4}Verify the "
|
||
"loaded DOS code and read the angle calculation from the executable.{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <strong class="flow-node">
|
||
#. {ph3}: </strong >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/showcase/th04/index.html:228
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0}03 · Read the C++{ph1}{ph2}Space → aim → rotate{ph3}{ph4}Connect each operation "
|
||
"to the maintained reconstruction.{ph5}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="flow-label">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <strong class="flow-node">
|
||
#. {ph3}: </strong >
|
||
#. {ph4}: <span class="flow-note" >
|
||
#. {ph5}: </span >
|
||
#: website/public/showcase/th04/index.html:235
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0}04 · Check the source{ph1}{ph2}2,139 matching bytes{ph3}{ph4}Recorded compiler "
|
||
"checks cover the bullet-generation code that contains this helper.{ph5}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:244
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"REA returns the original code and its analysis evidence. The TH04 project supplies the"
|
||
" maintained source and compiler checks."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:252
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "In this case study"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#ring">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/th04/index.html:254
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}The bullet ring{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#rea">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/th04/index.html:255
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}What REA returns{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#source">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/th04/index.html:256
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}Assembly to C++{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#checking">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/th04/index.html:257
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}Checking the source{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="#project">
|
||
#. {ph1}: </a>
|
||
#: website/public/showcase/th04/index.html:258
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}The full project{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:263
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "How a ring aims at the player"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:264
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"Elly's attack requests an aimed ring with an initial count of 16. One helper "
|
||
"calculates the direction of each bullet. The same ring can face a fixed direction or "
|
||
"turn toward the player."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="terminal-dots" aria-hidden="true" >
|
||
#. {ph1}: <i>
|
||
#. {ph2}: </i>
|
||
#. {ph3}: <i>
|
||
#. {ph4}: </i>
|
||
#. {ph5}: <i>
|
||
#. {ph6}: </i>
|
||
#. {ph7}: </span >
|
||
#: website/public/showcase/th04/index.html:271
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}{ph1}{ph2}{ph3}{ph4}{ph5}{ph6}{ph7}Your coding agent"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:276
|
||
#: website/public/showcase/th04/index.html:332
|
||
#: website/public/showcase/th04/index.html:509
|
||
#: website/public/showcase/th04/index.html:543
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Copy"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span class="prompt-symbol" aria-hidden="true">
|
||
#. {ph1}: </span >
|
||
#. {ph2}: <span id="th04-prompt" >
|
||
#. {ph3}: </span >
|
||
#. {ph4}: <span class="terminal-cursor" aria-hidden="true">
|
||
#. {ph5}: </span>
|
||
#: website/public/showcase/th04/index.html:285
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0}›{ph1}{ph2}Use REA to find how TH04 creates a ring of bullets and aims it at the "
|
||
"player. Explain the calculation and show the code.{ph3}{ph4}{ph5}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:294
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"An example prompt, with the original executable and reconstruction checkout available "
|
||
"locally."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>0, 16, 32, …, 240</code>
|
||
#: website/public/showcase/th04/index.html:298
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"TH04 stores a full clockwise turn in 256 angle units. For 16 bullets, each index adds "
|
||
"16 units: {ph0}. Adding the player's direction rotates those positions together."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a href="../../assets/figures/th04-bullet-ring.svg" >
|
||
#. {ph1}: </a >
|
||
#: website/public/showcase/th04/index.html:318
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"An illustration of the recovered angle math for count 16, player direction 40 and "
|
||
"template rotation 0. {ph0}Open figure{ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:326
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "The firing template in the recovered source"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:331
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Elly's ring attack · source excerpt"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/boss/elly_phase_ring16.cpp#L26"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#: website/public/showcase/th04/index.html:346
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"These lines select the pattern before difficulty and performance tuning. {ph0}Read the"
|
||
" attack's source{ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:357
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "What REA returns"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>bullet_velocity_and_angle_set()</code>
|
||
#: website/public/showcase/th04/index.html:358
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"We inspect {ph0}, the function that sets each bullet's velocity and angle. REA returns"
|
||
" its instructions, pseudocode and references. Three parts of that result explain the "
|
||
"pattern."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:366
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Check the DOS image before reading its code"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:369
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Agent → REA"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:378
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "REA → agent · selected fields"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:387
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"The check ties the loaded code and relocation records to the supplied executable. The "
|
||
"path above is shortened for display."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:393
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Read the ring's multiply and divide"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>analyze_function</code>
|
||
#: website/public/showcase/th04/index.html:397
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Agent → REA · {ph0}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:403
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "REA → agent · instruction excerpt"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>SI</code>
|
||
#. {ph1}: <code>DS:53AF</code>
|
||
#. {ph2}: <code>bullet_template.count</code>
|
||
#: website/public/showcase/th04/index.html:411
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0} holds the bullet index. The shift multiplies it by 256, then the division uses "
|
||
"the count read from {ph1}. The maintained source names that field {ph2}. The complete "
|
||
"sequence appears below."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:420
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Find where the pattern turns toward the player"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:424
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Same function result · aim excerpt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:433
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Corresponding maintained C++"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:441
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"The instruction operands expose two coordinate differences and a direction helper. Its"
|
||
" return value is added to the relative ring angle. Source names make those addresses "
|
||
"readable; REA lets the agent check the original operations behind them."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:452
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "From assembly to readable C++"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:453
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"Select a step to match the original instructions with the angle calculation. This "
|
||
"summary follows the aimed-ring path; the full source also handles spreads, stacks and "
|
||
"random patterns."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/th04/index.html:464
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}01{ph1} Index"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/th04/index.html:472
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}02{ph1} Space"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/th04/index.html:480
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}03{ph1} Aim"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/th04/index.html:488
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}04{ph1} Rotate"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <span>
|
||
#. {ph1}: </span>
|
||
#: website/public/showcase/th04/index.html:496
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}05{ph1} Store"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:508
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "REA · original 16-bit instructions"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:542
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Readable C++ · aimed-ring summary"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>SI</code>
|
||
#: website/public/showcase/th04/index.html:571
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0}01 · Read the bullet index.{ph1} The stack argument is loaded into {ph2}. In a "
|
||
"16-bullet ring, this member index runs from 0 through 15."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>SHL AX,8</code>
|
||
#. {ph3}: <code>IDIV</code>
|
||
#: website/public/showcase/th04/index.html:576
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0}02 · Space the directions around a full turn.{ph1} {ph2} multiplies by 256. The "
|
||
"count is zero-extended into a word, then {ph3} divides the product by that count. For "
|
||
"count 16, each index advances 16 angle units."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>AX</code>
|
||
#: website/public/showcase/th04/index.html:583
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0}03 · Add the player direction.{ph1} The two subtractions form player-minus-origin"
|
||
" coordinates. The direction helper returns an angle in {ph2}; adding it turns the "
|
||
"whole ring toward the player."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>ADD AL,[0x53ad]</code>
|
||
#: website/public/showcase/th04/index.html:589
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0}04 · Add the pattern's rotation.{ph1} {ph2} adds the template angle. Elly's "
|
||
"initial template sets it to zero; other patterns can use the same helper with a "
|
||
"rotation."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <strong>
|
||
#. {ph1}: </strong>
|
||
#. {ph2}: <code>AL</code>
|
||
#: website/public/showcase/th04/index.html:595
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0}05 · Keep the final angle in one byte.{ph1} The store writes {ph2} to the spawn-"
|
||
"angle field. Values wrap after 255, just as the unsigned-byte cast does. The "
|
||
"surrounding source also converts this angle and speed into velocity."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:604
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"The assembly selects the aimed-ring branch, aim calculation and final store. The C++ "
|
||
"above is a readable summary. Compiler checks below apply to the maintained source in "
|
||
"the linked project."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:610
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Read the maintained ring and aim source"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:613
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Ring macro · TH04 branch, excerpt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:623
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Angle and velocity · source excerpt"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/bullet/add_impl.hpp#L4"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <a
|
||
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/bullet/add.cpp#L422"
|
||
#. >
|
||
#. {ph3}: </a >
|
||
#. {ph4}: <a
|
||
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/bullet/types.hpp#L6"
|
||
#. >
|
||
#. {ph5}: </a >
|
||
#: website/public/showcase/th04/index.html:639
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0}Ring macro{ph1} · {ph2}Aim and velocity source{ph3} · {ph4}Angle "
|
||
"representation{ph5}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:659
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Checking the maintained source"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:660
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"The TH04 project's recorded checks compile the bullet-generation code, including this "
|
||
"helper, with its pinned Turbo C++ 4.0J toolchain."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:667
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "2,139 matching bytes"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:668
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"The compiled bullet-generation code matches a 2,139-byte section of the original "
|
||
"executable."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:674
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Two clean builds"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:675
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"Two separate builds produce the same matching bytes. The recorded input hashes match "
|
||
"the maintained source shown here."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/docs/reconstruction/product/TH04_SEMANTIC_BULLET_GENERATION_V1236.md#validation"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#: website/public/showcase/th04/index.html:681
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Recorded on 3 October 2026. {ph0}Read the compiler checks{ph1}."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:689
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Target identity and analysis scope"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:694
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Original target"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>MAIN.EXE</code>
|
||
#: website/public/showcase/th04/index.html:695
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}, 156,258 bytes, DOS MZ"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:698
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Helper entry"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>0x2cfc8</code>
|
||
#: website/public/showcase/th04/index.html:699
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0} in REA's loaded image"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:702
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Original file offset"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>0x1e7c8</code>
|
||
#. {ph1}: <code>address_to_file_offset</code>
|
||
#: website/public/showcase/th04/index.html:703
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}, returned by {ph1}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:709
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Recorded code inspection"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:710
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "REA 4.1.0 · 7 October 2026"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:715
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"Compiler checks cover the complete bullet-add code section, including this helper. "
|
||
"They also compare its MAP contribution and overlapping relocation."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>0x1000</code>
|
||
#: website/public/showcase/th04/index.html:720
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"REA verified the static DOS load image at load segment {ph0}. Its addresses describe "
|
||
"that analysis image. The function result reports 503 body bytes in two ranges across a"
|
||
" 517-byte span; the selected instructions above lie in those reported ranges."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <code>0d72e980</code>
|
||
#: website/public/showcase/th04/index.html:727
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"The source names and compiler checks come from TH04 checkpoint {ph0}. Earlier "
|
||
"reconstruction observations used the project's own analysis scripts; this page adds a "
|
||
"fresh REA inspection of the same original target. The supplied game's identity is "
|
||
"pinned by its repository manifest, with independent pristine-dump provenance still "
|
||
"open."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:735
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"The figure illustrates the angle calculation. Full-game controls, timing and PC-98 "
|
||
"hardware behavior have separate runtime checks in the reconstruction project."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:744
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "The full TH04 reconstruction"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:745
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"The project builds the game's four DOS products from maintained C++ and assembly. "
|
||
"Beyond bullet generation, the source covers stages, bosses, rendering, input, menus, "
|
||
"endings and score handling."
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a class="text-link" href="https://github.com/N0zoM1z0/th04" >
|
||
#. {ph1}: </a >
|
||
#: website/public/showcase/th04/index.html:751
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "{ph0}Explore the TH04 repository{ph1}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/src/main/bullet/add.cpp#L292"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span >
|
||
#. {ph3}: </span >
|
||
#: website/public/showcase/th04/index.html:757
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0}Bullet-generation source{ph1}{ph2}The complete helper, other pattern types and "
|
||
"template tuning.{ph3}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/docs/DOS_BUILD.md"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span >
|
||
#. {ph3}: </span >
|
||
#: website/public/showcase/th04/index.html:766
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0}DOS build and run guide{ph1}{ph2}Build the source and test it in the project's "
|
||
"PC-98 emulator workflow.{ph3}"
|
||
msgstr ""
|
||
|
||
#. {ph0}: <a
|
||
#. href="https://github.com/N0zoM1z0/th04/blob/0d72e9801a5c14c10384efcbb6734ceccb74ee63/docs/RE_HANDOFF.md"
|
||
#. >
|
||
#. {ph1}: </a >
|
||
#. {ph2}: <span>
|
||
#. {ph3}: </span>
|
||
#: website/public/showcase/th04/index.html:775
|
||
#, python-brace-format
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"{ph0}Current project state{ph1}{ph2}DOS verification and the separate native x64 "
|
||
"port.{ph3}"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:6
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "TH04 Reverse Engineering: DOS Bullet Patterns — REA"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:7
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"Inspect TH04's original 16-bit DOS code with REA. Follow the assembly and recovered "
|
||
"C++ to see how a ring of bullets is spaced and aimed at the player."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:251
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "On this page"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:261
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "TH04 bullet-pattern case study"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:276
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Copy TH04 example prompt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:304
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "TH04 fixed and aimed bullet rings; scroll horizontally on smaller screens"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:310
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid ""
|
||
"Two diagrams of a 16-bullet ring. The fixed ring starts at angle zero. Adding a player"
|
||
" direction of 40 rotates every direction by the same amount; the highlighted first "
|
||
"bullet points toward the player. Both keep a spacing of 16 angle units, or 22.5 "
|
||
"degrees."
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:332
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Copy TH04 firing template"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:459
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Follow the TH04 aimed-ring calculation"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:509
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Copy TH04 assembly excerpt"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:543
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Copy readable aimed-ring calculation"
|
||
msgstr ""
|
||
|
||
#: website/public/showcase/th04/index.html:800
|
||
msgctxt "page:showcase/th04/index.html"
|
||
msgid "Back to top"
|
||
msgstr ""
|
||
|
||
#: scripts/website_i18n.py
|
||
msgctxt "runtime"
|
||
msgid "Translation is being updated. Read this page in English for now."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/aegis-demo.js:22
|
||
#, python-brace-format
|
||
msgctxt "runtime"
|
||
msgid "{start}–{end} seconds"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/aegis-demo.js:29
|
||
#, python-brace-format
|
||
msgctxt "runtime"
|
||
msgid "{seconds} seconds, time block {block}"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/aegis-demo.js:35
|
||
msgctxt "runtime"
|
||
msgid ""
|
||
"Interactive calculation is unavailable in this browser. The example shows the code at "
|
||
"59 seconds."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/aegis-demo.js:62
|
||
msgctxt "runtime"
|
||
msgid "Checking…"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/aegis-demo.js:76
|
||
#, python-brace-format
|
||
msgctxt "runtime"
|
||
msgid "{passed} / {total} checks passed (six reference cases, at six and eight digits)."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/aegis-demo.js:81
|
||
msgctxt "runtime"
|
||
msgid "Could not run the reference checks. Try again."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:77
|
||
#, python-brace-format
|
||
msgctxt "runtime"
|
||
msgid "Distance {distance}"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:87
|
||
msgctxt "runtime"
|
||
msgid "Hit a cactus. Try another speed."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:87
|
||
msgctxt "runtime"
|
||
msgid "Space or Jump ↑"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:97
|
||
msgctxt "runtime"
|
||
msgid "Play again"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:97 website/public/assets/dino-demo.js:111
|
||
msgctxt "runtime"
|
||
msgid "Play"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:112
|
||
msgctxt "runtime"
|
||
msgid "Press Play, then jump over the cactus."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:147
|
||
msgctxt "runtime"
|
||
msgid "Hit a cactus. Press Play again, or change the speed and restart."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:171
|
||
msgctxt "runtime"
|
||
msgid "Pause"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:172
|
||
msgctxt "runtime"
|
||
msgid "Running. Space or Jump clears a cactus."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:183 website/public/assets/dino-demo.js:219
|
||
#: website/public/assets/dino-demo.js:224
|
||
msgctxt "runtime"
|
||
msgid "Paused. Press Play to continue."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:203
|
||
#, python-brace-format
|
||
msgctxt "runtime"
|
||
msgid "Fixed speed: {speed}. Space or Jump clears a cactus."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:206
|
||
#, python-brace-format
|
||
msgctxt "runtime"
|
||
msgid "Fixed speed: {speed}. Press Play to try it."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:215
|
||
msgctxt "runtime"
|
||
msgid "Recovered rule: start at 6, then increase toward 13."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:216
|
||
#, python-brace-format
|
||
msgctxt "runtime"
|
||
msgid "Fixed speed: {speed}."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:249
|
||
msgctxt "runtime"
|
||
msgid ""
|
||
"Replayed the recovered rule. All four values match the controlled original-game check "
|
||
"when rounded to three decimals."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/dino-demo.js:252
|
||
msgctxt "runtime"
|
||
msgid ""
|
||
"The replay differs from the recorded original-game values. Compare the speed rule and "
|
||
"settings above."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/home.js:29
|
||
msgctxt "runtime"
|
||
msgid "Press % to see what happens to 10."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/home.js:32
|
||
msgctxt "runtime"
|
||
msgid "10% of 200 is 20. Press = to add it."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/home.js:33
|
||
msgctxt "runtime"
|
||
msgid "For multiplication, 10 becomes 0.1. Press = to multiply."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/main.js:21
|
||
msgctxt "runtime"
|
||
msgid "Copied"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/main.js:23
|
||
msgctxt "runtime"
|
||
msgid "Code copied to clipboard."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/main.js:32
|
||
msgctxt "runtime"
|
||
msgid "Selected"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/main.js:34
|
||
msgctxt "runtime"
|
||
msgid "Code selected. Use your keyboard to copy it."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/main.js:148
|
||
#, python-brace-format
|
||
msgctxt "runtime"
|
||
msgid "REA on GitHub ({count})"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/theme.js:52
|
||
msgctxt "runtime"
|
||
msgid "Switch to light mode"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/theme.js:53
|
||
msgctxt "runtime"
|
||
msgid "Switch to dark mode"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/analyst-thinking.svg:2
|
||
msgctxt "figure:analyst-thinking.svg"
|
||
msgid "An analyst thinking at a computer"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/ctf-mask-equation.svg:2
|
||
#: website/public/assets/figures/ctf-mask-equation.svg:24
|
||
msgctxt "figure:ctf-mask-equation.svg"
|
||
msgid "One check reveals one character"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/ctf-mask-equation.svg:3
|
||
msgctxt "figure:ctf-mask-equation.svg"
|
||
msgid ""
|
||
"The seventh mask selects only position 21 in the six by six input grid. Its character "
|
||
"code must equal 55, so the character is 7. The other masks select different positions "
|
||
"and give further equations."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/ctf-mask-equation.svg:25
|
||
msgctxt "figure:ctf-mask-equation.svg"
|
||
msgid "The seventh check. Cell labels are input positions, starting at 0."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/ctf-mask-equation.svg:27
|
||
msgctxt "figure:ctf-mask-equation.svg"
|
||
msgid "Encoded mask: −21, +1, −14, 0"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/ctf-mask-equation.svg:28
|
||
msgctxt "figure:ctf-mask-equation.svg"
|
||
msgid "Skip 21 cells. Select 1. Skip 14. Stop at 0."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/ctf-mask-equation.svg:32
|
||
msgctxt "figure:ctf-mask-equation.svg"
|
||
msgid "Only one cell contributes to this sum"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/ctf-mask-equation.svg:35
|
||
msgctxt "figure:ctf-mask-equation.svg"
|
||
msgid "Position 21 in the flag must contain 7."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/ctf-mask-equation.svg:37
|
||
msgctxt "figure:ctf-mask-equation.svg"
|
||
msgid "Selected: one cell"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/ctf-mask-equation.svg:38
|
||
msgctxt "figure:ctf-mask-equation.svg"
|
||
msgid "26 masks give 26 equations."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/ctf-mask-equation.svg:39
|
||
msgctxt "figure:ctf-mask-equation.svg"
|
||
msgid "Solve them together to find the flag."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:2
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:20
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid "DX-Ball sound-pan investigation"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:3
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid ""
|
||
"REA provides the instruction, caller and byte-read evidence for one DX-Ball function. "
|
||
"A stack input is multiplied by 1.5625, offset by 500, scaled, and converted to an "
|
||
"integer. Maintained C is checked in 3,205 original-x86 cases and a separate 63-byte "
|
||
"compiler replay."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:39
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid "Stack"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:40
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid "input x"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:44
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid "Integer"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:45
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid "return"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:46
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid "Reconstructed function"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:47
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid "Maintained C"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:48
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid "Brick-hit caller"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:49
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid "20 + 30 × tile_x"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:50
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid "Original code"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:51
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:54
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid "comparison"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:52
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid "3,205 cases"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:53
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid "VC4.0 build"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/dx-ball-sound-pan-investigation.svg:55
|
||
msgctxt "figure:dx-ball-sound-pan-investigation.svg"
|
||
msgid "63 matching bytes"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:2
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:22
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "REA investigation flow"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:3
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid ""
|
||
"Ask a question about a local target. REA inspects and traces through local analysis "
|
||
"adapters, returns evidence, and supports follow-up questions as your agent explains, "
|
||
"implements and tests."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:31
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "1. Ask"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:32
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "Your agent + local target"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:33
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "App / binary / browser"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:34
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "2. Inspect & trace"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:36
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "CLI / MCP"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:37
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "3. Read the evidence"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:38
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "Code / references /"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:39
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "unknowns"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:40
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "4. Use what you learn"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:41
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "Your agent"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:42
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "Explain / implement / test"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:43
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "Analysis tools"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:44
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "Local analysis adapters"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/rea-investigation-flow.svg:45
|
||
msgctxt "figure:rea-investigation-flow.svg"
|
||
msgid "Follow-up question"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/th04-bullet-ring.svg:2
|
||
msgctxt "figure:th04-bullet-ring.svg"
|
||
msgid "TH04: spacing and aiming a ring of bullets"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/th04-bullet-ring.svg:3
|
||
msgctxt "figure:th04-bullet-ring.svg"
|
||
msgid ""
|
||
"A full clockwise turn has 256 angle units. Sixteen bullets start at angles zero, "
|
||
"sixteen, thirty-two, through 240. Adding an example player direction of forty turns "
|
||
"all sixteen directions together; the first bullet points at the player. Template "
|
||
"rotation is zero."
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/th04-bullet-ring.svg:24
|
||
msgctxt "figure:th04-bullet-ring.svg"
|
||
msgid "Fixed ring"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/th04-bullet-ring.svg:25
|
||
msgctxt "figure:th04-bullet-ring.svg"
|
||
msgid "First bullet: angle 0"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/th04-bullet-ring.svg:26
|
||
msgctxt "figure:th04-bullet-ring.svg"
|
||
msgid "Aimed ring"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/th04-bullet-ring.svg:27
|
||
msgctxt "figure:th04-bullet-ring.svg"
|
||
msgid "First bullet: player direction"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/th04-bullet-ring.svg:64
|
||
#: website/public/assets/figures/th04-bullet-ring.svg:102
|
||
msgctxt "figure:th04-bullet-ring.svg"
|
||
msgid "Origin"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/th04-bullet-ring.svg:105
|
||
msgctxt "figure:th04-bullet-ring.svg"
|
||
msgid "Player"
|
||
msgstr ""
|
||
|
||
#: website/public/assets/figures/th04-bullet-ring.svg:110
|
||
msgctxt "figure:th04-bullet-ring.svg"
|
||
msgid "Same spacing: 256 ÷ 16 = 16 angle units = 22.5°"
|
||
msgstr ""
|