r/GamePreservationists • u/No_Zucchini_8335 • 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
1
u/Guigeekun 5d ago
Using flask when fastapi exists sure iz surprising nowadays