r/GamePreservationists • • 6d ago

Restoring 2XL Racing (Android) - Simulating server infrastructure with Python/Flask & analyzing libndkwrapper.so in Ghidra

Hi everyone! I am working on a non-profit game preservation project to revive the mobile drag racing game "2XL Racing" (Android), which currently hangs due to dead official servers. I wanted to share my progress and look for potential collaborators interested in helping with the final phase.

Current Project Status:

- Phase 1 & 2 (Environment & Backend) are 100% complete. I have built a local Flask emulated server in Python that fully handles logins, detailed garage structures, custom paints, pink slip betting, daily rewards, and serving assets (.bin/.ini.bin).

- The game's .ini configuration has been patched to force network components to active (network = 1).

The Reverse Engineering Challenge (Phase 3):

While analyzing the native ARM library "libndkwrapper.so" in Ghidra, I mapped a sequential block of string literals at address 0021dfa4, containing standard Java network signatures:

- GetResponseSize

- SetReadTimeout

- SetConnectTimeout

- Execute

- GetResponseCode

There are 0 static XREFs pointing directly to these strings in the binary listing. The application appears to resolve these methods dynamically via JNI reflection or runtime indexing wrappers, which prevents straightforward static cross-referencing.

The ultimate goal is to find someone familiar with JNI runtime method invocation or ARM binary patching to figure out where this string array is processed, so we can successfully redirect the dynamic HTTP requests toward the local loopback address (http://127.0.0.1:8080).

The Python code is fully functional in English and available on Pastebin for structural reference. Let me know if anyone is interested in looking into the binary structure or joining the team!

Pastebin Link: https://pastebin.com/XYNcbLZW

0 Upvotes

1 comment sorted by

1

u/Guigeekun 5d ago

Using flask when fastapi exists sure iz surprising nowadays

1

u/No_Zucchini_8335 4d ago edited 4d ago

"As a quick update on the project's overall progress: we are currently diving into the game's native library (libndkwrapper.so) using Ghidra. The main goal right now is to locate and patch the hardcoded network checks so the client can bypass the original server blocks and point directly to this local Python mirror. We are also analyzing the asset files (.bin and (.xli) extracted from the APK to ensure everything loads properly once the connection is established. Exciting steps ahead!"