prrevers 1.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. prrevers-1.1.0/.gitignore +127 -0
  2. prrevers-1.1.0/LICENSE +21 -0
  3. prrevers-1.1.0/PKG-INFO +220 -0
  4. prrevers-1.1.0/README.md +150 -0
  5. prrevers-1.1.0/docs/ETHICS.en.md +77 -0
  6. prrevers-1.1.0/docs/ETHICS.ru.md +60 -0
  7. prrevers-1.1.0/docs/ROADMAP-V2.ru.md +564 -0
  8. prrevers-1.1.0/docs/ROADMAP.en.md +584 -0
  9. prrevers-1.1.0/docs/ROADMAP.ru.md +656 -0
  10. prrevers-1.1.0/docs/analysis/rea-comparison.ru.md +269 -0
  11. prrevers-1.1.0/docs/architecture.en.md +443 -0
  12. prrevers-1.1.0/docs/architecture.ru.md +345 -0
  13. prrevers-1.1.0/docs/cases/web-gold-rush.md +264 -0
  14. prrevers-1.1.0/docs/changelog.md +28 -0
  15. prrevers-1.1.0/docs/errors.md +106 -0
  16. prrevers-1.1.0/docs/external-tools.en.md +232 -0
  17. prrevers-1.1.0/docs/external-tools.ru.md +244 -0
  18. prrevers-1.1.0/docs/index.md +57 -0
  19. prrevers-1.1.0/docs/verification/2026-11-01-gold-rush-v1.0.0/receipt.json +243 -0
  20. prrevers-1.1.0/docs/verification/2026-11-01-gold-rush-v1.0.0/report.md +98 -0
  21. prrevers-1.1.0/docs/verification/2026-11-01-v1.1.0/receipt.json +243 -0
  22. prrevers-1.1.0/docs/verification/2026-11-01-v1.1.0/report.md +98 -0
  23. prrevers-1.1.0/pyproject.toml +301 -0
  24. prrevers-1.1.0/scripts/README.md +6 -0
  25. prrevers-1.1.0/src/prrevers/__init__.py +118 -0
  26. prrevers-1.1.0/src/prrevers/adapters/__init__.py +302 -0
  27. prrevers-1.1.0/src/prrevers/adapters/custom.py +177 -0
  28. prrevers-1.1.0/src/prrevers/adapters/gamemaker.py +57 -0
  29. prrevers-1.1.0/src/prrevers/adapters/godot.py +46 -0
  30. prrevers-1.1.0/src/prrevers/adapters/unity.py +172 -0
  31. prrevers-1.1.0/src/prrevers/adapters/unreal.py +44 -0
  32. prrevers-1.1.0/src/prrevers/adapters/web.py +123 -0
  33. prrevers-1.1.0/src/prrevers/analyzers/__init__.py +92 -0
  34. prrevers-1.1.0/src/prrevers/analyzers/citations.py +150 -0
  35. prrevers-1.1.0/src/prrevers/analyzers/llm.py +262 -0
  36. prrevers-1.1.0/src/prrevers/analyzers/prompts/__init__.py +122 -0
  37. prrevers-1.1.0/src/prrevers/analyzers/prompts/analyze_system_v1.txt +29 -0
  38. prrevers-1.1.0/src/prrevers/analyzers/prompts/analyze_system_v2.txt +29 -0
  39. prrevers-1.1.0/src/prrevers/analyzers/prompts/analyze_user_v1.txt +13 -0
  40. prrevers-1.1.0/src/prrevers/analyzers/prompts/analyze_user_v2.txt +18 -0
  41. prrevers-1.1.0/src/prrevers/analyzers/prompts/trace_system_v1.txt +35 -0
  42. prrevers-1.1.0/src/prrevers/analyzers/prompts/trace_user_v1.txt +19 -0
  43. prrevers-1.1.0/src/prrevers/cache.py +191 -0
  44. prrevers-1.1.0/src/prrevers/citation.py +174 -0
  45. prrevers-1.1.0/src/prrevers/cli.py +979 -0
  46. prrevers-1.1.0/src/prrevers/compare.py +334 -0
  47. prrevers-1.1.0/src/prrevers/constants.py +200 -0
  48. prrevers-1.1.0/src/prrevers/detectors/__init__.py +74 -0
  49. prrevers-1.1.0/src/prrevers/detectors/container.py +294 -0
  50. prrevers-1.1.0/src/prrevers/detectors/engine.py +44 -0
  51. prrevers-1.1.0/src/prrevers/detectors/platform.py +49 -0
  52. prrevers-1.1.0/src/prrevers/dynamic/__init__.py +79 -0
  53. prrevers-1.1.0/src/prrevers/dynamic/doc.py +261 -0
  54. prrevers-1.1.0/src/prrevers/dynamic/hooks.py +511 -0
  55. prrevers-1.1.0/src/prrevers/dynamic/runner.py +335 -0
  56. prrevers-1.1.0/src/prrevers/dynamic/trace.py +238 -0
  57. prrevers-1.1.0/src/prrevers/errors.py +147 -0
  58. prrevers-1.1.0/src/prrevers/extractors/__init__.py +155 -0
  59. prrevers-1.1.0/src/prrevers/extractors/apk.py +57 -0
  60. prrevers-1.1.0/src/prrevers/extractors/asar.py +463 -0
  61. prrevers-1.1.0/src/prrevers/extractors/assets.py +389 -0
  62. prrevers-1.1.0/src/prrevers/extractors/base.py +168 -0
  63. prrevers-1.1.0/src/prrevers/extractors/ghidra.py +363 -0
  64. prrevers-1.1.0/src/prrevers/extractors/il2cpp.py +180 -0
  65. prrevers-1.1.0/src/prrevers/extractors/ilspy.py +103 -0
  66. prrevers-1.1.0/src/prrevers/extractors/mono.py +111 -0
  67. prrevers-1.1.0/src/prrevers/extractors/unreal.py +365 -0
  68. prrevers-1.1.0/src/prrevers/extractors/zip.py +249 -0
  69. prrevers-1.1.0/src/prrevers/ghidra_scripts/PrReversDecompileExport.py +185 -0
  70. prrevers-1.1.0/src/prrevers/llm.py +1146 -0
  71. prrevers-1.1.0/src/prrevers/mcp_server.py +107 -0
  72. prrevers-1.1.0/src/prrevers/mcp_tools.py +397 -0
  73. prrevers-1.1.0/src/prrevers/models.py +321 -0
  74. prrevers-1.1.0/src/prrevers/oracles/__init__.py +70 -0
  75. prrevers-1.1.0/src/prrevers/oracles/asset.py +230 -0
  76. prrevers-1.1.0/src/prrevers/oracles/base.py +93 -0
  77. prrevers-1.1.0/src/prrevers/oracles/binfmt.py +174 -0
  78. prrevers-1.1.0/src/prrevers/oracles/bytematch.py +182 -0
  79. prrevers-1.1.0/src/prrevers/oracles/citation.py +179 -0
  80. prrevers-1.1.0/src/prrevers/oracles/comparison.py +291 -0
  81. prrevers-1.1.0/src/prrevers/oracles/cs_check.py +71 -0
  82. prrevers-1.1.0/src/prrevers/oracles/detection.py +109 -0
  83. prrevers-1.1.0/src/prrevers/oracles/extraction.py +101 -0
  84. prrevers-1.1.0/src/prrevers/oracles/level.py +439 -0
  85. prrevers-1.1.0/src/prrevers/oracles/manifest.py +133 -0
  86. prrevers-1.1.0/src/prrevers/oracles/roundtrip.py +313 -0
  87. prrevers-1.1.0/src/prrevers/oracles/trace.py +187 -0
  88. prrevers-1.1.0/src/prrevers/oracles/tscn.py +146 -0
  89. prrevers-1.1.0/src/prrevers/pipeline.py +778 -0
  90. prrevers-1.1.0/src/prrevers/repl.py +271 -0
  91. prrevers-1.1.0/src/prrevers/session.py +243 -0
  92. prrevers-1.1.0/src/prrevers/synthesizers/__init__.py +78 -0
  93. prrevers-1.1.0/src/prrevers/synthesizers/base.py +64 -0
  94. prrevers-1.1.0/src/prrevers/synthesizers/csharp.py +231 -0
  95. prrevers-1.1.0/src/prrevers/synthesizers/design_doc.py +84 -0
  96. prrevers-1.1.0/src/prrevers/synthesizers/gdscript.py +200 -0
  97. prrevers-1.1.0/src/prrevers/synthesizers/levels.py +792 -0
  98. prrevers-1.1.0/src/prrevers/synthesizers/shaders.py +355 -0
  99. prrevers-1.1.0/src/prrevers/synthesizers/textutil.py +28 -0
  100. prrevers-1.1.0/src/prrevers/tools.py +423 -0
  101. prrevers-1.1.0/src/prrevers/utils/__init__.py +8 -0
  102. prrevers-1.1.0/src/prrevers/utils/logging.py +19 -0
  103. prrevers-1.1.0/src/prrevers/utils/paths.py +55 -0
  104. prrevers-1.1.0/tests/__init__.py +1 -0
  105. prrevers-1.1.0/tests/golden/README.md +55 -0
  106. prrevers-1.1.0/tests/golden/unity-il2cpp-apk/README.md +32 -0
  107. prrevers-1.1.0/tests/golden/unity-il2cpp-apk/expected.json +15 -0
  108. prrevers-1.1.0/tests/golden/unity-il2cpp-apk/input/game.apk +0 -0
  109. prrevers-1.1.0/tests/golden/unity-il2cpp-apk/provenance.json +25 -0
  110. prrevers-1.1.0/tests/golden/unity-mono-win/README.md +30 -0
  111. prrevers-1.1.0/tests/golden/unity-mono-win/expected.json +14 -0
  112. prrevers-1.1.0/tests/golden/unity-mono-win/input/Game.exe +0 -0
  113. prrevers-1.1.0/tests/golden/unity-mono-win/input/Game_Data/Managed/Assembly-CSharp.dll +0 -0
  114. prrevers-1.1.0/tests/golden/unity-mono-win/input/Game_Data/Managed/UnityEngine.CoreModule.dll +0 -0
  115. prrevers-1.1.0/tests/golden/unity-mono-win/provenance.json +33 -0
  116. prrevers-1.1.0/tests/golden/web-electron/README.md +34 -0
  117. prrevers-1.1.0/tests/golden/web-electron/expected.json +15 -0
  118. prrevers-1.1.0/tests/golden/web-electron/input/app.asar +0 -0
  119. prrevers-1.1.0/tests/golden/web-electron/input/app.asar.unpacked/native/game.node +0 -0
  120. prrevers-1.1.0/tests/golden/web-electron/provenance.json +29 -0
  121. prrevers-1.1.0/tests/golden/web-electron-install/README.md +29 -0
  122. prrevers-1.1.0/tests/golden/web-electron-install/expected.json +14 -0
  123. prrevers-1.1.0/tests/golden/web-electron-install/input/Game.exe +0 -0
  124. prrevers-1.1.0/tests/golden/web-electron-install/input/resources/app.asar +0 -0
  125. prrevers-1.1.0/tests/golden/web-electron-install/input/resources/app.asar.unpacked/native/game.node +0 -0
  126. prrevers-1.1.0/tests/golden/web-electron-install/provenance.json +33 -0
  127. prrevers-1.1.0/tests/golden/web-gold-rush/README.md +45 -0
  128. prrevers-1.1.0/tests/golden/web-gold-rush/expected.json +15 -0
  129. prrevers-1.1.0/tests/golden/web-gold-rush/input/GoldRush.asar +0 -0
  130. prrevers-1.1.0/tests/golden/web-gold-rush/provenance.json +25 -0
  131. prrevers-1.1.0/tests/unit/__init__.py +1 -0
  132. prrevers-1.1.0/tests/unit/native_fixtures.py +233 -0
  133. prrevers-1.1.0/tests/unit/test_adapters.py +456 -0
  134. prrevers-1.1.0/tests/unit/test_analyzers.py +207 -0
  135. prrevers-1.1.0/tests/unit/test_assets.py +712 -0
  136. prrevers-1.1.0/tests/unit/test_cache.py +130 -0
  137. prrevers-1.1.0/tests/unit/test_citation.py +144 -0
  138. prrevers-1.1.0/tests/unit/test_citation_extraction.py +148 -0
  139. prrevers-1.1.0/tests/unit/test_citation_oracle.py +169 -0
  140. prrevers-1.1.0/tests/unit/test_cli.py +618 -0
  141. prrevers-1.1.0/tests/unit/test_compare.py +525 -0
  142. prrevers-1.1.0/tests/unit/test_csharp_synth.py +276 -0
  143. prrevers-1.1.0/tests/unit/test_detectors.py +341 -0
  144. prrevers-1.1.0/tests/unit/test_dynamic_doc.py +284 -0
  145. prrevers-1.1.0/tests/unit/test_dynamic_hooks.py +372 -0
  146. prrevers-1.1.0/tests/unit/test_dynamic_runner.py +486 -0
  147. prrevers-1.1.0/tests/unit/test_errors.py +142 -0
  148. prrevers-1.1.0/tests/unit/test_extractors.py +1738 -0
  149. prrevers-1.1.0/tests/unit/test_gdscript_synth.py +258 -0
  150. prrevers-1.1.0/tests/unit/test_golden.py +207 -0
  151. prrevers-1.1.0/tests/unit/test_levels.py +779 -0
  152. prrevers-1.1.0/tests/unit/test_llm.py +1550 -0
  153. prrevers-1.1.0/tests/unit/test_mcp.py +449 -0
  154. prrevers-1.1.0/tests/unit/test_models.py +60 -0
  155. prrevers-1.1.0/tests/unit/test_oracles.py +741 -0
  156. prrevers-1.1.0/tests/unit/test_pipeline.py +1064 -0
  157. prrevers-1.1.0/tests/unit/test_prompts.py +142 -0
  158. prrevers-1.1.0/tests/unit/test_public_api.py +228 -0
  159. prrevers-1.1.0/tests/unit/test_repl.py +237 -0
  160. prrevers-1.1.0/tests/unit/test_session.py +159 -0
  161. prrevers-1.1.0/tests/unit/test_shaders.py +265 -0
  162. prrevers-1.1.0/tests/unit/test_synthesizers.py +90 -0
  163. prrevers-1.1.0/tests/unit/test_tools.py +602 -0
  164. prrevers-1.1.0/tests/unit/test_trace_oracle.py +176 -0
  165. prrevers-1.1.0/tests/unit/test_unreal.py +512 -0
  166. prrevers-1.1.0/tests/unit/test_utils.py +37 -0
@@ -0,0 +1,127 @@
1
+ # --- Python ---
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ share/python-wheels/
20
+ *.egg-info/
21
+ .installed.cfg
22
+ *.egg
23
+ MANIFEST
24
+
25
+ # --- Virtualenvs ---
26
+ .venv/
27
+ venv/
28
+ env/
29
+ ENV/
30
+ .python-version
31
+
32
+ # --- Testing & coverage ---
33
+ .pytest_cache/
34
+ .coverage
35
+ .coverage.*
36
+ htmlcov/
37
+ .tox/
38
+ .nox/
39
+ coverage.xml
40
+ *.cover
41
+ .cache
42
+ nosetests.xml
43
+
44
+ # --- Type checkers ---
45
+ .mypy_cache/
46
+ .ruff_cache/
47
+ .pyre/
48
+ .pytype/
49
+
50
+ # --- IDEs ---
51
+ .vscode/
52
+ .idea/
53
+ *.swp
54
+ *.swo
55
+ *~
56
+ .DS_Store
57
+ Thumbs.db
58
+
59
+ # --- Jupyter ---
60
+ .ipynb_checkpoints
61
+ *.ipynb
62
+
63
+ # --- Project-specific: never commit game data ---
64
+ tests/golden/**/*.apk
65
+ tests/golden/**/*.exe
66
+ tests/golden/**/*.dll
67
+ tests/golden/**/*.so
68
+ tests/golden/**/*.bin
69
+ tests/golden/**/*.obb
70
+ tests/golden/**/*.pak
71
+ tests/golden/**/*.pck
72
+ tests/golden/**/*.ipa
73
+ tests/golden/**/extracted/
74
+
75
+ # But DO commit small synthetic fixtures
76
+ !tests/golden/**/fixture.zip
77
+ !tests/golden/**/*.json
78
+ !tests/golden/**/*.ksy
79
+ !tests/golden/**/README.md
80
+
81
+ # Синтетические PE-файлы golden-фикстур e2e-тестов: 62-байтные MZ-заглушки
82
+ # и сборки из нулей — НЕ game data. Каждая строка явная и точная, чтобы
83
+ # случайно закоммитить настоящий .exe/.dll было невозможно.
84
+ !tests/golden/unity-mono-win/input/Game.exe
85
+ !tests/golden/unity-mono-win/input/Game_Data/Managed/Assembly-CSharp.dll
86
+ !tests/golden/unity-mono-win/input/Game_Data/Managed/UnityEngine.CoreModule.dll
87
+ !tests/golden/web-electron-install/input/Game.exe
88
+ # Синтетический IL2CPP APK (~1 КБ, 4 записи-заглушки из нулей) — НЕ game
89
+ # data; см. tests/golden/unity-il2cpp-apk/README.md.
90
+ !tests/golden/unity-il2cpp-apk/input/game.apk
91
+
92
+ # --- Secrets & tokens — never commit ---
93
+ .env
94
+ .env.*
95
+ *.pem
96
+ *.key
97
+ secrets/
98
+ credentials.json
99
+ token.json
100
+
101
+ # --- Output of extraction runs ---
102
+ output/
103
+ extracted/
104
+ exports/
105
+ work/
106
+ tmp/
107
+ *.tmp
108
+
109
+ # Рабочий каталог CLI/MCP по умолчанию (cli.py, mcp_server.py):
110
+ # любое «prrevers …» сыплет туда распакованные ассеты — в коммит
111
+ # этому месту нечего попадать, поэтому игнорируется весь каталог.
112
+ prrevers-out/
113
+
114
+ # --- OS ---
115
+ .DS_Store
116
+ Thumbs.db
117
+
118
+ # --- Logs ---
119
+ *.log
120
+ logs/
121
+
122
+ # uv.lock не хранится в репозитории (решение 686b44e):
123
+ # зависимости фиксирует CI через pip + pyproject constraints.
124
+ uv.lock
125
+
126
+ # Сборка документационного сайта (mkdocs build) — артефакт, не исходник.
127
+ site/
prrevers-1.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Pradushkoai
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,220 @@
1
+ Metadata-Version: 2.5
2
+ Name: prrevers
3
+ Version: 1.1.0
4
+ Summary: AI-assisted reverse engineering toolkit for game developers — Windows & Android.
5
+ Project-URL: Homepage, https://github.com/Pradushkoai/PRRevers
6
+ Project-URL: Repository, https://github.com/Pradushkoai/PRRevers
7
+ Project-URL: Issues, https://github.com/Pradushkoai/PRRevers/issues
8
+ Project-URL: Changelog, https://github.com/Pradushkoai/PRRevers/releases
9
+ Author: Pradushkoai
10
+ License: MIT License
11
+
12
+ Copyright (c) 2026 Pradushkoai
13
+
14
+ Permission is hereby granted, free of charge, to any person obtaining a copy
15
+ of this software and associated documentation files (the "Software"), to deal
16
+ in the Software without restriction, including without limitation the rights
17
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
18
+ copies of the Software, and to permit persons to whom the Software is
19
+ furnished to do so, subject to the following conditions:
20
+
21
+ The above copyright notice and this permission notice shall be included in all
22
+ copies or substantial portions of the Software.
23
+
24
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
+ SOFTWARE.
31
+ License-File: LICENSE
32
+ Keywords: android,decompilation,games,godot,llm,mcp,reverse-engineering,unity,unreal,windows
33
+ Classifier: Development Status :: 4 - Beta
34
+ Classifier: Intended Audience :: Developers
35
+ Classifier: Intended Audience :: Science/Research
36
+ Classifier: License :: OSI Approved :: MIT License
37
+ Classifier: Operating System :: OS Independent
38
+ Classifier: Programming Language :: Python :: 3
39
+ Classifier: Programming Language :: Python :: 3 :: Only
40
+ Classifier: Programming Language :: Python :: 3.10
41
+ Classifier: Programming Language :: Python :: 3.11
42
+ Classifier: Programming Language :: Python :: 3.12
43
+ Classifier: Programming Language :: Python :: 3.13
44
+ Classifier: Topic :: Games/Entertainment
45
+ Classifier: Topic :: Security
46
+ Classifier: Topic :: Software Development :: Disassemblers
47
+ Requires-Python: >=3.10
48
+ Requires-Dist: click>=8.1
49
+ Requires-Dist: platformdirs>=4.0
50
+ Requires-Dist: pydantic>=2.6
51
+ Requires-Dist: rich>=13.7
52
+ Provides-Extra: assets
53
+ Requires-Dist: unitypy>=1.20; extra == 'assets'
54
+ Provides-Extra: dev
55
+ Requires-Dist: build>=1.2; extra == 'dev'
56
+ Requires-Dist: mypy>=1.10; extra == 'dev'
57
+ Requires-Dist: pre-commit>=3.7; extra == 'dev'
58
+ Requires-Dist: pytest-cov>=4.1; extra == 'dev'
59
+ Requires-Dist: pytest>=8.0; extra == 'dev'
60
+ Requires-Dist: ruff~=0.6.9; extra == 'dev'
61
+ Requires-Dist: types-click; extra == 'dev'
62
+ Provides-Extra: docs
63
+ Requires-Dist: mkdocs-material>=9.5; extra == 'docs'
64
+ Requires-Dist: mkdocs>=1.6; extra == 'docs'
65
+ Provides-Extra: frida
66
+ Requires-Dist: frida>=16.0.0; extra == 'frida'
67
+ Provides-Extra: mcp
68
+ Requires-Dist: mcp>=1.2; extra == 'mcp'
69
+ Description-Content-Type: text/markdown
70
+
71
+ # PRRevers
72
+
73
+ > AI-ассистированный тулз для **гейм-девов**: извлекает механики, ассеты и форматы данных из Windows и Android игр, чтобы учиться у них и вдохновляться на собственные проекты.
74
+
75
+ [![CI](https://github.com/Pradushkoai/PRRevers/actions/workflows/ci.yml/badge.svg)](https://github.com/Pradushkoai/PRRevers/actions/workflows/ci.yml)
76
+ [![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
77
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
78
+ [![Code style: ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://docs.astral.sh/ruff/)
79
+
80
+ PRRevers — **не** декомпилятор, **не** дизассемблер и **не** замена тулзам вроде Ghidra, IDA, AssetRipper или Il2CppDumper. Это **оркестратор**: он связывает эти тулзы вместе, определяет движок, извлекает код/ассеты/данные и использует LLM-агента, чтобы объяснить механики и сгенерировать дизайн-доки, пригодные для использования в вашей собственной игре.
81
+
82
+ > **Этика и легальность.** PRRevers предназначен **исключительно для исследований и обучения**. Анализируйте только те игры, которыми вы законно владеете или на которые у вас есть явное разрешение на реверс-инжиниринг. Не распространяйте извлечённый код или ассеты. Прочитайте [docs/ETHICS.ru.md](docs/ETHICS.ru.md) перед использованием.
83
+
84
+ > **English version:** [README.en.md](README.en.md)
85
+
86
+ ---
87
+
88
+ ## Режимы работы
89
+
90
+ PRRevers предоставляет шесть CLI-режимов, каждый как отдельная подкоманду:
91
+
92
+ | Команда | Что делает | Когда использовать |
93
+ |---|---|---|
94
+ | `prrevers inspect <file>` | Разовый прогон: детект движка → экстракция → декомпиляция → анализ → дизайн-док | Быстрый обзор одной игры |
95
+ | `prrevers session <file>` | Интерактивный REPL: детект + экстракция один раз, дальше задаёте вопросы | Глубокое изучение игры |
96
+ | `prrevers compare <a> <b>` | Side-by-side сравнение двух игр: таблица механик, diff дизайн-доков, отчёт `compare/<a>-vs-<b>.md` | Выбор между стратегиями реализации |
97
+ | `prrevers trace <file>` | Динамика: аттач к запущенной игре (Frida), хуки из статики, трейс → дизайн-док | Наблюдение механик в рантайме |
98
+ | `prrevers mcp serve` | MCP-сервер: инструменты PRRevers для Claude Code / Cursor | LLM-агент вместо CLI |
99
+ | `prrevers catalog <dir>` | Batch-детект движка для каждого файла в директории, таблица | Кураторская библиотека референсов |
100
+
101
+ Утилиты: `prrevers tools install/list` (установка внешних тулзов в user data dir и статус), `prrevers version`.
102
+
103
+ Полное описание — в [docs/architecture.ru.md § Режимы работы](docs/architecture.ru.md).
104
+
105
+ ## Зачем это нужно?
106
+
107
+ Реверс-инжиниринг игры, чтобы у неё поучиться — это мультитулзовая, многодневная рутина:
108
+
109
+ 1. Определить движок (Unity Mono / IL2CPP / Unreal / Godot / кастомный).
110
+ 2. Распаковать контейнер (APK / PAK / PCK / OBB).
111
+ 3. Запустить правильный экстрактор под правильный формат.
112
+ 4. Открыть результат в Ghidra / dnSpy / UModel.
113
+ 5. Смотреть на тысячи классов и функций, чтобы найти одну механику, которая вас интересует.
114
+
115
+ PRRevers автоматизирует шаги 1–3 и добавляет LLM-агента поверх 4–5, который может отвечать на вопросы вроде *«как работает инвентарь в этой игре?»* и генерировать дизайн-док.
116
+
117
+ ## Архитектура
118
+
119
+ Пайплайн состоит из 4 этапов плюс слой оракулов, который независимо проверяет каждый этап:
120
+
121
+ ```
122
+ [файл] → Детекторы → Экстракторы → Анализаторы (LLM) → Синтезаторы → [ваш проект]
123
+ ↑
124
+ Оракулы (проверяют каждый этап)
125
+ ```
126
+
127
+ Ключевые архитектурные решения:
128
+
129
+ - **Плагин-система движков** через протокол `EngineAdapter` + `entry_points`. Добавить новый движок теперь можно без правки ядра.
130
+ - **Типизированная модель `Citation`** вместо `list[str]` в evidence — верифицируется `CitationOracle`.
131
+ - **Протокол `LLMBackend`** — любой класс, реализующий протокол, можно подключить.
132
+ - **Content-addressed кэш** — повторный запуск на том же входе почти мгновенный.
133
+ - **Сессии** — интерактивный REPL с сохраняемой историей Q&A.
134
+ - **Stage-level оракулы** — `DetectionOracle` (согласованность вердикта), `ExtractionOracle` (заявленные файлы против реальной ФС) и `RoundTripOracle` (побайтовая сверка с оригинальным архивом + SHA256-integrity) проверяют этапы сразу после выполнения.
135
+ - **Pure-Python экстракторы** — stdlib `zipfile`/`shutil`/`json`+`struct` покрывают ZIP-контейнеры, Unity-layout и Electron `app.asar` без установки apktool; первая обёртка над внешним тулзом — ILSpy (`prrevers tools install ilspy`) — превращает Mono-сборки в читаемый C#.
136
+
137
+ Полное обоснование архитектуры: [docs/architecture.ru.md](docs/architecture.ru.md).
138
+
139
+ ## Документация
140
+
141
+ Документационный сайт (mkdocs-material): архитектура, роадмап, внешние
142
+ тулзы, этика, кейсы — с навигацией и поиском.
143
+
144
+ ```bash
145
+ uv sync --extra docs # или: pip install -e ".[docs]"
146
+ mkdocs serve # localhost:8000
147
+ mkdocs build --strict # проверка: битые ссылки ломают сборку (и CI)
148
+ ```
149
+
150
+ CI собирает сайт в strict-режиме на каждый push.
151
+
152
+ ## Статус
153
+
154
+ `main` — закрыты v0.1.0 (Unity Mono + web-игры end-to-end), v0.2.0 (IL2CPP: Il2CppDumper + Ghidra headless), v0.3.0 (LLM-анализатор: Ollama / OpenAI / Anthropic / GigaChat / LiteLLM, цитаты `file:line`), v0.4.0 (REPL-сессии + MCP-сервер), v0.5.0 (Unity-ассеты: AssetRipper → UnityPy fallback + манифест + `AssetRoundTripOracle`), v0.6.0 (синтез для game-dev: clean-room скелеты Unity C# / Godot GDScript + переводчик шейдеров HLSL→GLSL→AGSL + импортёр уровней (схема v1 → `.tscn` / C#, `LevelRoundTripOracle`)), v0.7.0 (Unreal и нативные движки: `UnrealPakExtractor` + `UModelExtractor` + `GhidraNativeExtractor` для кастомных C++ движков + фингерпринтинг кастомных движков — Ren'Py/Cocos2d-x/MonoGame/LÖVE/RGSS/Clickteam → нативная Ghidra-дорога), v0.8.0 (динамический анализ: `prrevers trace` — аттач к живому процессу через Frida (опциональный extras `[frida]`), хуки по адресам из собственной статики (дамп Il2CppDumper / Ghidra-манифест), подсистемы inventory/combat/save_load, JSONL-трейс + `TraceOracle` + trace-to-doc дизайн-док из событий `[ts Метод]`; без живой игры — честный отказ, трейсы не выдумываются). Экстракция без внешних тулзов: **ZIP-контейнеры** (APK / OBB / raw ZIP), **Windows-установки Unity** (Mono / IL2CPP layout), **Electron `app.asar`**; декомпиляция `Assembly-CSharp.dll` → C# через ILSpy (`prrevers tools install ilspy`; без тулза — честный warning, не тихая деградация); распаковка Unreal `.pak` — тулзом из установки движка (`$UNREAL_PAK`), экспорт ассетов — UModel (gildor.org, вручную). Детекция движков реальная (Unity Mono/IL2CPP, Unreal, Godot, GameMaker, Web — Cordova/Capacitor/Electron, известные кастомные — фингерпринтингом строковых маркеров). Анализ — реален при подключённом LLM-бэкенде; синтез — дизайн-доки + clean-room скелеты под целевой движок (Unity C# / Godot GDScript, `--target-engine`) + переводы шейдеров + импорт уровней, v0.9.0 (compare mode: две игры через один пайплайн — сравнительная таблица механик, diff дизайн-доков по секциям, `ComparisonOracle`), v1.0.0 (стабильный API: заморожены top-level экспорты, CLI-команды и имена MCP-инструментов; цикл депрекации; PyPI-релиз-инженерия — `pip install prrevers` после проставленного владельцем тега; документационный сайт mkdocs; первый опубликованный end-to-end кейс «Gold Rush» — своя Electron-игра, [docs/cases/web-gold-rush.md](docs/cases/web-gold-rush.md)). См. [docs/ROADMAP.ru.md](docs/ROADMAP.ru.md) и [CHANGELOG.md](CHANGELOG.md).
155
+
156
+ ## Установка
157
+
158
+ ```bash
159
+ # из PyPI (начиная с v1.0.0)
160
+ pip install prrevers
161
+
162
+ # опциональные возможности — extras (см. ниже)
163
+ pip install "prrevers[mcp]" # MCP-сервер для Claude Code / Cursor
164
+ pip install "prrevers[assets]" # pure-Python fallback Unity-ассетов
165
+ pip install "prrevers[frida]" # динамический анализ (живой процесс игры)
166
+
167
+ # из репозитория (разработка)
168
+ git clone https://github.com/Pradushkoai/PRRevers.git
169
+ cd PRRevers
170
+ pip install -e ".[dev]"
171
+ pre-commit install
172
+
173
+ # опционально: pure-Python fallback экстракции Unity-ассетов
174
+ # (AssetRipper остаётся внешним тулзом — см. таблицу ниже)
175
+ pip install -e ".[assets]"
176
+
177
+ # опционально: динамический анализ (v0.8.0) — аттач к живой игре
178
+ # через Frida: локально Windows/macOS/Linux или Android по USB
179
+ pip install -e ".[frida]"
180
+ ```
181
+
182
+ Внешние тулзы, которые оркестрирует PRRevers (см. [docs/external-tools.ru.md](docs/external-tools.ru.md); `prrevers tools install <name>` ставит их в user data dir автоматически):
183
+
184
+ | Тулз | Назначение | Требуется для |
185
+ | --- | --- | --- |
186
+ | `ILSpy` (ilspycmd) | Декомпиляция .NET / Unity Mono в C# | Unity Mono-игры (`prrevers tools install ilspy`) |
187
+ | `apktool` | Распаковка APK | Android-игры (смелали/ресурсы) |
188
+ | `Il2CppDumper` | Дамп метадаты Unity IL2CPP | Unity IL2CPP-игры |
189
+ | `AssetRipper` | Экспорт Unity-ассетов | Unity-ассеты |
190
+ | `Ghidra` (headless) | Анализ нативного кода | Кастомные движки / IL2CPP |
191
+ | `jadx` | DEX → Java | не-Unity Android-игры |
192
+
193
+ ## Быстрый старт
194
+
195
+ ```bash
196
+ prrevers inspect path/to/game.apk
197
+ prrevers inspect path/to/game.exe --engine auto
198
+ prrevers session path/to/game.apk --name mygame
199
+ prrevers catalog /path/to/games/folder
200
+
201
+ # опционально: C# из Assembly-CSharp.dll (нужен .NET SDK)
202
+ prrevers tools install ilspy
203
+
204
+ # динамический анализ (v0.8.0): игра должна быть ЗАПУЩЕНА
205
+ pip install -e ".[frida]"
206
+ prrevers trace path/to/game.apk --list-processes # найти pid/name игры
207
+ prrevers trace path/to/game.apk --pid 4242 --duration 120 \
208
+ --subsystem inventory --subsystem combat
209
+ # → трейс prrevers-out/traces/*.jsonl + дизайн-док
210
+ # prrevers-out/synthesized/*-trace.md (с LLM — анализ механик по событиям,
211
+ # без LLM — честный stub из таблицы частот)
212
+ ```
213
+
214
+ ## Контрибьюшн
215
+
216
+ Контрибьюшны приветствуются. Сначала прочитайте [CONTRIBUTING.md](CONTRIBUTING.md). Участвуя, вы соглашаетесь следовать [Code of Conduct](CODE_OF_CONDUCT.md).
217
+
218
+ ## Лицензия
219
+
220
+ [MIT](LICENSE) © Pradushkoai
@@ -0,0 +1,150 @@
1
+ # PRRevers
2
+
3
+ > AI-ассистированный тулз для **гейм-девов**: извлекает механики, ассеты и форматы данных из Windows и Android игр, чтобы учиться у них и вдохновляться на собственные проекты.
4
+
5
+ [![CI](https://github.com/Pradushkoai/PRRevers/actions/workflows/ci.yml/badge.svg)](https://github.com/Pradushkoai/PRRevers/actions/workflows/ci.yml)
6
+ [![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](https://www.python.org/downloads/)
7
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
8
+ [![Code style: ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://docs.astral.sh/ruff/)
9
+
10
+ PRRevers — **не** декомпилятор, **не** дизассемблер и **не** замена тулзам вроде Ghidra, IDA, AssetRipper или Il2CppDumper. Это **оркестратор**: он связывает эти тулзы вместе, определяет движок, извлекает код/ассеты/данные и использует LLM-агента, чтобы объяснить механики и сгенерировать дизайн-доки, пригодные для использования в вашей собственной игре.
11
+
12
+ > **Этика и легальность.** PRRevers предназначен **исключительно для исследований и обучения**. Анализируйте только те игры, которыми вы законно владеете или на которые у вас есть явное разрешение на реверс-инжиниринг. Не распространяйте извлечённый код или ассеты. Прочитайте [docs/ETHICS.ru.md](docs/ETHICS.ru.md) перед использованием.
13
+
14
+ > **English version:** [README.en.md](README.en.md)
15
+
16
+ ---
17
+
18
+ ## Режимы работы
19
+
20
+ PRRevers предоставляет шесть CLI-режимов, каждый как отдельная подкоманду:
21
+
22
+ | Команда | Что делает | Когда использовать |
23
+ |---|---|---|
24
+ | `prrevers inspect <file>` | Разовый прогон: детект движка → экстракция → декомпиляция → анализ → дизайн-док | Быстрый обзор одной игры |
25
+ | `prrevers session <file>` | Интерактивный REPL: детект + экстракция один раз, дальше задаёте вопросы | Глубокое изучение игры |
26
+ | `prrevers compare <a> <b>` | Side-by-side сравнение двух игр: таблица механик, diff дизайн-доков, отчёт `compare/<a>-vs-<b>.md` | Выбор между стратегиями реализации |
27
+ | `prrevers trace <file>` | Динамика: аттач к запущенной игре (Frida), хуки из статики, трейс → дизайн-док | Наблюдение механик в рантайме |
28
+ | `prrevers mcp serve` | MCP-сервер: инструменты PRRevers для Claude Code / Cursor | LLM-агент вместо CLI |
29
+ | `prrevers catalog <dir>` | Batch-детект движка для каждого файла в директории, таблица | Кураторская библиотека референсов |
30
+
31
+ Утилиты: `prrevers tools install/list` (установка внешних тулзов в user data dir и статус), `prrevers version`.
32
+
33
+ Полное описание — в [docs/architecture.ru.md § Режимы работы](docs/architecture.ru.md).
34
+
35
+ ## Зачем это нужно?
36
+
37
+ Реверс-инжиниринг игры, чтобы у неё поучиться — это мультитулзовая, многодневная рутина:
38
+
39
+ 1. Определить движок (Unity Mono / IL2CPP / Unreal / Godot / кастомный).
40
+ 2. Распаковать контейнер (APK / PAK / PCK / OBB).
41
+ 3. Запустить правильный экстрактор под правильный формат.
42
+ 4. Открыть результат в Ghidra / dnSpy / UModel.
43
+ 5. Смотреть на тысячи классов и функций, чтобы найти одну механику, которая вас интересует.
44
+
45
+ PRRevers автоматизирует шаги 1–3 и добавляет LLM-агента поверх 4–5, который может отвечать на вопросы вроде *«как работает инвентарь в этой игре?»* и генерировать дизайн-док.
46
+
47
+ ## Архитектура
48
+
49
+ Пайплайн состоит из 4 этапов плюс слой оракулов, который независимо проверяет каждый этап:
50
+
51
+ ```
52
+ [файл] → Детекторы → Экстракторы → Анализаторы (LLM) → Синтезаторы → [ваш проект]
53
+ ↑
54
+ Оракулы (проверяют каждый этап)
55
+ ```
56
+
57
+ Ключевые архитектурные решения:
58
+
59
+ - **Плагин-система движков** через протокол `EngineAdapter` + `entry_points`. Добавить новый движок теперь можно без правки ядра.
60
+ - **Типизированная модель `Citation`** вместо `list[str]` в evidence — верифицируется `CitationOracle`.
61
+ - **Протокол `LLMBackend`** — любой класс, реализующий протокол, можно подключить.
62
+ - **Content-addressed кэш** — повторный запуск на том же входе почти мгновенный.
63
+ - **Сессии** — интерактивный REPL с сохраняемой историей Q&A.
64
+ - **Stage-level оракулы** — `DetectionOracle` (согласованность вердикта), `ExtractionOracle` (заявленные файлы против реальной ФС) и `RoundTripOracle` (побайтовая сверка с оригинальным архивом + SHA256-integrity) проверяют этапы сразу после выполнения.
65
+ - **Pure-Python экстракторы** — stdlib `zipfile`/`shutil`/`json`+`struct` покрывают ZIP-контейнеры, Unity-layout и Electron `app.asar` без установки apktool; первая обёртка над внешним тулзом — ILSpy (`prrevers tools install ilspy`) — превращает Mono-сборки в читаемый C#.
66
+
67
+ Полное обоснование архитектуры: [docs/architecture.ru.md](docs/architecture.ru.md).
68
+
69
+ ## Документация
70
+
71
+ Документационный сайт (mkdocs-material): архитектура, роадмап, внешние
72
+ тулзы, этика, кейсы — с навигацией и поиском.
73
+
74
+ ```bash
75
+ uv sync --extra docs # или: pip install -e ".[docs]"
76
+ mkdocs serve # localhost:8000
77
+ mkdocs build --strict # проверка: битые ссылки ломают сборку (и CI)
78
+ ```
79
+
80
+ CI собирает сайт в strict-режиме на каждый push.
81
+
82
+ ## Статус
83
+
84
+ `main` — закрыты v0.1.0 (Unity Mono + web-игры end-to-end), v0.2.0 (IL2CPP: Il2CppDumper + Ghidra headless), v0.3.0 (LLM-анализатор: Ollama / OpenAI / Anthropic / GigaChat / LiteLLM, цитаты `file:line`), v0.4.0 (REPL-сессии + MCP-сервер), v0.5.0 (Unity-ассеты: AssetRipper → UnityPy fallback + манифест + `AssetRoundTripOracle`), v0.6.0 (синтез для game-dev: clean-room скелеты Unity C# / Godot GDScript + переводчик шейдеров HLSL→GLSL→AGSL + импортёр уровней (схема v1 → `.tscn` / C#, `LevelRoundTripOracle`)), v0.7.0 (Unreal и нативные движки: `UnrealPakExtractor` + `UModelExtractor` + `GhidraNativeExtractor` для кастомных C++ движков + фингерпринтинг кастомных движков — Ren'Py/Cocos2d-x/MonoGame/LÖVE/RGSS/Clickteam → нативная Ghidra-дорога), v0.8.0 (динамический анализ: `prrevers trace` — аттач к живому процессу через Frida (опциональный extras `[frida]`), хуки по адресам из собственной статики (дамп Il2CppDumper / Ghidra-манифест), подсистемы inventory/combat/save_load, JSONL-трейс + `TraceOracle` + trace-to-doc дизайн-док из событий `[ts Метод]`; без живой игры — честный отказ, трейсы не выдумываются). Экстракция без внешних тулзов: **ZIP-контейнеры** (APK / OBB / raw ZIP), **Windows-установки Unity** (Mono / IL2CPP layout), **Electron `app.asar`**; декомпиляция `Assembly-CSharp.dll` → C# через ILSpy (`prrevers tools install ilspy`; без тулза — честный warning, не тихая деградация); распаковка Unreal `.pak` — тулзом из установки движка (`$UNREAL_PAK`), экспорт ассетов — UModel (gildor.org, вручную). Детекция движков реальная (Unity Mono/IL2CPP, Unreal, Godot, GameMaker, Web — Cordova/Capacitor/Electron, известные кастомные — фингерпринтингом строковых маркеров). Анализ — реален при подключённом LLM-бэкенде; синтез — дизайн-доки + clean-room скелеты под целевой движок (Unity C# / Godot GDScript, `--target-engine`) + переводы шейдеров + импорт уровней, v0.9.0 (compare mode: две игры через один пайплайн — сравнительная таблица механик, diff дизайн-доков по секциям, `ComparisonOracle`), v1.0.0 (стабильный API: заморожены top-level экспорты, CLI-команды и имена MCP-инструментов; цикл депрекации; PyPI-релиз-инженерия — `pip install prrevers` после проставленного владельцем тега; документационный сайт mkdocs; первый опубликованный end-to-end кейс «Gold Rush» — своя Electron-игра, [docs/cases/web-gold-rush.md](docs/cases/web-gold-rush.md)). См. [docs/ROADMAP.ru.md](docs/ROADMAP.ru.md) и [CHANGELOG.md](CHANGELOG.md).
85
+
86
+ ## Установка
87
+
88
+ ```bash
89
+ # из PyPI (начиная с v1.0.0)
90
+ pip install prrevers
91
+
92
+ # опциональные возможности — extras (см. ниже)
93
+ pip install "prrevers[mcp]" # MCP-сервер для Claude Code / Cursor
94
+ pip install "prrevers[assets]" # pure-Python fallback Unity-ассетов
95
+ pip install "prrevers[frida]" # динамический анализ (живой процесс игры)
96
+
97
+ # из репозитория (разработка)
98
+ git clone https://github.com/Pradushkoai/PRRevers.git
99
+ cd PRRevers
100
+ pip install -e ".[dev]"
101
+ pre-commit install
102
+
103
+ # опционально: pure-Python fallback экстракции Unity-ассетов
104
+ # (AssetRipper остаётся внешним тулзом — см. таблицу ниже)
105
+ pip install -e ".[assets]"
106
+
107
+ # опционально: динамический анализ (v0.8.0) — аттач к живой игре
108
+ # через Frida: локально Windows/macOS/Linux или Android по USB
109
+ pip install -e ".[frida]"
110
+ ```
111
+
112
+ Внешние тулзы, которые оркестрирует PRRevers (см. [docs/external-tools.ru.md](docs/external-tools.ru.md); `prrevers tools install <name>` ставит их в user data dir автоматически):
113
+
114
+ | Тулз | Назначение | Требуется для |
115
+ | --- | --- | --- |
116
+ | `ILSpy` (ilspycmd) | Декомпиляция .NET / Unity Mono в C# | Unity Mono-игры (`prrevers tools install ilspy`) |
117
+ | `apktool` | Распаковка APK | Android-игры (смелали/ресурсы) |
118
+ | `Il2CppDumper` | Дамп метадаты Unity IL2CPP | Unity IL2CPP-игры |
119
+ | `AssetRipper` | Экспорт Unity-ассетов | Unity-ассеты |
120
+ | `Ghidra` (headless) | Анализ нативного кода | Кастомные движки / IL2CPP |
121
+ | `jadx` | DEX → Java | не-Unity Android-игры |
122
+
123
+ ## Быстрый старт
124
+
125
+ ```bash
126
+ prrevers inspect path/to/game.apk
127
+ prrevers inspect path/to/game.exe --engine auto
128
+ prrevers session path/to/game.apk --name mygame
129
+ prrevers catalog /path/to/games/folder
130
+
131
+ # опционально: C# из Assembly-CSharp.dll (нужен .NET SDK)
132
+ prrevers tools install ilspy
133
+
134
+ # динамический анализ (v0.8.0): игра должна быть ЗАПУЩЕНА
135
+ pip install -e ".[frida]"
136
+ prrevers trace path/to/game.apk --list-processes # найти pid/name игры
137
+ prrevers trace path/to/game.apk --pid 4242 --duration 120 \
138
+ --subsystem inventory --subsystem combat
139
+ # → трейс prrevers-out/traces/*.jsonl + дизайн-док
140
+ # prrevers-out/synthesized/*-trace.md (с LLM — анализ механик по событиям,
141
+ # без LLM — честный stub из таблицы частот)
142
+ ```
143
+
144
+ ## Контрибьюшн
145
+
146
+ Контрибьюшны приветствуются. Сначала прочитайте [CONTRIBUTING.md](CONTRIBUTING.md). Участвуя, вы соглашаетесь следовать [Code of Conduct](CODE_OF_CONDUCT.md).
147
+
148
+ ## Лицензия
149
+
150
+ [MIT](LICENSE) © Pradushkoai
@@ -0,0 +1,77 @@
1
+ # Ethics & responsible use
2
+
3
+ PRRevers is a research tool. Using it correctly is your responsibility.
4
+ This page exists to make that responsibility explicit.
5
+
6
+ ## What this tool is for
7
+
8
+ - **Learning** how other games implement mechanics you admire.
9
+ - **Documenting** software you own when no documentation is available.
10
+ - **Interoperability** — reading save files, level formats, or mod formats
11
+ so you can build tools around games you love.
12
+ - **Security research** on software you have authorization to test.
13
+
14
+ ## What this tool is not for
15
+
16
+ - Pirating, cracking, or bypassing DRM / copy protection.
17
+ - Redistributing code, assets, audio, or text extracted from games you
18
+ do not have the rights to.
19
+ - Cheating in online games or gaining competitive advantages.
20
+ - Analyzing software you do not own or do not have permission to study.
21
+
22
+ ## The clean-room rule
23
+
24
+ PRRevers's synthesizers produce **original code** that implements the
25
+ same behavior as the analyzed game's mechanic. They do not copy
26
+ decompiled code verbatim. This is the same principle that lets
27
+ clean-room reimplementations of BIOSes, file formats, and protocols
28
+ exist legally.
29
+
30
+ What this means in practice:
31
+
32
+ 1. **Read** the analysis output (a design doc), not the decompiled code.
33
+ 2. **Implement** the mechanic in your own style, in your own codebase.
34
+ 3. **Cite** the inspiration where appropriate, just like you would cite
35
+ a paper.
36
+
37
+ If you find yourself copy-pasting decompiled code into your game, stop.
38
+ That is not what PRRevers is for.
39
+
40
+ ## Jurisdiction
41
+
42
+ The legality of reverse engineering varies by country:
43
+
44
+ - **United States** — DMCA §1201 prohibits circumventing technological
45
+ protection measures, even for interoperability. Reverse engineering
46
+ for interoperability is generally allowed under §1201(f), but
47
+ distribution of tools that enable circumvention is restricted.
48
+ - **European Union** — Software Directive 91/250/EEC (now
49
+ Directive 2009/24/EC) explicitly permits reverse engineering for
50
+ interoperability. But circumventing DRM is restricted.
51
+ - **Russia** — Civil Code Article 1280 permits reverse engineering for
52
+ interoperability, with conditions.
53
+ - **Other jurisdictions** — check local law. PRRevers's authors are not
54
+ lawyers and this document is not legal advice.
55
+
56
+ When in doubt, consult a lawyer. The fact that PRRevers *can* analyze a
57
+ file does not mean it *should*.
58
+
59
+ ## Reporting misuse
60
+
61
+ If you become aware of PRRevers being used to redistribute copyrighted
62
+ assets, crack DRM, or otherwise violate the project's intent, please
63
+ report it via a GitHub issue (for non-sensitive reports) or to the
64
+ maintainer's email listed in `SECURITY.md`.
65
+
66
+ The maintainers reserve the right to:
67
+
68
+ - Close issues / PRs that demonstrate or facilitate misuse.
69
+ - Remove examples from the documentation that reference specific
70
+ commercial games by name.
71
+ - Decline contributions whose primary purpose is circumvention.
72
+
73
+ ## Summary
74
+
75
+ > **If you don't own it or don't have permission, don't reverse it.**
76
+ > **If you reverse it, don't redistribute what you find.**
77
+ > **If you learn from it, write your own code.**