Rust Pal (legacy external map and network protocol info)
I spent about a week reverse engineering the rust networking protocol and built it into an external map. I don't play rust anymore, so don't really have any use for it. It's an external map wrote in C# with no anti-detection techniques, but it shows the position of animals and players, uses SDL to render so it's nice and smooth.
The source code and the compiled release have been attached.
In order to use the external map, you need to configure the IP address and port of the target server. You can do this by going into config/core.json and altering the host and port fields. To discover the IP & Port of the server you want to target, join it in the server browser, open the console using F1 - and copy the last logged IP address. In order to make the program work, you need to type net.connect 127.0.0.1:theport, replacing theport with the port number you previously specified.
This doesn't hook onto the game or any network interfaces, so should bypass detection by these methods. Here's a brief doc I wrote, but the source code should be easier to read.
The source code and the compiled release have been attached.
In order to use the external map, you need to configure the IP address and port of the target server. You can do this by going into config/core.json and altering the host and port fields. To discover the IP & Port of the server you want to target, join it in the server browser, open the console using F1 - and copy the last logged IP address. In order to make the program work, you need to type net.connect 127.0.0.1:theport, replacing theport with the port number you previously specified.
This doesn't hook onto the game or any network interfaces, so should bypass detection by these methods. Here's a brief doc I wrote, but the source code should be easier to read.
Code:
I spent about a week reverse engineering the Rust protocol by dumping the packets, after doing some research, uLink was obsfucated beyond recognition so I had to do everything manually through a hex editor. I might properly document the protocol at some point, but it appears to be divided into three main groups. RPC RPC's are the primary way of transferring data between the server and the client. They are used for everything from object instantiation to entity movement. The library has a few internal RPC's, and there are other RPC's that Facepunch use for player movement and the such. The bulk of the code that handles these are contained in RPCPayload.cs and RPC/*.cs. To make it easier for me to handle RPC's, I created a system to replicate entity creation inside my own program. I could then modulary send the RPC's to the appropriate class. A good example of the receiving end of the system is located in Entities/Player.cs. Buffered RPCs Buffered RPC's are chunks of remote procedure calls that seem to be collected by uLink, and then distributed to clients when they join or entered a new area. Since this section of the protocol was complicated, I implemented RPC's first. They only covered objects that are created post-spawn, and rulsted in lot's of procedure calls to objects that do not exist yet. Link The link packet is used for connection, etc. I'm not really 100% sure what else it's used for, but I primarily ignored any research into this packet type since it had no useful information. The steam authentication does seem to go through this group.