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 файлов.
18 lines
974 B
Markdown
18 lines
974 B
Markdown
# Authors
|
||
|
||
* **SashegDev** — автор и мейнтейнер (`gdsasheg@gmail.com`)
|
||
|
||
## Third-party components
|
||
|
||
* **ASM** (`third_party/asm`) — BSD 3-Clause, <https://asm.ow2.io/license.html>.
|
||
Вендорится, чтобы патчер запускался без Gradle и без сети.
|
||
* **org.json** — используется внутри `updater.jar` вендора, в наш код не входит.
|
||
|
||
## What this project is not
|
||
|
||
RustexRemake, KJST Launcher и его апдейтер — сторонние продукты. Здесь нет ни
|
||
их кода, ни их файлов, кроме готовых патчей, которые инструмент применяет на
|
||
машине пользователя. Правки лаунчера и апдейтера обратимы: оригиналы
|
||
сохраняются как `app.jar.orig` и `updater.exe.orig`, а `uninstall.cmd`
|
||
возвращает всё на место.
|