9f43d35f44
Вендорный updater.exe перекачивает app.jar, и патч лаунчера после этого стирался. Теперь патчится и сам апдейтер: в его payload (jar, пришитый к PE-заглушке Launch4j после offset 65024) вставляются два хука. - UpdaterGui.runLauncher -> beforeLauncher: перепатчить app.jar перед стартом лаунчера, если апдейтер достал его из своего кэша. - DownloadEngine.findFilesToDownload -> filterUpdates: убрать app.jar из скачивания, но только если хеш манифеста равен baseSha256 из .rsx-patched. Другой хеш означает настоящее обновление, и файл качается как обычно. Хук сделан обёрткой вокруг findFilesToDownload, а не правкой call site: у invokespecial получатель лежит под аргументами, и замена вызова ломала стек. Ещё лаунчер при старте чинит свой updater.exe (jb -> l качает "updater.exe"), из-за чего хук жил ровно один запуск. Этот путь закрыт третьим guard. Ещё: - .rsx-patched теперь пишет сам патчер: baseSha256 нужен фильтру, чтобы отличать наш патч от настоящего обновления. - patchupdater идемпотентен и берёт pristine-копию из updater.exe.orig. - Перед записью payload проверяется загрузкой классов. - Установщик патчит апдейтер, а uninstall откатывает и его. - Маркер и log больше не прибиты к %APPDATA%\kjstudio: папки выводятся из расположения апдейтера. Проверено на живой установке два запуска подряд: хук выживает, app.jar остаётся пропатченным, updater качает 0 файлов.
27 lines
374 B
Plaintext
27 lines
374 B
Plaintext
# Build output
|
|
build/
|
|
dist/
|
|
.gradle/
|
|
*.class
|
|
|
|
# IDE
|
|
.idea/
|
|
*.iml
|
|
.vscode/
|
|
.settings/
|
|
.classpath
|
|
.project
|
|
|
|
# OS
|
|
Thumbs.db
|
|
desktop.ini
|
|
|
|
# Python
|
|
__pycache__/
|
|
*.pyc
|
|
|
|
# profiles/latest.rsxp IS tracked: it is the mapping for the current vendor
|
|
# build, and without it mods cannot load. Regenerate it with prepare-build.cmd
|
|
# when the game updates.
|
|
hs_err_pid*.log
|
|
replay_pid*.log |