– Eg måtte bli god på data, slik at eg best mogleg kunne piratkopiere spel og programvare

– Kva tvangs-motiverar neste generasjons EDB-folk til å lære seg meir enn dei må om data? skriver Tor Gjøsæter.

Tor Gjøsæter lærte seg data for å kunne piratkopiere. Hva får neste generasjon til å lære seg data? 📸: Privat / kode24
Tor Gjøsæter lærte seg data for å kunne piratkopiere. Hva får neste generasjon til å lære seg data? 📸: Privat / kode24 Vis mer

Ein byte kan setje seg fast i skallen.

Instruksjonen "4e71" er faktisk to bytes, så to bytes kan faktisk setje seg fast i skallen.

Kvifor snakker me om 4e71?

Jau, nett denne little insktruksjonen representerer ein NOP (No Operation) i 68000-assembler, brukt for å fylle tid, litt som eg driv med no på båten til Bergen.

Grådigheit

Før eg viste om 4e71 var min kunnskap innan EDB meist som ein “knappetrykkar”. Ein som kunne ein del om å trykke på knappar, bytte RAM, doble ram med RAM-doubler, terminere coax nettverk, kopiere ting på ZIP disker og reformatere, som i seg sjølv var ei bragd i de dager.

Eg lærte meg meist mogleg, for eg var grådig, grådig på korleis eg kunne få karra til meg ting.

Eg måtte bli god på data, slik at eg best mogleg kunne piratkopiere spel og programvare.

Difor gleda eg meg særs til å reise på dataleir på Røver utanfor Haugesund ein gong på nittitalet. Det ryktes om twisted pair full-duplex nettverk og lemfeldig deling av Syquest-diskar fulle av spel og .sit-filer.

SyQuest: Breiband før breiband
SyQuest: Breiband før breiband Vis mer

Min far drog meg ikkje til Røvær kun for å piratkopiere, det var også ulike kurs ein kunne delta i under opphaldet.

Macromedia-“utvikling”, om ein skal kalle det det, introduksjon til webserverar med Filemaker, men sist men ikkje minst god gammeldags “hacking”.

Gunny

Røver er og var ein stad der ein gjerne samla opp det forrige generasjon ville kalla “halv-stivingar”. Gutar i hovudsak som ikkje nødvendigvis gjekk på den smale sti, og kunne trenge litt anna motivasjon enn det ein klarte å bringe fram på skulebenken før reform-97.

Gunny var ein av desse, halv-stiv, men hadde funne sitt kall. Eg trur ikkje han var meir enn 15-16 år, men han hadde full kontroll på SerialBox, BBSar, anarchist cookbook, Hotline 1.2.1 og sist men ikkje minst ResEdit.

Hotline, der ein kunne låne software av andre, gjerne over ISDN.
Hotline, der ein kunne låne software av andre, gjerne over ISDN. Vis mer

Så kvifor hadde Gunny kurs i hacking?

Jau, i gamle dagar var ofte spel og shareware skydda av vindauge (pop-ups) der ein måtte skrive inn serienummer. Skreiv ein inn riktig serienummer vart programvaren låst opp og ein kunne bruke det. Heilt utan online kontoar og anna tilhøyrande mas. Dette er vel og bra tenkjer du kanskje, på din moralistiske høge hest.

Problemet mitt var at eg ikkje alltid hadde den meist oppdaterte versjonen av SerialBox, og hadde difor ikkje tilgjengeleg dei ferskaste serienummera. Om det mot formodning skulle dukka opp ein CD med shareware ein hadde særs lyst å utnytte til det fulle, måtte ein trå inn i ResEdit og omgå heile greiene.

ResEdit: Der ein også kunne endre navn i menyar.
ResEdit: Der ein også kunne endre navn i menyar. Vis mer

GoTo

“For no skal du høyre” sa Gunny, på Haugesunds-dialekt, så kanskje meir “No ska dåkker høøøøøyraaaa”, ofte, men ikkje alltid sjølvsagt, var logikken rundt validering av serienummer slik:

  1. Skriv inn serienummer
  2. Sjekk serienummer
  3. Invalid sn: Gå tilbake til input, Valid sn: fortsett kjøring av programmet.

Her kjem alltså 4e71 inn:

Me kan nytte 4e71 til å rett og slett hoppe over validering (eller nulle ut ein goto i slutten av ein if), og ta oss videre i kjøring av applikasjonen.

SerialBox i all si prakt.
SerialBox i all si prakt. Vis mer

Prøv sjølv!

Nedanfor er litt enkel C kode med nokre goto kall. Namngje fila “sn”

#include <stdio.h>
#include <string.h>

int main() {
    char serialNumber[20];

    input:
    printf("Enter a serial number (max 20 characters): ");
    scanf("%s", serialNumber);

    if (strcmp(serialNumber, "12345") != 0) {
        printf("Invalid serial number. Try again.\n");
        goto input;
    }

    printf("Serial number accepted.\n");
    printf("Program terminated.\n");
    return 0;
}

Kompiler galskapen:

clang -Os -g -o sn sn.c

Eller copy pasta inn i Visual Studio Code, sei ja til det meiste og trykk play. I ei mappe ligg då “sn”, kjør ‘./sn’ i terminalen og vipps:

——
tor@Tors-MacBook-Pro-2 kode24 % ./sn
Enter a serial number (max 20 characters): 12345
Serial number accepted.
Program terminated.
——

Hex-editor

Så vert det juicy. Ein opnar dette ei ein hex editor. Og ser etter spesifikke instruksjonar, som vil sjå ut som ein 67XX eller 60XX om ein var på 68000 arkitektur.

No til dags er det meir komplisert, heldigivs kan me nytte KI til å lære gamle hestar nye triks.

Så, etter mykje krangling med Chatgpt om kor enkelt alt var i gamle dager og me berre kunne stappe inn 4e71 willy nilly kom me fram til ein metode for å få dette til å henge saman:

  1. Replace 01010054 at offset 0x16008 with 1F2003D5.
  2. Replace 88FEFF35 at offset 0x16080 with 1F2003D5.
HexFiend: Lar deg gå djupt
HexFiend: Lar deg gå djupt Vis mer

Desse to lokasjonene måtte oppdaterest med den mindre sexy noop “1F2003D5” for arm64. Det som skjer (i følge chatgpt) er at me nooper cbz, cbnz slik at me ikkje hopper til gitt adresse. Om eg hugser Røver rett, var dette mykje enklare i gamle dager, Gunny fekk det til å sjå lett ut.

Så for å kjøre di nyhacka binærfil, og du er på Mac så må du code signe (sjekk keychain for cert) fila etter du har hax0ra den (alt var bedre før sånn sett):

“codesign -s “Ditt Navn (og ein id her)” ./sn “

Og så kjører me ‘./sn” voila. Då vil den etter forsøk nummer to la deg kjøre videre:

——
tor@Tors-MacBook-Pro-2 kode24 % ./sn
Enter a serial number (max 20 characters): 1
Invalid serial number. Try again.
Enter a serial number (max 20 characters): 1
Serial number accepted.
Program terminated.
——

«Så kva vert då 4E71 for denne generasjonen?»

Neste generasjon

Dette, eller då, var ein av mine største motivasjonar for å lære meg meir, for å kunne headshotte Lasse (#shoutout) i Marathon Infinity.

Etter Røvær var det veldig lite av denne type utvikling for min del. Ikkje før omlag 20 år seinare, når eg vart kasta inn i embedded computing på NRF52 plattformen, og me måtte kalle opp register på sjølve eininga på meir eller mindre shady måter.

Det eg undrar på før neste stopp Rubbestadneset er; kva tvangs-motiverar neste generasjons EDB-folk til å lære seg meir enn dei må om data?

Mitt driv var konsum. Så kva vert då 4E71 for denne generasjonen?

Eg trur det er Robux. Korleis kan ein 4E71-e Robux? Spør for eit avkom.