LameClient.wpsを対象に、C:\wiiuCode\Pink-Diamond_2_3_2のWUPS構成を参考に
作成したWii U Aroma用C++プラグインです。主成果物は解析器ではなく、
wups/src/wups_main.cppから生成する実行プラグインです。
- WUPSメタデータ:
LameClient/v2.8.0/GPL/LameClient_plugin - Pink-Diamondと同じMinecraftタイトルID判定
- WUPS初期化、設定メニューカテゴリ、アプリ開始/終了/終了要求のライフサイクル
- WPSから確認できた機能名・カテゴリ・シンボルアドレスのC++登録表
- 全FeatureRegistry項目を実行層へ結線するModuleRuntime
- Render / Input / Patch は毎フレームの実行状態を管理
- FullBright / KeyboardOnTV / BetterFont / NoHurtCam / NoFog / AntiTexture は 既知命令ワードを照合する可逆タイトルパッチ
- NoRain は復元済み8箇所の雨量呼び出し、NoParticle は復元済み6箇所の粒子生成入口を 事前照合付きで可逆パッチ
- NoFire / AutoSneak / Jesus / NoAttackAnimation / Zoom / LowerFPS / BoostFPSを実動作
LocalPlayer::tickからSpeed / BHop / Fly / Step / Spider / NoWeb / NoFall / AntiFallDamage / AntiKB / AutoSprint / AirJump / Phase / FastLaddersを実動作- HighJumpはWPSの
getJumpPower入口をHookし、ConfigMenuの整数Height (1..10)を反映 - LoudMic / ExplosionSnowball / GuardAttackは、WPSから確定したHook本体と設定処理を実装
- RainbowHitOutline / WallHackはWPSの静的スタブ全ワードと呼出先命令を実装
LocalPlayer::tickからAimAssist / Aimbotのプレイヤー選択・視線回転を実動作- Coordinates / ShowItemIDをゲーム内HUDとして実動作
- ShowCPSはWPSの左右入力窓をA/B入力へ接続し、1秒ごとのCPSをHUDへ反映
- GUIのSpeed / BHop / Step / HighJump / AimAssist設定を実行層へ同期
- GUIのNoFire / Spider / AutoSneak / BoostFPS設定を実行層へ同期し、WUPS storageへ保存
- ShowFPSはフレーム数ではなくMinecraft時刻差分から算出したFPSを表示し、PlayerListの Stalkerは選択中プレイヤーの共有ポインタをPlayer::setCamera Hookへ反映
- 未復元ABIが必要なモジュールはABI-GUARDEDとして残し、クラッシュ・パケット洪水・ VoteKick・TrollTNTなどのHost破壊系処理は実装しない
- LameClient.wpsから復元した基本6つのMinecraft内部Hook
LevelRenderer::render(0x031BC358)LevelRenderer::renderEntities(0x031B8298)BlockEntityRenderDispatcher::render(0x02FE2438)Player::setCamera(0x0273BC14)LocalPlayer::tick(0x031E3A80、実モジュール実行の入口)Gui::addMessage(0x0313873C、Chatタブへライブ反映)
- LameClient.wpsから復元した2つの基本命令注入点
CALLING(0x02D9CAC0)MCNotInGame(0x02D9C8B0)
- PowerPCトランポリン、命令/データキャッシュ同期、終了時の安全な復元
- AntiCrash/SignEditor/KeyboardText/CustomCombo/HighJump/LoudMic/ ExplosionSnowball/GuardAttack/XRayのModule所有Hookは、各Moduleの有効化・無効化で管理
- WUPS storage保存の入口
- ゲーム内GUIのCategory/Tab階層
- Combat / Movement / Render / Item / Server / Host / ModMenu / Misc / PlayerList / Chat / Settings
- Settings の General / Theme / Patch / Config / About / Dev
- PlayerList の選択・更新、Chat の表示・入力・更新・Clear
- GUIコントロール
- 全FeatureRegistry項目のON/OFF Toggle
- ConfigUI由来のButton / Slider / NumericInput / Keybind / ColorPicker
has_config_menuモジュールの ConfigMenu(モジュールごとの型付き設定)- タッチ選択、スクロール、D-Pad/A/B/X/Y/L/R入力
LevelRenderer::render後のMinecraft 2D描画(Font / Tesselator / 2D projection)
GUI実装は元WPSの責務境界に合わせて分割しています。MenuBuilder/カテゴリモデルは
src/menu_model.cpp、ConfigMenuはsrc/game_gui_config.cpp、選択・プレイヤー・チャット状態は
src/game_gui_state.cpp、Wii U描画・入力はsrc/game_gui_render.cppです。静的解析で確定した範囲と
未確認のABI依存範囲はdocs/reproduction_audit.mdに記録しています。モジュールは
src/modules/Module_<Name>.cppへ1クラス1ファイルで分割し、各ModuleがConfigMenu定義と
仮想ライフサイクルを所有してModuleRuntimeの共通ABIサービスへ接続します。ModuleCatalogが
FeatureRegistryと結合します。
FeatureRegistryとModuleCatalogは194件ずつ一致し、replacement-readyの静的棚卸しは 112件、ABI-GUARDEDは82件です。これはコード上の実装境界であり、実機/Cemuで全モジュールの 動作が確認済みという意味ではありません。未確認の描画・パケット・アカウント系ABIと、 CrashHost/NetworkKiller/FraudulentVote/VoteKick/TrollTNTなどの危険なHost処理は 安全上実行しません。
ゲーム内メニューは初期状態でL + Rを押して開閉します。ConfigのMenu Toggle Keyで
ZL + ZRまたはPLUS + MINUSへ切り替えられます。GUIから変更したFeatureはWUPS
storageへ保存できます。
src/feature_registry.cppのアドレスは復元バイナリの静的情報を記録したものです。
Hookは対応タイトルのアプリ開始後だけインストールし、対象アドレスの先頭命令が
有効な場合に限って書き換えます。Hook本体は元関数を必ず呼び出し、ローカルプレイヤー
Tick後に実装済みモジュールを適用します。元バイナリに含まれるライセンスサーバー通信、
ハートビート、改変検出処理も移植していません。
devkitProのシェルでは次のようにビルドできます。
export DEVKITPRO=/opt/devkitpro
export DEVKITPPC=$DEVKITPRO/devkitPPC
make -C wupsMinecraft Wii U ABIヘッダは libs\mc に同梱されています。Windows環境では
devkitProとWiiUPluginSystem 0.9.1の場所を指定してビルドします:
.\tools\build_wiiu.ps1 `
-DevkitProRoot "C:\wiiuCode\Pink-Diamond_2_3_2\elf_devkitPro\devkitPro" `
-WupsSourceRoot "C:\wiiuCode\Pink-Diamond_2_3_2\libs\WiiUPluginSystem-main" `
-OutputDirectory build\wiiulibs\mc は Pink-Diamond_2_3_2\src\libs\mc から取り込んだスナップショットです。
OpenLameのMakefileとソースコンパイルは、このプロジェクト内のコピーだけを参照します。
ライセンスキー依存のアドレス難読化は取り込まず、libs\obfuscation\ConstantOB.hpp
の互換リテラルで復号後アドレスと同じ値を提供します。mclibが公開ヘッダから参照する
utils\InstanceAddress.h と utils\strUtils.h もプロジェクト内に保持しています。
生成された build\wiiu\LameClient.wps をAromaのプラグイン配置先へコピーして
ロードします。実機/Cemuでのロード確認は別途必要です。
CMakeが使える環境では、機能登録とタイトル判定だけを確認する一覧実行ファイルも ビルドできます。Wii Uプラグイン本体とは別の確認用ターゲットです。
cmake -S . -B build-host
cmake --build build-host --config Release