419b2d0a6b
Хук в отрисовку компаса. Выбор не случайный: виджет рисуется только пока виден HUD-сло�� игры, поэтому панель бесплатно наследует и видимость, и масштаб, и состояние горячей клавиши, которая HUD прячет. Дублировать логику клавиш не пришлось. Бридж зашивает ASM и регистрирует ClassFileTransformer, который дописывает вызов rsx.HudHook.render перед возвратом метода. Профиль диктует цель, обфусцированных имён в коде нет. Трансформер отдаёт контекст как Object: так один дескриптор работает при любом переименовании класса контекста. Привязка к API отрисовки трёхуровневая, и каждая ступень умеет отвалиться отдельно: точное совпадение по дескриптору, затем по имени и числу аргументов (класс текстуры грузится позже, чем привязка), затем по runtime-классу билдера, который мы держим в руках. Не нашлось - пишем в лог один раз и гасим только эту возможность. Текст рисуется ванильной текстурой textures/font/ascii.png: у игры нет однострочного текстового API, а для цифр и меток атласа хватает. Своим TTF конвейером мы не занимались. Стенд учит подделки: батч, билдер, команду, реестр текстур, масштаб, синглтон экрана и виджет-компас. Проверяет, что панель рисует плашку и глифы с верными координатами и что замолкает, когда игра прячет HUD. С отключённым хуком падают пять проверок из двадцати пяти. Профиль: hook.hud, экран HUD, батч, реестр текстур, масштаб и сетевые методы NetHandlerPlayClient. У каждой строки - рецепт поиска после реобфускации.
233 lines
4.6 KiB
JSON
233 lines
4.6 KiB
JSON
{
|
|
"schema": 1,
|
|
"classes": {
|
|
"net.minecraft.client.Minecraft": {
|
|
"obf": "wwk",
|
|
"fields": {
|
|
"player": {
|
|
"obf": "zb",
|
|
"desc": "Lwpqgx;",
|
|
"kind": "f",
|
|
"srg": "field_71439_g"
|
|
},
|
|
"world": {
|
|
"obf": "ta",
|
|
"desc": "Lwwhgz;",
|
|
"kind": "f",
|
|
"srg": "field_71441_e"
|
|
},
|
|
"currentScreen": {
|
|
"obf": "S",
|
|
"desc": "Lbsh;",
|
|
"kind": "f",
|
|
"srg": "field_71462_r"
|
|
},
|
|
"timer": {
|
|
"obf": "Zb",
|
|
"desc": "Lmlyn;",
|
|
"kind": "f",
|
|
"srg": "field_71428_T"
|
|
},
|
|
"instance": {
|
|
"obf": "WA",
|
|
"desc": "Lwwk;",
|
|
"kind": "f",
|
|
"srg": "field_71432_P"
|
|
},
|
|
"renderGlobal": {
|
|
"obf": "jC",
|
|
"desc": "Ldqtrv;",
|
|
"kind": "f",
|
|
"srg": "field_71438_f"
|
|
},
|
|
"gameSettings": {
|
|
"obf": "y",
|
|
"desc": "Ldmoadr;",
|
|
"kind": "f",
|
|
"srg": "field_71474_y"
|
|
},
|
|
"playerController": {
|
|
"obf": "fa",
|
|
"desc": "Ltdsh;",
|
|
"kind": "f",
|
|
"srg": "field_71442_b"
|
|
}
|
|
},
|
|
"methods": {
|
|
"getMinecraft": {
|
|
"obf": "super",
|
|
"desc": "()Lwwk;",
|
|
"kind": "m",
|
|
"srg": "func_71410_x"
|
|
},
|
|
"displayGuiScreen": {
|
|
"obf": "super",
|
|
"desc": "(Lbsh;)V",
|
|
"kind": "m",
|
|
"srg": "func_147108_a"
|
|
}
|
|
}
|
|
},
|
|
"net.minecraft.client.entity.EntityPlayerSP": {
|
|
"obf": "wpqgx"
|
|
},
|
|
"net.minecraft.entity.player.EntityPlayer": {
|
|
"obf": "obzsyig"
|
|
},
|
|
"net.minecraft.world.World": {
|
|
"obf": "oisywi",
|
|
"fields": {
|
|
"isRemote": {
|
|
"obf": "byte",
|
|
"desc": "Z",
|
|
"kind": "f",
|
|
"srg": "field_72995_K"
|
|
}
|
|
},
|
|
"methods": {
|
|
"getWorldTime": {
|
|
"obf": "super",
|
|
"desc": "()J",
|
|
"kind": "m",
|
|
"srg": "func_72820_D"
|
|
},
|
|
"getWorldInfo": {
|
|
"obf": "super",
|
|
"desc": "()Lcilc;",
|
|
"kind": "m",
|
|
"srg": "func_72912_H"
|
|
}
|
|
}
|
|
},
|
|
"net.minecraft.client.multiplayer.WorldClient": {
|
|
"obf": "wwhgz"
|
|
},
|
|
"net.minecraft.entity.Entity": {
|
|
"obf": "ddvqd",
|
|
"fields": {
|
|
"posX": {
|
|
"obf": "g",
|
|
"desc": "D",
|
|
"kind": "f",
|
|
"srg": "field_70165_t"
|
|
},
|
|
"posY": {
|
|
"obf": "F",
|
|
"desc": "D",
|
|
"kind": "f",
|
|
"srg": "field_70163_u"
|
|
},
|
|
"posZ": {
|
|
"obf": "a",
|
|
"desc": "D",
|
|
"kind": "f",
|
|
"srg": "field_70161_v"
|
|
},
|
|
"isDead": {
|
|
"obf": "e",
|
|
"desc": "Z",
|
|
"kind": "f",
|
|
"srg": "field_70128_L"
|
|
}
|
|
},
|
|
"methods": {
|
|
"getName": {
|
|
"obf": "super",
|
|
"desc": "()Ljava/lang/String;",
|
|
"kind": "m",
|
|
"srg": "func_70005_c_"
|
|
},
|
|
"getEntityId": {
|
|
"obf": "for",
|
|
"desc": "()I",
|
|
"kind": "m",
|
|
"srg": "func_145782_y"
|
|
},
|
|
"isEntityAlive": {
|
|
"obf": "switch",
|
|
"desc": "()Z",
|
|
"kind": "m",
|
|
"srg": "func_70089_S"
|
|
}
|
|
}
|
|
},
|
|
"net.minecraft.entity.EntityLivingBase": {
|
|
"obf": "bgtojhxo",
|
|
"methods": {
|
|
"getHealth": {
|
|
"obf": "byte",
|
|
"desc": "()F",
|
|
"kind": "m",
|
|
"srg": "func_110143_aJ"
|
|
},
|
|
"getMaxHealth": {
|
|
"obf": "if",
|
|
"desc": "()F",
|
|
"kind": "m",
|
|
"srg": "func_110138_aP"
|
|
}
|
|
}
|
|
},
|
|
"net.minecraft.network.PacketBuffer": {
|
|
"obf": "dcuglw"
|
|
},
|
|
"net.minecraft.client.network.NetHandlerPlayClient": {
|
|
"obf": "cxaddrz",
|
|
"methods": {
|
|
"handleKeepAlive": {
|
|
"obf": "super",
|
|
"desc": "(Lysfj;)V",
|
|
"kind": "m",
|
|
"srg": "func_147272_a"
|
|
},
|
|
"sendPacket": {
|
|
"obf": "super",
|
|
"desc": "(Lffoox;)V",
|
|
"kind": "m",
|
|
"srg": "func_147297_a"
|
|
}
|
|
}
|
|
},
|
|
"net.minecraft.client.multiplayer.PlayerControllerMP": {
|
|
"obf": "tdsh"
|
|
},
|
|
"net.minecraft.client.gui.GuiScreen": {
|
|
"obf": "bsh"
|
|
},
|
|
"net.minecraft.client.settings.GameSettings": {
|
|
"obf": "qoa"
|
|
}
|
|
},
|
|
"bridge": {
|
|
"loader": {
|
|
"obf": "ilxq",
|
|
"loadMethod": "super",
|
|
"entry": "special.Main"
|
|
},
|
|
"patches": {
|
|
"a2": {
|
|
"class": "wsygzaib",
|
|
"property": "joml.fastmath"
|
|
},
|
|
"a6": {
|
|
"class": "pvdafug",
|
|
"clientField": "snooper",
|
|
"obf": "pC",
|
|
"clientFieldObf": "pC"
|
|
}
|
|
}
|
|
},
|
|
"missing": [
|
|
"net.minecraft.client.Minecraft#snooper",
|
|
"net.minecraft.network.NetworkManager"
|
|
],
|
|
"build": {
|
|
"id": "9ad8c4aac5d835fc",
|
|
"gameJarSha256": "9ad8c4aac5d835fc38f68d0648ffd67c809f8342e88b9636ee36205f8f96bf35",
|
|
"jarSize": 59020857,
|
|
"jarMtime": 1792011090,
|
|
"classes": 3759,
|
|
"totalClasses": 7695,
|
|
"generated": "2026-10-17 03:11"
|
|
}
|
|
} |