🚀#BallisticNG v1.2.5 hacked with Cheat Engine 7.3

Words
407
Reading
2 min
Listen
Play
5y

¡Hello! This post is about a gameplay of a futuristic anti-gravity racing game, in where there're cheat codes used. These cheats are created by me ^^. Used assembly (x64) scripts to let these cheats work correctly.

The featured ones can be executed using hotkays:
-Instant random weapon (On "PgUp"/Off "PgDown")
-Auto-pilot (On "Num1"/Off "Num0")
-Auto-pilot speed; Hold speed increase (On "Num3"/Off "Num2")
-Shield (On "Num5"/Off "Num4")
-Select weapon (relative) with "Home"/"End".

In video, I have instant random weapons, auto-pilot & a permanent shield.

Download link of cheat table (open with CheatEngine): https://www.mediafire.com/file/6c69p3wvetg70tv/BallisticNG+v1.2.5.CT

Video:

The used music belongs to beaTHawk (all rights reserved to him): http://modarchive.org/index.php?request=view_by_moduleid&query=83860

A bit more info about the cheat table.

The file looks like this:

"image.png"
The blue assembly script (the one with description "Build blue pointers") allows blue cheats to work only for player 1. A pointer address is an address where its value can be interpreted as other address, and so on until the correct value is found. An address is a place of memory region which 'inside', has such information called "Value" (watch the cheat table screenshot to understand better).

I will explain how could I do for let the assembly script to write only the right address to the base address of blue pointers.

This is the interior of the mentioned script above: "image.png"
From what I remember, this is a particular memory injection method called "Full Injection" (done pressing "Ctrl+F" in that window). The original formula is "movss xmm0,[rax+00000250]", where this formula gives information about all players' health (& it's known becuase of the offset "00000250"). rax is a variable (in assembly is called "register") which works here as a base address of all players. So, used one of the tools of CheatEngine for compare the values of rax so I can find common factors between the value of rax who belongs to my player & the other ones who belong to the other players.

I could find that a common factor is that the value of rax+218 is 0 for my player (in assembly, one can say that "[rax+218] is 0"), & respect of other players, [rax+218] is 1.

So, I compared it to 'tell the script that I want to only get the value of eax who belongs my player, so I can write it in a base address to get a 100% accurate opointer forcely'.

Translaed in assembly, this is:

...

  1. newmem:
  2. cmp [rax+218],00
  3. jne code
  4. mov ["UnityPlayer.dll"+014F0080],rax
  5. ​
  6. code:
  7. movss xmm0,[rax+00000250]
  8. jmp return
  9. ​
  10. INJECT:
  11. jmp newmem
  12. nop 3
  13. return:

...

Watch the code screenshot above to understand.

🚀#BallisticNG v1.2.5 hacked with Cheat Engine 7.3 | Ecency