De auteur beschrijft het proces van het bemachtigen en hacken van een Intellian i4 maritieme schotelantenne. Om de antenne te laten werken zonder boot, simuleerde hij NMEA-gegevens via een microcontroller en een RS-422 module. Door de officiële C#-software te decompileren, slaagde hij erin het communicatieprotocol en de specifieke checksum-berekening te achterhalen, waardoor hij de schotel zelfstandig kon aansturen via Python.
Daarnaast wordt de technische werking van de 'prime focus' reflector en de 'Dynamic Beam Tilting' (DBT) technologie uitgelegd, waarbij een gemotoriseerde sub-reflector kleine bewegingen corrigeert voor een stabieler signaal. Uiteindelijk werd de schotel geplaatst op het dak van NURDspace, gekoppeld aan Gpredict en een tuner, om succesvol satelliet-tv (zoals CGTN HD) te ontvangen.
Het hacken van een maritieme schotelantenne
Tijdens het browsen op Marktplaats stuitte ik echter op iets dat waarschijnlijk nog interessanter was: een maritieme schotel. Een Intellian i4, aangeboden voor ongeveer €200 (terwijl de huidige nieuwprijs rond de €4000 ligt). Ik kocht hem onmiddellijk en werd zo de trotse eigenaar van een stuk maritieme technologie.
In tegenstelling tot de meeste automatische schotels die bijvoorbeeld op campers worden gebruikt, vereist een maritieme schotel een hogere mate van precisie. Dit betekent dat alle motoren in de unit krachtige stappenmotoren zijn. De unit is bovendien uitgerust met een quad-LNB en een bijzondere draaiende reflector.
Het grootste deel van de aansturing van de schotel (behalve de logica voor signaalacquisitie) bevindt zich in een indoor-unit, de ACU (Antenna Control Unit). Gezien de hoge prijs is deze unit voorzien van Ethernet, WiFi en zelfs RS-232.
Hoe werkt het?
Een boot is constant in beweging: hij rolt, pitcht en yawt. De satelliet bevindt zich echter op 36.000 km afstand in een geostationaire baan, wat betekent dat deze op een vast punt aan de hemel staat ten opzichte van de grond. De schotel moet erop gefocust blijven, ongeacht wat de boot doet.
Om dit te bereiken moet de unit drie dingen weten:
- De huidige positie via GPS (er is een GPS-ontvanger ingebouwd).
- De richting waarin de boot wijst (de heading, die door de boot wordt doorgegeven via NMEA).
- Waar de satelliet zich bevindt.
Een boot simuleren
Aangezien ik geen boot heb, was de enige oplossing om te doen alsof ik er een had. Omdat NMEA een tekstgebaseerd serieel protocol is dat gebruikmaakt van RS-422 (differentieel), is dit relatief eenvoudig te implementeren. Met een TTL-naar-RS-422 module en een microcontroller kon ik simuleren dat we ons op een jacht van €130.000 bevonden.
Om de Antenna Control Unit de juiste berekeningen te laten maken, is het voldoende om de volgende regel te versturen: $HCHDG,0.0,0.0,E,0.0,E*checksum
De opbouw van een NMEA-zin:
- Een
$ als startteken.
- Een talker ID van twee letters (bijv.
GP voor GPS en HC voor kompas).
- Een type-aanduiding van drie letters.
- Gegevens gescheiden door komma's.
- Een
* gevolgd door een hexadecimale checksum van twee tekens.
De checksum is een XOR-operatie van alle bytes tussen de $ en de *.
Controle over de antenne
De grote vraag was of ik de schotel zelfstandig kon aansturen. In het begin had ik geen software en kon ik online niets vinden; ik had ook geen toegang tot het partnerportaal van Intellian. Ik heb daarom simpelweg een e-mail naar Intellian gestuurd met de vraag om de software, die ze me vriendelijk toestuurden: de Aptus Controller.
Met deze software kon ik de schotel aansturen, maar ik wilde weten of dit ook zonder de officiële software kon. Ik begon met het 'sniffen' van de communicatie tussen Aptus en de ACU. Het bleek een vrij eenvoudig tekstprotocol te zijn dat eindigt met een checksum:
{XX param1 param2 ... paramN}C
Omdat de Aptus-software in C# is geschreven, kon ik de code eenvoudig decompileren om de exacte werking te achterhalen.
De checksum-berekening
Voor elk teken in het bericht wordt de volgende berekening uitgevoerd: num = (num + char_value - 32) % 95. Het resultaat wordt teruggegeven als een ASCII-karakter op basis van num + 32.
C# implementatie:
public static char UIF_CheckSum(StringBuilder sb, int length)
{
int num = 0;
for (int index = 0; index < length; ++index)
num = (num + sb[index] - 32) % 95;
return (char)(num + 32);
}
Python implementatie:
def uif_checksum(message: str) -> str:
num = 0
for char in message:
num = (num + ord(char) - 32) % 95
return chr(num + 32)
De schotel richten
Het aansturen van de schotel is simpel. Je stuurt het commando GO gevolgd door het azimuth en de elevatie naar de ACU: {GO 16250 2000}
Het valt op dat deze getallen erg groot zijn. In plaats van floats (kommagetallen), die onvoorspelbaar kunnen reageren tussen verschillende compilers en architecturen, wordt alles opgeslagen als integers met een impliciete precisie van twee decimalen. Dit zorgt voor absolute consistentie bij vergelijkingen en is sneller op systemen zonder FPU (Floating Point Unit). Voor maritieme en missiekritische systemen is deze voorspelbaarheid essentieel.
Ontwerp en Dynamic Beam Tilting
De meeste televisieschotels op daken gebruiken een off-axis (of offset) reflector-ontwerp. Hierbij steekt de LNB aan de zijkant uit om te voorkomen dat de LNB een schaduw op de reflector werpt en signaal verspilt.
Deze maritieme schotel gebruikt echter een prime focus ontwerp, waarbij de LNB precies in het centrum zit. Dit is minder gebruikelijk voor consumentenschotels, maar zorgt voor een compactere en symmetrische montage, wat cruciaal is wanneer een schotel op een boot moet kunnen draaien. De schotel is slechts 40 cm groot, maar is door dit ontwerp nog steeds zeer krachtig.
Een extraatje is de gemotoriseerde sub-reflector tussen het schoteloppervlak en de LNB. Dit maakt deel uit van de Dynamic Beam Tilting (DBT) technologie van Intellian. In plaats van constant de grote stappenmotoren te gebruiken om elke golfbeweging te corrigeren, past de sub-reflector zich continu aan om de straal op de satelliet te houden. De hoofdmotoren voeren alleen de grote correcties uit, waardoor het systeem stiller en responsiever is.
Praktische toepassingen
Eerst schreef ik een script dat tussen de ACU en Gpredict zat, waardoor de schotel verscheen als een generieke rotator. Hiermee kan de schotel satellieten volgen die niet in een geostationaire baan staan. Omdat de feed van deze schotel alleen voor de Ku-band is, heb ik dit nog niet uitgebreid getest.
Nadat de schotel op het dak van NURDspace was geplaatst, kreeg ik van een andere hacker wat extra materiaal: 75 ohm bekabeling en een Digibit R1. Samen met een Dreambox DM800 dienden deze als tuner om televisiezenders te ontvangen.
De eerste succesvolle lock was een geweldig gevoel; we stemden af op Astra 1P (19.2°E), waar we de Chinese zender CGTN HD konden ontvangen. Het idee dat ik thuis satelliet-tv kan kijken, rechtstreeks vanuit de ruimte en ontsloten via Wireguard, is een prachtig voorbeeld van hoe geweldig technologie kan zijn.
Het hacken van een maritieme schotelantenne
Tijdens het browsen op Marktplaats stuitte ik echter op iets dat waarschijnlijk nog interessanter was: een maritieme schotel. Een Intellian i4, aangeboden voor ongeveer €200 (terwijl de huidige nieuwprijs rond de €4000 ligt). Ik kocht hem onmiddellijk en werd zo de trotse eigenaar van een stuk maritieme technologie.
In tegenstelling tot de meeste automatische schotels die bijvoorbeeld op campers worden gebruikt, vereist een maritieme schotel een hogere mate van precisie. Dit betekent dat alle motoren in de unit krachtige stappenmotoren zijn. De unit is bovendien uitgerust met een quad-LNB en een bijzondere draaiende reflector.
Het grootste deel van de aansturing van de schotel (behalve de logica voor signaalacquisitie) bevindt zich in een indoor-unit, de ACU (Antenna Control Unit). Gezien de hoge prijs is deze unit voorzien van Ethernet, WiFi en zelfs RS-232.
Hoe werkt het?
Een boot is constant in beweging: hij rolt, pitcht en yawt. De satelliet bevindt zich echter op 36.000 km afstand in een geostationaire baan, wat betekent dat deze op een vast punt aan de hemel staat ten opzichte van de grond. De schotel moet erop gefocust blijven, ongeacht wat de boot doet.
Om dit te bereiken moet de unit drie dingen weten:
- De huidige positie via GPS (er is een GPS-ontvanger ingebouwd).
- De richting waarin de boot wijst (de heading, die door de boot wordt doorgegeven via NMEA).
- Waar de satelliet zich bevindt.
Een boot simuleren
Aangezien ik geen boot heb, was de enige oplossing om te doen alsof ik er een had. Omdat NMEA een tekstgebaseerd serieel protocol is dat gebruikmaakt van RS-422 (differentieel), is dit relatief eenvoudig te implementeren. Met een TTL-naar-RS-422 module en een microcontroller kon ik simuleren dat we ons op een jacht van €130.000 bevonden.
Om de Antenna Control Unit de juiste berekeningen te laten maken, is het voldoende om de volgende regel te versturen: $HCHDG,0.0,0.0,E,0.0,E*checksum
De opbouw van een NMEA-zin:
- Een
$ als startteken.
- Een talker ID van twee letters (bijv.
GP voor GPS en HC voor kompas).
- Een type-aanduiding van drie letters.
- Gegevens gescheiden door komma's.
- Een
* gevolgd door een hexadecimale checksum van twee tekens.
De checksum is een XOR-operatie van alle bytes tussen de $ en de *.
Controle over de antenne
De grote vraag was of ik de schotel zelfstandig kon aansturen. In het begin had ik geen software en kon ik online niets vinden; ik had ook geen toegang tot het partnerportaal van Intellian. Ik heb daarom simpelweg een e-mail naar Intellian gestuurd met de vraag om de software, die ze me vriendelijk toestuurden: de Aptus Controller.
Met deze software kon ik de schotel aansturen, maar ik wilde weten of dit ook zonder de officiële software kon. Ik begon met het 'sniffen' van de communicatie tussen Aptus en de ACU. Het bleek een vrij eenvoudig tekstprotocol te zijn dat eindigt met een checksum:
{XX param1 param2 ... paramN}C
Omdat de Aptus-software in C# is geschreven, kon ik de code eenvoudig decompileren om de exacte werking te achterhalen.
De checksum-berekening
Voor elk teken in het bericht wordt de volgende berekening uitgevoerd: num = (num + char_value - 32) % 95. Het resultaat wordt teruggegeven als een ASCII-karakter op basis van num + 32.
C# implementatie:
public static char UIF_CheckSum(StringBuilder sb, int length)
{
int num = 0;
for (int index = 0; index < length; ++index)
num = (num + sb[index] - 32) % 95;
return (char)(num + 32);
}
Python implementatie:
def uif_checksum(message: str) -> str:
num = 0
for char in message:
num = (num + ord(char) - 32) % 95
return chr(num + 32)
De schotel richten
Het aansturen van de schotel is simpel. Je stuurt het commando GO gevolgd door het azimuth en de elevatie naar de ACU: {GO 16250 2000}
Het valt op dat deze getallen erg groot zijn. In plaats van floats (kommagetallen), die onvoorspelbaar kunnen reageren tussen verschillende compilers en architecturen, wordt alles opgeslagen als integers met een impliciete precisie van twee decimalen. Dit zorgt voor absolute consistentie bij vergelijkingen en is sneller op systemen zonder FPU (Floating Point Unit). Voor maritieme en missiekritische systemen is deze voorspelbaarheid essentieel.
Ontwerp en Dynamic Beam Tilting
De meeste televisieschotels op daken gebruiken een off-axis (of offset) reflector-ontwerp. Hierbij steekt de LNB aan de zijkant uit om te voorkomen dat de LNB een schaduw op de reflector werpt en signaal verspilt.
Deze maritieme schotel gebruikt echter een prime focus ontwerp, waarbij de LNB precies in het centrum zit. Dit is minder gebruikelijk voor consumentenschotels, maar zorgt voor een compactere en symmetrische montage, wat cruciaal is wanneer een schotel op een boot moet kunnen draaien. De schotel is slechts 40 cm groot, maar is door dit ontwerp nog steeds zeer krachtig.
Een extraatje is de gemotoriseerde sub-reflector tussen het schoteloppervlak en de LNB. Dit maakt deel uit van de Dynamic Beam Tilting (DBT) technologie van Intellian. In plaats van constant de grote stappenmotoren te gebruiken om elke golfbeweging te corrigeren, past de sub-reflector zich continu aan om de straal op de satelliet te houden. De hoofdmotoren voeren alleen de grote correcties uit, waardoor het systeem stiller en responsiever is.
Praktische toepassingen
Eerst schreef ik een script dat tussen de ACU en Gpredict zat, waardoor de schotel verscheen als een generieke rotator. Hiermee kan de schotel satellieten volgen die niet in een geostationaire baan staan. Omdat de feed van deze schotel alleen voor de Ku-band is, heb ik dit nog niet uitgebreid getest.
Nadat de schotel op het dak van NURDspace was geplaatst, kreeg ik van een andere hacker wat extra materiaal: 75 ohm bekabeling en een Digibit R1. Samen met een Dreambox DM800 dienden deze als tuner om televisiezenders te ontvangen.
De eerste succesvolle lock was een geweldig gevoel; we stemden af op Astra 1P (19.2°E), waar we de Chinese zender CGTN HD konden ontvangen. Het idee dat ik thuis satelliet-tv kan kijken, rechtstreeks vanuit de ruimte en ontsloten via Wireguard, is een prachtig voorbeeld van hoe geweldig technologie kan zijn.