War Rock Cheat Programming Discussion

11/21/2013 00:45 kevin0152#331
#req
asm_vehicleradargps source
11/21/2013 07:28 Omdi#332
Quote:
Originally Posted by Raz9r View Post
Well the problem is that there may be two packets from the game whose logical timestamps only differ by one. So far I'm putting both the games and my cheats packets into one concurrent queue to properly update the logical timestamps and thus delay the send operation by up to 100ms, which can be critical for certain packets. Also the difference between the timestamps differs for a few packet types, so I really need to use some kind of a concurrent priority queue aka. a performance killer.
WarRock is P2P based right?
I guess there is no clean way to calculate the timestamp correctly.
How does the WarRock client calculate the timestamp?
11/21/2013 08:34 Cyno™#333
Quote:
Originally Posted by Omdihar View Post
WarRock is P2P based right?
I guess there is no clean way to calculate the timestamp correctly.
How does the WarRock client calculate the timestamp?

It is but when talking about the timestamp we're talk about the 'TCP' Packets from the Client to the WarRock Server.
They use a simple 'timeGetTime() [winmm.dll]' to generate the Timestamp.
For WarRock this isn't any problem because this is done in one single thread so it can't happen, that a timestamp < as the last timestamp.

When working with a Cheat, you normally create your own thread.
now when for example the WarRock Client generates a packet ( With a timestamp ) but before he could send it, your thread comes in and generates a Packet and sending it, so the last timestamp in the Server will be the one of the Packet, which comes from your thread.
Now when the WarRock client is ready to send his Packet, the timestamp will be lower as yours and it will lead to a disconnection.
11/21/2013 16:17 Omdi#334
Quote:
Originally Posted by Cyno™ View Post
It is but when talking about the timestamp we're talk about the 'TCP' Packets from the Client to the WarRock Server.
They use a simple 'timeGetTime() [winmm.dll]' to generate the Timestamp.
For WarRock this isn't any problem because this is done in one single thread so it can't happen, that a timestamp < as the last timestamp.

When working with a Cheat, you normally create your own thread.
now when for example the WarRock Client generates a packet ( With a timestamp ) but before he could send it, your thread comes in and generates a Packet and sending it, so the last timestamp in the Server will be the one of the Packet, which comes from your thread.
Now when the WarRock client is ready to send his Packet, the timestamp will be lower as yours and it will lead to a disconnection.
I am not sure if I have understood you properly, but then you could hook timeGetTime to get the last timestamp calculated by the client and calculate a new one which is not less than the original one?
11/21/2013 17:06 Raz9r#335
Quote:
Originally Posted by Omdihar View Post
I am not sure if I have understood you properly, but then you could hook timeGetTime to get the last timestamp calculated by the client and calculate a new one which is not less than the original one?
This would require you to make timeGetTime thread-safe, which causes a huge amount of lag. timeGetTime needs to be a real-time function. Also IIRC Hackshield checks its signature.
11/21/2013 20:38 Omdi#336
You could hook the sendPacket function and simply compare if the timestamp is less than your last sent packet.
11/21/2013 20:59 Raz9r#337
Quote:
Originally Posted by Omdihar View Post
You could hook the sendPacket function and simply compare if the timestamp is less than your last sent packet.
Which essentially is the main part of my first suggestion regarding this topic.
Recap what we got so far:
– Hooking send from WinSock2 and queuing all custom packets with a certain priority. Forces you to send your packets from the games main thread or to use mutual exclusion, which is bad. Also forces you to analyze every single packet in a hook before passing them to the original send function.
– Hooking timeGetTime to change the logical time order. Requires you to lock some pipelines.
– Hook send from WinSock2 and have a concurrent queue (with non-blocking pop_front/pop methods) filled with the custom packets from a new thread. Whenever a packet is sent, check for the queue not being empty; then after sending the games packet send the first packet in the queue with the timestamp being increased by one. Also hook timeGetTime and double the result to have at least one free timestamp in between every result of timeGetTime. Creates almost no lag at all, but does not properly work with chat packets as their timestamps need further adjustments.

What I'm doing so far is the following:
I'm mainly using the third way, but whenever I need to send a chat packet, I override my hook temporarily with the first. This only makes the game lag when I'm sending custom chat packets, which almost never happens. Almost lock-free. :-)
11/22/2013 09:24 Cyno™#338
Quote:
Originally Posted by Raz9r View Post
...
Im actually hooking into the Thread of WarRock for sending my packets and it works fine
11/22/2013 20:03 Gameerish___#339
Hast jemand die CPlayerInfo Structs ?^^
11/23/2013 07:41 bananegel#340
Quote:
Originally Posted by GTGameerish View Post
Hast jemand die CPlayerInfo Structs ?^^
They didn't update?
11/24/2013 00:30 kevin0152#341
is there someone who has a copy of gameguard server files before WarRock changed its anti hacking software to hackshield?
11/24/2013 00:37 BustyWar#342
Quote:
Originally Posted by kevin0152 View Post
is there someone who has a copy of gameguard server files before WarRock changed its anti hacking software to hackshield?
WarRock had previously Punkbuster. GameGuard has not been used in the International version.
11/24/2013 01:35 3dVision#343
Quote:
Originally Posted by kevin0152 View Post
is there someone who has a copy of gameguard server files before WarRock changed its anti hacking software to hackshield?
WarRock Global = Punkbuster -> Hackshield
WarRock PH = Punkbuster -> Gameguard
11/24/2013 01:35 Kazbah__#344
Code:
 
   /*0x00000680*/ char clan[48]; 

   /*0x000008F0*/ __int32 totalkills;

   /*0x000008F4*/ __int32 totaldeaths;

   /*0x0000076C*/ __int32 currentlevel;

   /*0x000005D6*/ __int32 exp;
11/24/2013 04:00 kevin0152#345
Quote:
Originally Posted by BustyWar View Post
WarRock had previously Punkbuster. GameGuard has not been used in the International version.
ah good to know thanks for the info