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 файлов.
28 lines
1.4 KiB
Plaintext
28 lines
1.4 KiB
Plaintext
rsxprofile 1
|
|
build 9ad8c4aac5d835fc 9ad8c4aac5d835fc38f68d0648ffd67c809f8342e88b9636ee36205f8f96bf35 3759 7695 59020857 1792011090
|
|
loader ilxq super special.Main
|
|
patch.a2 wsygzaib joml.fastmath
|
|
patch.a6 pvdafug snooper pC
|
|
class net.minecraft.client.Minecraft wwk
|
|
field net.minecraft.client.Minecraft player zb Lwpqgx;
|
|
field net.minecraft.client.Minecraft world ta Lwwhgz;
|
|
field net.minecraft.client.Minecraft currentScreen S Lbsh;
|
|
field net.minecraft.client.Minecraft timer Zb Lmlyn;
|
|
field net.minecraft.client.Minecraft instance WA Lwwk;
|
|
field net.minecraft.client.Minecraft renderGlobal jC Ldqtrv;
|
|
field net.minecraft.client.Minecraft gameSettings y Ldmoadr;
|
|
field net.minecraft.client.Minecraft playerController fa Ltdsh;
|
|
method net.minecraft.client.Minecraft getMinecraft super ()Lwwk;
|
|
method net.minecraft.client.Minecraft displayGuiScreen super (Lbsh;)V
|
|
class net.minecraft.client.entity.EntityPlayerSP wpqgx
|
|
class net.minecraft.entity.player.EntityPlayer obzsyig
|
|
class net.minecraft.world.World oisywi
|
|
class net.minecraft.client.multiplayer.WorldClient wwhgz
|
|
class net.minecraft.entity.Entity ddvqd
|
|
class net.minecraft.entity.EntityLivingBase bgtojhxo
|
|
class net.minecraft.network.PacketBuffer dcuglw
|
|
class net.minecraft.client.multiplayer.PlayerControllerMP tdsh
|
|
class net.minecraft.client.gui.GuiScreen bsh
|
|
class net.minecraft.client.settings.GameSettings qoa
|
|
override.server catch
|