Skip to content

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenLame

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 KeyZL + ZRまたはPLUS + MINUSへ切り替えられます。GUIから変更したFeatureはWUPS storageへ保存できます。

src/feature_registry.cppのアドレスは復元バイナリの静的情報を記録したものです。 Hookは対応タイトルのアプリ開始後だけインストールし、対象アドレスの先頭命令が 有効な場合に限って書き換えます。Hook本体は元関数を必ず呼び出し、ローカルプレイヤー Tick後に実装済みモジュールを適用します。元バイナリに含まれるライセンスサーバー通信、 ハートビート、改変検出処理も移植していません。

Wii U版のビルド

devkitProのシェルでは次のようにビルドできます。

export DEVKITPRO=/opt/devkitpro
export DEVKITPPC=$DEVKITPRO/devkitPPC
make -C wups

Minecraft 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\wiiu

libs\mcPink-Diamond_2_3_2\src\libs\mc から取り込んだスナップショットです。 OpenLameのMakefileとソースコンパイルは、このプロジェクト内のコピーだけを参照します。 ライセンスキー依存のアドレス難読化は取り込まず、libs\obfuscation\ConstantOB.hpp の互換リテラルで復号後アドレスと同じ値を提供します。mclibが公開ヘッダから参照する utils\InstanceAddress.hutils\strUtils.h もプロジェクト内に保持しています。

生成された build\wiiu\LameClient.wps をAromaのプラグイン配置先へコピーして ロードします。実機/Cemuでのロード確認は別途必要です。

Windows側の確認用実行ファイル

CMakeが使える環境では、機能登録とタイトル判定だけを確認する一覧実行ファイルも ビルドできます。Wii Uプラグイン本体とは別の確認用ターゲットです。

cmake -S . -B build-host
cmake --build build-host --config Release

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages