• Updated 2023-07-12: Hello, Guest! Welcome back, and be sure to check out this follow-up post about our outage a week or so ago.

The "Getting Bolo to work over the internet" challenge

Scott Squires

Well-known member
It lives up in the clouds!

I plan to host it on my server. But it will also be open source, so anyone could run their own proxy.

 

LaPorta

Well-known member
Nice, I’d like to give it a go.

How would that dovetail with a new Internet Bolo tracker? Or is that a totally separate project?

 

Scott Squires

Well-known member
We can add tracker functionality to the proxy. Right now I'm just focused on getting the proxy to work for a single game. Then we can make it support multiple games. For tracking, maybe just start with a web page. The utility:effort ratio decreases significantly at this point, because I don't expect a lot of active games at once.

 

LaPorta

Well-known member
Absolutely, just to get it working first is the key. I suppose I was eventually hoping for something that can interface with Internet Bolo Buddy for a seamless experience.

But you are right, just the game functioning!

 

gcp

Well-known member
What kills me is that if the source code for bolo was public it would likely be pretty trivial to add a text box to enter your external IP address and embed that into the packets being sent rather than your macs internal IP address.  The code would then also look for that external IP address rather than the internal one on received packets. 


This is actually a really good idea. If I am understanding the discussion in this thread correctly, it should be possible to patch the app to do exactly this, and have things work 'natively' - as long as everyone is using the patched version. It might be worth doing this as a low-cost proof of concept, or short-term way to scratch people's networked Bolo 'itch'.

 

cheesestraws

Well-known member
No code is available, nor has any at least recent reverse-engineering of the codebase taken place.

Writing an offboard proxy will be a lot easier than trying to patch the code in the game itself, at a guess.

 

superjer2000

Well-known member
Writing an offboard proxy will be a lot easier than trying to patch the code in the game itself, at a guess.
I’m not convinced of this. I think that trying to reverse engineer the protocol and ensuring that all possible permutations of Bolo packets are addressed, and then developing and making a proxy available is a pretty big undertaking.  Inserting the correct address right at the source would be pretty straightforward as I’m guessing the IP just gets embedded in one or two places in each packet and being able to see how the packets are built in the C or Pascal code would make it pretty clear.
 

That being said I have looked and don’t see that the source was ever posted or leaked so it’s probably moot. 
 

I am not sure what Stuart Cheshire’s motivation would be to keep the source code private, unless he’s either lost it or just doesn’t care period. 

 
Last edited by a moderator:

gcp

Well-known member
Inserting the correct address right at the source would be pretty straightforward as I’m guessing the IP just gets embedded in one or two places in each packet and being able to see how the packets are built in the C or Pascal code would make it pretty clear.


Right - that is my thinking as well. Either finding the code that constructs the packets, and overwriting the bytes there, or perhaps even simpler, finding the code that determines the local IP in the first place, and overwriting there, should result in a seamless solution.

That being said I have looked and don’t see that the source was ever posted or leaked so it’s probably moot. 


Not necessarily - plenty of modifications to programs have been made without source code access :) This problem can be thought of as analogous to removing copy protection, for example.

 

superjer2000

Well-known member
Not necessarily - plenty of modifications to programs have been made without source code access :) This problem can be thought of as analogous to removing copy protection, for example.


While I don't dispute that it can be done - it is well past my own capabilities.  You'd need somebody who's pretty familiar with 68k ASM and is pretty motivated to spend the time required to understand exactly how to modify the program.

 

cheesestraws

Well-known member
Inserting the correct address right at the source would be pretty straightforward as I’m guessing the IP just gets embedded in one or two places in each packet and being able to see how the packets are built in the C or Pascal code would make it pretty clear.


The code is not available, as I said upthread, and the author does not answer email about Bolo, as has also been said upthread.

Right - that is my thinking as well. Either finding the code that constructs the packets, and overwriting the bytes there, or perhaps even simpler, finding the code that determines the local IP in the first place, and overwriting there, should result in a seamless solution.


Please by all means feel free to do this modification, should you wish to.

 

Scott Squires

Well-known member
Right - that is my thinking as well. Either finding the code that constructs the packets, and overwriting the bytes there, or perhaps even simpler, finding the code that determines the local IP in the first place, and overwriting there, should result in a seamless solution.


Please by all means feel free to do this modification, should you wish to.


I agree, it would be awesome if gcp would implement this.

 

Chopsticks

Well-known member
im not sure how much use I can be but if I can help out with any testing at any stage please let me know what I can do

 

Scott Squires

Well-known member
Status update. I have written the network proxy code that can rewrite packets as they pass between players. At first I just implemented the packets that have a fixed position format. This worked surprisingly well. There are at least two issues. One is when players leave, one of the opcode-based packets tells the ring how to adjust itself to remove the player. In that situation, the ring sometimes gets messed up depending on who leaves. The other issue I'm not sure exactly how it arises, but sometimes the Network Info dialog (for a player other than the one to start the game) will show the first player's IP address as upstream or downstream. There is only one other opcode I have observed that contains that IP address, but I thought it was purely informational because it doesn't include a port number. Working on re-writing these opcodes to see if the problems go away. One snag is that they both appear to contain checksums and the game is not happy at all if the checksum fails!

I'll reach out to people for testing once I have something that seems to be stable. Speaking of stability -- does anyone recall if the aIndy brain had a tendency to crash a lot?

 

Scott Squires

Well-known member
Wireshark has a Lua API that you can use to write "packet dissector" plugins. Wireshark sends your Lua plugin the raw packet buffer and you tell Wireshark what it means.

 
Top