68kMLA Classic Interface

This is a version of the 68kMLA forums for viewing on your favorite old mac. Visitors on modern platforms may prefer the main site.

Click here to select a new forum.
The "Getting Bolo to work over the internet" challenge
Posted by: Scott Squires on 2021-02-11 10:11:49
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.

Posted by: LaPorta on 2021-02-11 10:49:27
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?

Posted by: Scott Squires on 2021-02-11 11:04:41
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.

Posted by: LaPorta on 2021-02-11 11:20:15
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!

Posted by: gcp on 2021-02-13 02:02:35
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'.

Posted by: LaPorta on 2021-02-13 02:04:01
Is the code available? Could become version 0.998!

Posted by: cheesestraws on 2021-02-13 02:07:56
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.

Posted by: superjer2000 on 2021-02-13 04:22:32
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. 

Posted by: gcp on 2021-02-13 04:30:29
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.

Posted by: superjer2000 on 2021-02-13 04:42:52
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.

Posted by: cheesestraws on 2021-02-13 05:08:40
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.

Posted by: Scott Squires on 2021-02-13 13:23:42
Bolo Wireshark Screenshot.PNG

Posted by: Scott Squires on 2021-02-13 13:28:29
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.

Posted by: cheesestraws on 2021-02-13 21:39:04
View attachment 40636


Oh, very nice. 😀

Posted by: Chopsticks on 2021-02-15 18:22:08
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

Posted by: Scott Squires on 2021-02-15 18:46:57
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?

Posted by: LaPorta on 2021-02-15 21:27:37
Sometimes Indy would just dead stop, to my recollection.

Posted by: superjer2000 on 2021-02-16 03:25:30
View attachment 40636
This is super cool!!!!!  For wire shark do you just define how various packets look based on the Includes bytes and then it parses out the packets like this?  I had no idea Wireshark could do this. 

Posted by: Scott Squires on 2021-02-16 07:15:01
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.

< 5