IamSanjid/PawnedNFSUnbound
No description provided.
master
6da2d743ea51dffbebbee3d1504efd8483b13c7e
I was basically trying to write some sort of detour "hooking" framework in Zig, so experimented with a relatively easy to hack around modern game called Need for Speed Unbound. The framework is almost finished for x86_64(not 32bit or x86) architecture, mainly tested on Windows as it is a gaming OS afterall.
Since I was testing with Need for Speed Unbound the framework is kind of tangled with the full pawning Need for Speed Unbound state. I do plan to seperate them.
Last tested June, 2025, with the Steam version, might not work currently/in future or with the raw origin/ea play version.
"Hacked" two things:
Last tested with zig-x86_64-windows-0.15.0-dev.1108+27212a3e6
.
git clone https://github.com/IamSanjid/PawnedNFSUnbound.git
cd PawnedNFSUnbound && zig build all
These command should build two DLL's one loader and another main, the loader needs to get injected I just use CheatEngine
's inject dll thingie.<path to>/PawnedNFSUnbound/zig-out/bin
PawnedNFSUnboundLoader.dll
to the Need for Speed Unbound's process, easiest way will be by using CheatEngine
.load "<Full absolute path to PawnedNFSUnbound.dll>"
the "
double quotes are recommended then press enter.Most of the things are marely reverse engineering issues just lazy to fix it.
It seems the EngineStructureItemData
doesn't get properly copied on resource loading, so you've to manually go to Performance
choose the engine and then do a handling synchronization(just move any of the handling slider left and right).
You need to "Find Game"/enter a lobby for things to get applied for online mode.
Random crashes, when switching from one mode to another...
zig build hook -Dhook-name=<name> -Dhook-offset=<0x hex>
this command will generate some sort of template in the src/hooks
directory the offset is relative to the main module NeedForSpeedUnbound.exe
if you want to change it through command you can pass -Dhook-base-module=<name>
command arg.
MIT