 |
Cheat Engine The Official Site of Cheat Engine
|
View previous topic :: View next topic |
Author |
Message |
Logic_Bomb How do I cheat?
Reputation: 0
Joined: 06 Jul 2013 Posts: 3
|
Posted: Sat Jul 06, 2013 9:07 am Post subject: My Dedicated Game Server - Detecting Player-Class/Matrix |
|
|
Hey all,
I have been programming for a number of years now, but only recently have I started to attempt complex Reverse-Engineering/Memory-Editing.
I am running an *Scrubbed* Server, which as many of you may know, is often used to host the *scrubbed*. I have started work on a complex Anti-Cheat system; one of the features for this system is going to be an Anti-Teleport system, for this to work in real-time, I need to find the memory location(s) of the Player Matrix, so that I can dynamically pull X & Y positions (Stored as Float) for each connected player from the server via my Application. I know the theory behind doing this, and I am able to pull it off via cheat engine. With two clients connected to my server, I am able to pull both their X & Y positions. But, I have run into two problems:
1) I can't seem to work out the static address/pointers for these positions.
2) I can't work out how they are stored in memory, i.e. I need to be able to iterate through all connected players from my Application and I just cannot seem to work out where the actual player-matrix or player-class is and what the spacing between them is. So basically, I need to find out, in a dynamic way, where one player-matrix ends and a new one begins.
Could anyone shed any light on good tutorials or how I would go about achieving this?
(Just a side note: I'm guessing that 'Player-Matrix' is the wrong terminology, since this is a server, not a client, and thus, it is not a Graphics Engine storing the player information. If this is the wrong terminology, please feel free to correct me).
Thanks & Regards,
Logic_
Last edited by Logic_Bomb on Tue Jul 09, 2013 8:52 pm; edited 2 times in total |
|
Back to top |
|
 |
Gniarf Grandmaster Cheater Supreme
Reputation: 43
Joined: 12 Mar 2012 Posts: 1285
|
Posted: Sat Jul 06, 2013 12:14 pm Post subject: |
|
|
I can help you if you edit your post so that it complies with this: http://forum.cheatengine.org/faq.php#0 . Otherwise I think this thread will be locked soon.
Aside that, player class/object/structure seem to be what you call the "player matrix". |
|
Back to top |
|
 |
Logic_Bomb How do I cheat?
Reputation: 0
Joined: 06 Jul 2013 Posts: 3
|
Posted: Mon Jul 08, 2013 5:48 pm Post subject: |
|
|
As far as I was aware, it does comply with the stated rules. I am not attempting to make a cheat for a game, nor am I asking for help making a cheat for a game; The program I'm creating merely reads the memory allocated to a game-server that I am hosting on my own machine in order to create an Anti-Cheat.
I thought I may have been wrong in referring to it as a Player Matrix, 'player class' or 'player object' seems more appropriate, IIRC 'Player Matrix' is quite specific to D3D/OpenGL and the likes.
Either way, I had read the FAQ & searched the forums before posting this thread, and since this isn't a 'cheat', I couldn't find any reason not to post it.
Regards,
Logic_ |
|
Back to top |
|
 |
++METHOS I post too much
Reputation: 92
Joined: 29 Oct 2010 Posts: 4197
|
Posted: Mon Jul 08, 2013 6:48 pm Post subject: |
|
|
Quote: | 2) I can't work out how they are stored in memory, i.e. I need to be able to iterate through all connected players from my Application and I just cannot seem to work out where the actual player-matrix or player-class is and what the spacing between them is. So basically, I need to find out, in a dynamic way, where one player-matrix ends and a new one begins. | -Not sure if I understand you correctly, but usually, there is a single instruction that accesses all players/enemies base coordinate address. |
|
Back to top |
|
 |
Gniarf Grandmaster Cheater Supreme
Reputation: 43
Joined: 12 Mar 2012 Posts: 1285
|
Posted: Mon Jul 08, 2013 7:19 pm Post subject: |
|
|
Logic_Bomb wrote: | As far as I was aware, it does comply with the stated rules. I am not attempting to make a cheat for a game, nor am I asking for help making a cheat for a game; The program I'm creating merely reads the memory allocated to a game-server that I am hosting on my own machine in order to create an Anti-Cheat. | I've been working on a bantool here and even if the the objective was just to display a popup when a player whose name is on a banlist enters a lobby, well see post #4. As a result if I were you I'd wipe the game's name, aside that, I didn't have anything against making a bantool, and I don't have anything against anti-teleports.
@GNIREENIGNE: you're handling this one or I keep an eye out? |
|
Back to top |
|
 |
++METHOS I post too much
Reputation: 92
Joined: 29 Oct 2010 Posts: 4197
|
Posted: Mon Jul 08, 2013 7:41 pm Post subject: |
|
|
Gniarf wrote: | @GNIREENIGNE: you're handling this one or I keep an eye out? | -No way. Just trying to help clarify things. I'm still not even sure what the OP is referring to...maybe a LAN party-type arrangement? |
|
Back to top |
|
 |
Gniarf Grandmaster Cheater Supreme
Reputation: 43
Joined: 12 Mar 2012 Posts: 1285
|
Posted: Mon Jul 08, 2013 8:17 pm Post subject: |
|
|
From what I understand it's an anti-teleport system, so basically you periodically log each player's position, and if the difference between the current position and the last known one is too big, you...You?... You??! Well I hope the OP knows a way to do something bad to a player when a cheating attempt is detected.
Now one thing that worries me a bit is how to handle near-simultaneous deconnections & connections, ie: Mr."Foo", who is the 23rd player in the player array/list, goes to city1 (coordinates 1000,1000) and disconnects (bedtime). At this instant Player "Bar" connects, taking his place as Player #23, and spawns at city2 (coordinates 2000,2000). Thus player #23 jumped from 1000,1000 to 2000,2000 in an instant...Player #23 is a cheater !!
Variant: when a player disconnects, his avatar stops existing, so perhaps his coordinates are set to 0,0 -> bigass jump again. |
|
Back to top |
|
 |
++METHOS I post too much
Reputation: 92
Joined: 29 Oct 2010 Posts: 4197
|
Posted: Mon Jul 08, 2013 8:31 pm Post subject: |
|
|
Gniarf wrote: | From what I understand it's an anti-teleport system, so basically you periodically log each player's position, and if the difference between the current position and the last known one is too big, you...You?... You??! Well I hope the OP knows a way to do something bad to a player when a cheating attempt is detected. | -Right. That part, I understood.
Gniarf wrote: | Now one thing that worries me a bit is how to handle near-simultaneous deconnections & connections, ie: Mr."Foo", who is the 23rd player in the player array/list, goes to city1 (coordinates 1000,1000) and disconnects (bedtime). At this instant Player "Bar" connects, taking his place as Player #23, and spawns at city2 (coordinates 2000,2000). Thus player #23 jumped from 1000,1000 to 2000,2000 in an instant...Player #23 is a cheater !! | -Right, again. If it is a small, LAN-type arrangement, I don't see it as a problem. Regardless, all the OP has to do is monitor the coordinates, as you say, but also store them. During the compare, if the difference is too great, then the stored coordinates are loaded. So, in the case of a new player joining, they wouldn't actually get kicked...but they would be teleported back to the previous player's coordinates...then, the game would continue as normal. However, if the OP decides to implement a crash or kick feature for cheaters (as opposed to just a 'return to where you were, naughty boy'), then it might prove more difficult, as you say, unless spawn points could be used for the compare.
Gniarf wrote: | Variant: when a player disconnects, his avatar stops existing, so perhaps his coordinates are set to 0,0 -> bigass jump again. | -Another possibility.  |
|
Back to top |
|
 |
Geri Moderator
Reputation: 111
Joined: 05 Feb 2010 Posts: 5636
|
Posted: Tue Jul 09, 2013 12:28 am Post subject: |
|
|
Besides, this would be useful against teleporting to huge distances. Players could still make small "teleport jumps" below the anti-cheat detection limit or modify their speed to run/fly fast. Seems complicated. _________________
|
|
Back to top |
|
 |
Gniarf Grandmaster Cheater Supreme
Reputation: 43
Joined: 12 Mar 2012 Posts: 1285
|
Posted: Tue Jul 09, 2013 2:04 am Post subject: |
|
|
GNIREENIGNE wrote: | If it is a small, LAN-type arrangement, I don't see it as a problem. Regardless, all the OP has to do is monitor the coordinates, as you say, but also store them. | Don't know about you, but if I want to prevent cheating in a lan (a real lan, not a vpn), I use a chainsaw, not program.
GNIREENIGNE wrote: | a 'return to where you were, naughty boy' | I'm not even sure it's possible, I mean if a teleport hack exist I assume that the position is stored on the client, or at least the client is the "master" when it comes to position and the server is the "slave". I'm not competent on mmo designs though, so I might be spewing BS.
@Geri: This one sure is more than your average godmode, but the good side is that the OP has programming knowledge.
As for "run fast" hacks, I guess you could compute the average speed over 5 or 15 minutes (for all players, and not forgetting to clear speed history and sample count when someone disconnects)...Better do that in an injected C(++) dll imo.
Aside that, moderator came, moderator saw, moderator said nuthin'...Does that mean we're clear on the rule side? |
|
Back to top |
|
 |
Geri Moderator
Reputation: 111
Joined: 05 Feb 2010 Posts: 5636
|
Posted: Tue Jul 09, 2013 2:49 am Post subject: |
|
|
I am not a moderator in this topic. DB can still scrap this topic when he comes. Removing the game's name would be a good idea though.
As for running and flying fast, I didn't mean just changing moving speed but to do the "teleporting" in steps, like teleporting forward 100 times. If players have a guess how frequent is the check and what is the max distance below detection limit, which can be found out easily by experimenting, then they will just stay below the limit. This will probably not stop them to teleport to rooftops, take up sniping positions at strange places etc. I guess this game has snipers and stuff, I didn't play it at all. _________________
|
|
Back to top |
|
 |
Logic_Bomb How do I cheat?
Reputation: 0
Joined: 06 Jul 2013 Posts: 3
|
Posted: Tue Jul 09, 2013 7:11 pm Post subject: |
|
|
Thanks for all your replies, I have removed the name of the Game as requested.
@GNIREENIGNE; The game in question is a Dedicated server for a game Mod. Any player from any location is able to join the server.
@Gniarf, Geri & GNIREENIGNE; I have already implemented the protocol that interfaces with the servers admin console via UDP, so I already have real-time information regarding when players connect and disconnect, their GUID and their player ID/#. So I am able to automatically Kick/Ban if needed. The map in question is 225 Square Kilometers, so a hacker performing small jumps is unlikely. The game in question unfortunately doesn't use a traditional MMO architecture, by this I mean, the Client is not just treated as a 'Dumb Terminal', the client shares responsibility for a lot of things.
The up-side is, the Game utilizes a GUID system, this GUID can be banned, to get around the ban, the Client would have to purchase a new copy of the game.
But yes, my plan would be access the server memory in read-only mode, and then to periodically read the players positions, and then from this data, hopefully analyse possible/definite Teleports. Teleporting to roof-tops doesn't concern me as much as Teleporting hundreds of kilometers across the map in order to acquire gear/vehicles.
As I said, I have been able to locate numerous copies of the player positions in memory, but I am unable to find any static addresses that may lead to the positions. But as stated in my original post, I have had a fair amount of programming experience, but I am fairly new to this area - so I thank you for your patience.
Once again, thanks for the replies.
Regards,
Logic_ |
|
Back to top |
|
 |
Gniarf Grandmaster Cheater Supreme
Reputation: 43
Joined: 12 Mar 2012 Posts: 1285
|
Posted: Tue Jul 09, 2013 8:11 pm Post subject: |
|
|
Logic_Bomb wrote: | Thanks for all your replies, I have removed the name of the Game as requested. | Forgot the thread's title (I'm annoying am I not?). Anyway since I guess this will be fixed soon, let's get down to business.
So erm, one thing that will be important to know is if the players are stored in an array or in a linked list. Is there a maximum of players per server? If yes we're probably looking at an array.
What methods did you use when you searched for pointers? The pointerscanner or the manual one (with "find out what accesses...") ? Personally I'd do both: once the progress bar of the pointerscanner is full, what happens to the target is irrelevant. You can even close it, it won't alter the results. So while the scanner is busy, try the manual approach.
Note each time you land on an instruction like mov register, [register+register*4+offset]. Most of the times (always?) the register*4 part means an array access, so maybe you're looking at the CPlayer* PlayerArray.
When using the pointerscanner use private sessions with only ONE player (not 2). Otherwise you may wipe out valid results because they point to player1's position but you did a rescan with player2's position which you thought was player1.
One more thing to try: In a session with only 1 player, find position in server's memory->right click->"find what accesses..."->right click in this window->"check if found opcodes...". Then play a bit and note every instruction that has a "(1)" in the count column. Then have a 2nd player join. All instructions that had a "(1)" and now have a "(2)" are used to access position and only that. Note them, hooking those might be useful.
Also note their addresses in the server.exe+123456 format, not just the hex address.
Logic_Bomb wrote: | I can't work out how they are stored in memory, i.e. I need to be able to iterate through all connected players from my Application and I just cannot seem to work out where the actual player-matrix or player-class is and what the spacing between them is | To me it's very UNlikely than the memory spacing between player object is regular. In the best case scenario you'll have an array of pointers to objects. That means that address foo contains a pointer to player1's data, address foo+4 points to player2's, address foo+8 to player3's,...
Logic_Bomb wrote: | I have already implemented the protocol that interfaces with the servers admin console via UDP | Out of curiosity, does that mean that you locally log on into the remote admin console and send upd packets to 127.0.0.1? _________________
DO NOT PM me if you want help on making/fixing/using a hack. |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
|
|