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 файлов.
974 B
974 B
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
возвращает всё на место.