Files
rr3-apk/README.md
Daniel Elliott d8d12e0b46 Update README with killswitch removal information
Added comprehensive killswitch section:
- What the killswitch is and how EA uses it
- Code location and exact changes made
- Technical explanation with code snippet
- Why the patch is permanent (immutable bytecode)
- Verification instructions
- Link to full KILLSWITCH-REMOVAL-GUIDE.md

Reorganized documentation section:
- Killswitch removal guide as first item (most critical)
- Technical details section at bottom
- File locations and line numbers
- How to verify the patch worked

Makes it clear this branch has the EA shutdown bypass code.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-20 11:15:38 -08:00

10 KiB

🏎️ RR3 APK Modification Tools + Server Browser + Killswitch Removal

License: Educational Platform: Windows Language: PowerShell

🎮 Real Racing 3 - Community Server APK Modifier

This repository contains tools to modify the Real Racing 3 APK to connect to community-hosted servers instead of EA's official servers. Perfect for game preservation, private servers, and offline play.


🔓 NEW: Killswitch Removal Code (Branch: killswitch-killer)

EA's March 2026 shutdown bypassed! This branch contains the code modifications that disable EA's server-controlled killswitch.

What's the Killswitch?

EA added a remote shutdown mechanism to RR3 v14 that checks their servers on every startup. When they flip the switch in March 2026, the stock APK will refuse to launch.

The Fix

We surgically removed the killswitch by modifying one single method in the EA Nimble SDK:

File: smali_classes2/com/ea/nimble/EnvironmentDataContainer.smali
Method: getLatestAppVersionCheckResult() (line 648)
Change: Always returns 0 (APP_VERSION_OK) instead of checking server response

# Before: 88 lines checking server's "appUpgrade" field
# After: Hardcoded return value of 0 (game always starts)

.method public getLatestAppVersionCheckResult()I
    .locals 1
    
    # KILLSWITCH DISABLED BY COMMUNITY MOD
    const-string v0, "🔓 Killswitch bypassed - returning APP_VERSION_OK"
    invoke-static {v0, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I
    
    const/4 v0, 0x0  # Always return 0 (OK)
    return v0
.end method

Documentation

📖 KILLSWITCH-REMOVAL-GUIDE.md - Complete technical breakdown:

  • How the killswitch works (server-controlled shutdown)
  • Why our patch is permanent (compiled bytecode is immutable)
  • Proof EA can't revert it remotely (no hot-patching capability)
  • Manual patching instructions for developers
  • FAQ addressing community concerns

Files Modified

File Line Change
smali_classes2/com/ea/nimble/EnvironmentDataContainer.smali 648-668 Replaced entire getLatestAppVersionCheckResult() method

Result

Game works after EA servers shut down
No dependency on EA infrastructure
Can't be remotely disabled
Progress preserved locally


🚀 NEW: Getting Started Guide!

First time building? Check out our comprehensive GETTING-STARTED.md guide with:

  • Step-by-step instructions
  • Troubleshooting tips
  • Android 16 compatibility guide
  • Quick start in 5 minutes

NEW: Server Browser UI

No more rebuilding APKs! The new Server Browser feature lets users manage multiple community servers from within the game:

  • 🌐 Multiple Servers - Save unlimited server profiles
  • 🎨 Beautiful UI - WebView-based interface with real-time status
  • One-Click Connect - Switch servers instantly
  • 🔄 No Reinstalls - One APK for all servers
  • Favorites - Mark frequently used servers
  • 🔍 Connection Testing - Verify before saving

Quick Start

Basic APK Modification

# Simple URL redirect (old method)
.\RR3-Community-Mod.ps1 -ServerUrl "http://your-server-ip:5001"

Server Browser Installation (NEW!)

# Add server browser UI to APK
.\RR3-Server-Browser-Installer.ps1 -ApkPath "realracing3.apk"

# With pre-configured server
.\RR3-Server-Browser-Installer.ps1 `
    -ApkPath "realracing3.apk" `
    -DefaultServerUrl "http://localhost:5001" `
    -DefaultServerName "My Local Server"

📦 What's Included

Core Tools

  • RR3-Community-Mod.ps1 - Simple APK URL redirect script
  • RR3-Server-Browser-Installer.ps1 - NEW! Adds server browser UI

Server Browser UI (NEW!)

  • assets/community_servers_list.html - Server browser interface
  • assets/community_server_edit.html - Add/edit server form
  • smali-patches/ - Android bridge code (JavascriptInterface)

Documentation

  • APK_MODIFICATION_GUIDE.md - Complete guide (14,000 words)
  • APK_MODIFICATION_SUMMARY.md - Quick reference (12,000 words)
  • NETWORK_COMMUNICATION_ANALYSIS.md - Protocol docs (13,000 words)
  • docs/SERVER_BROWSER_GUIDE.md - NEW! Server browser user guide

Reference Files

  • reference/ - Original APK analysis (Java decompiled code)

🔍 How It Works

Method 1: Simple URL Redirect (Original)

Real Racing 3 has built-in support for custom servers! Just change the configuration in AndroidManifest.xml:

<meta-data android:name="com.ea.nimble.configuration" android:value="custom" />
<meta-data android:name="NimbleCustomizedSynergyServerEndpointUrl" android:value="http://your-server:5001" />

Method 2: Server Browser (NEW!)

Adds a complete UI for managing servers:

  1. HTML/CSS/JS interfaces stored in APK assets
  2. Smali bridge code (CommunityServerManager) with JavascriptInterface
  3. SharedPreferences storage for server configs
  4. Patched game code to read active server URL at runtime

Result: One APK that can connect to any number of community servers!

🎯 Use Cases

For Players

  • Keep one APK, switch between servers
  • Test multiple servers easily
  • Manage LAN + public servers
  • Favorites for frequently used servers

For Server Owners

  • Share one APK with all users
  • No need to distribute custom builds
  • Users can add your server themselves
  • Professional UI experience

For Developers

  • Test against multiple server instances
  • Quick switching between local/staging/production
  • Beautiful UI example code

📱 Server Browser Screenshots

┌─────────────────────────────────────────┐
│  🌐 Community Servers                   │
├─────────────────────────────────────────┤
│  ┌─────────────────────────────────┐   │
│  │ 🏠 My Local Server              │   │
│  │ http://localhost:5001           │   │
│  │ Status: 🟢 Online    [Connect]  │   │
│  └─────────────────────────────────┘   │
│                                         │
│  ┌─────────────────────────────────┐   │
│  │ 🌍 RR3 Community #1 (Active)    │   │
│  │ https://rr3-community.com       │   │
│  │ Status: 🟢 Online               │   │
│  └─────────────────────────────────┘   │
│                                         │
│  [+ Add New Server]                     │
└─────────────────────────────────────────┘

🚀 Getting Started

Prerequisites

  1. apktool - For decompiling/rebuilding APKs
  2. uber-apk-signer - For signing APKs (optional)
  3. Real Racing 3 APK - Original game file

Installation

# Install apktool (Windows)
choco install apktool

# Download uber-apk-signer
# https://github.com/patrickfav/uber-apk-signer

See docs/SERVER_BROWSER_GUIDE.md for complete instructions!

🌐 Need a Server?

Check out rr3-server - ASP.NET Core 8 community server with:

  • Web admin panel
  • Daily rewards system
  • Time trials
  • Car ownership & upgrades
  • Career progression
  • Player leveling

Together, these projects create a complete community-run RR3 experience!

📚 Documentation

Core Documentation

  • KILLSWITCH-REMOVAL-GUIDE.md - 🔓 Bypass EA's March 2026 shutdown (NEW!)
  • Server Browser Guide - User guide for server browser UI
  • APK_MODIFICATION_GUIDE.md - Technical APK modding details
  • NETWORK_COMMUNICATION_ANALYSIS.md - RR3 protocol documentation

Technical References


🛠️ Technical Details

Killswitch Removal (v14 Ultimate)

Purpose: Disable EA's remote shutdown mechanism to preserve the game after March 2026

Modified Files:

smali_classes2/com/ea/nimble/EnvironmentDataContainer.smali
├── Line 648-668: getLatestAppVersionCheckResult() method
└── Change: Always returns 0 (APP_VERSION_OK)

How It Works:

  1. Original code checks m_getDirectionResponseDictionary.get("appUpgrade")
  2. EA's server returns 0 (OK), 1 (Warning), or 2 (BLOCKED)
  3. Our patch ignores the server response completely
  4. Method now hardcoded to return 0 regardless of server state

Why It's Permanent:

  • Smali bytecode → DEX → machine code = immutable after installation
  • EA can only change server DATA, not compiled METHOD CODE
  • No DexClassLoader or hot-patching in RR3
  • Firebase Remote Config only affects data/flags, not executable code

Verification:

# Check logcat for this message on startup:
I/RealRacing3: 🔓 Killswitch bypassed - returning APP_VERSION_OK (community mod)

🤝 Contributing

Contributions welcome! Areas for improvement:

  • Auto-generate smali code
  • Server discovery/public list
  • Import/export server configs
  • Server statistics (ping, uptime)
  • QR code sharing

This project is for educational and game preservation purposes only.

  • Real Racing 3 © Electronic Arts Inc.
  • Use at your own risk
  • Do not distribute EA's assets
  • Respect intellectual property rights

🎖️ Credits

  • RR3 Community - Keeping the game alive
  • apktool - APK toolkit
  • EA/Firemonkeys - Original developers

Made with ❤️ for game preservation 🏎️💨

One APK. Unlimited Servers. Endless Racing.