Računari 6 - leto 1985

Besmrtnost i kako je steći

Svi vlasnici kompjutera koji su u bilo kom trenutku bili zaraženi igrama znaju koliko je teško postati majstor neke od njih. Problem je u tome što prve nivoe igre lako savladavamo, a onda nailaze teži problemi za koje uobičajena tri života nisu dovoljna - za trenutak stradamo ne stigavši da upoznamo čak ni probleme koje treba da rešimo. Prinuđeni smo da počnemo od početka i da se dugo i dosadno probijamo kroz poznate ekrane da bismo se samo trenutak igrali na poslednjem. Vrlo su retki autori programa kao što je Moon Rider - po startovanju ovakvih igara na ekranu vidimo meni u kome biramo ekran od koga želimo da počnemo. Podrazumeva se da će svaki pravi haker pokušati da obezbedi sebi ono bez čega su ga autori igre ostavili - besmrtnost.

Dejan Ristanović

Iz stranih i domaćih kompjuterskih časopisa znamo da su se vlasnici Spectrum-a potrudili da otkriju POKE-ove koji u komplikovanim igrama obezbeđuju igraču neograničen broj života. U stranim časopisima posvećenim BBC-ju i Electron-u koje imamo priliku da čitamo (Acorn User, A&B Computing, Beebug i ponekad Micro User) ovakvih POKE-ova nema ni za lek: ili su igre za Acorn-ove računare predobro zaštićene, ili među njihovim vlasnicima nema pravih hakera ili časopisi ne žele da pomažu nepoštenim igračime. Bilo kako bilo, autor ovoga teksta je preduzeo potragu za igračkom besmrtnošću i, uz manje ili veće probleme, došao do nekih zanimljivih rezultata koje bi rado podelio sa ostalim vlasnicima BBC-ja i Electron-a kroz napise poput ovoga. Cilj tih napisa nije da nabrajamo POKE naredbe koje će vam podariti beskonačno života ili ulazak u proizvoljan nivo neke igre (za one koje programiranje ne interesuje, uradićemo i to na kraju teksta) - želimo pre svega da objasnimo kako se takvi POKE-ovi traže i nalaze i tako uputimo vlasnike svih računara u ovaj sport.

Sa kasete na disk...

Stara poslovica kaže da bez alata nema ni zanata - za traženje beskonačnog broja života je vrlo poželjno posedovati solidnu hardversku i softversku opremu, mada će programerska veština dati određene rezultate i bez svega toga. Barem jedna disk jedinica će učiniti da posao obavimo za deset minuta umesto za deset časova. Štampač će olakšati praćenje dugih disasembliranih segmenata programa. Monitor program u ROM-u je praktično neophodan i od njegovog kvaliteta neposredno zavisi uspeh operacije. Potreban je, najzad, brainware koji će izaći na kraj sa zaštitama koje su ugrađene u komercijalne programe na kasetama. Rezultati koje objavljujemo su dobijeni uz pomoć BBC B, 400 KB disk jedinica, komercijalnih monitor programa Gremlin (Computer Concepts) i Exmon II (Beebugsoft), te baterije programa za kopiranje DCOPY domaće izrade.

Prva faza rada obuhvata prebacivanje programa sa kasete na disk i zahteva nešto znanja i dosta iskustva. Prvi problem je čitanje Locked programa sa lažnim load adresama (jedna (prava) load adresa u prvom bloku programa, a druga (lažna) u preostalima). Pošto smo "otključali" program treba da proverimo da li će on raditi u takvom stanju: neki autori su toliko lukavi da u toku inicijalizacije programa provere da li je ovaj pri učitavanju bio zaključan (po učitavanju zaključanog programa ćelije &3CA i &3DF sadrže &81, &258 sadrži 03, segment &3BE-&3C1 sadrži lažnu load adresu programa a segment &3B2-&3BD ime programa koje je, kod Acornsoft-ovih zaštićenih programa, obično neki kontrolni karakter (&0D) koji se na ekranu ispisuje kao upitnik). Ukoliko program ustanovi da je učitan kao otključan, na ekranu će biti ispisano nešto poput Software Protected i sistem će se blokirati. Potrebno je disasemblirati početni deo programa i pronaći mesta na kojima se ispituje odgovarajuća zaštita pa testovima promeniti smisao.

Sledi pravo prebacivanje na disk koje može da stvori daleko više problema od slične operacije na drugim računarima. Memorijska mapa BBC-ja se, na žalost, bitno menja po priključivanju disk jedinica, što uslovljava potrebu za raznoraznim relokacijama programa da bi on radio. Ovim operacijama ćemo se baviti nekom drugom prilikom, pošto želimo da ovaj tekst bude od što veće koristi vlasnicima raznih računara koji žele da se upuste u potragu za besmrtnošću. Pretpostavićemo, dakle, da posedujemo igru na disku koja radi kada otkucamo *RUN ime.

... i dalje

Najjednostavnija potraga koja će dovesti do rešenja u 90% slučajeva je traženje instrukcija tipa LDA #broj-života. Ukoliko u nekoj igri u startu imamo 3 života, pretražićemo kod (tu će operaciju, naravno, sprovesti naš monitor program) i pronaći sve instrukcije LDA #3. Pošto notiramo njihove pozicije, prepravićemo prvih nekoliko ovakvih instrukcija u LDA #4 i startovati program. Postoji nekoliko mogućnosti - ili će se program trenutno srušiti (ova mogućnost je daleko manje verovatna nego što čitajući ovaj tekst mislite; pronašli smo besmrtnost u petnaestak igara a da nam se takav slučaj nije dogodio) ili će raditi manje-više normalno pri čemu ćemo i dalje imati tri života ili će, u najpovoljnijem slučaju, pokazati da imamo četiri života. U poslednjem smo slučaju locirali grupu instrukcija od kojih je jedna ta koja postavlja broj života. Učitavaćemo program nekoliko puta, menjati jednu od fiksiranih instrukcija LDA #3 u LDA #4 i startovati program sve dok ne pronađemo naredbu koja je odgovorna za broj života. Disasembliraćemo njenu okolinu i svakako naći nešto poput:

LDA #3
STA &404

Ovakva sekvenca označava da memorijska ćelija &404 "čuva" broj života. Tada smo vrlo blizu rešenju problema - pretražićemo program i naći naredbu DEC &404 (ili LDA &404 SBC #1). Iza nje svakako sledi neka naredba tipa BNE dalje ili BEQ kraj. U prvom slučaju treba da zamenimo DEC &404 BNE dalje sa JMP dalje NOP NOP a u drugom sekvencu DEC &404 BEQ kraj sa šest NOP-ova. Posle ovoga ćete verovatno imati onoliko života koliko želite.

Ukoliko je posle zamene jedne grupe LDA #3 instrukcija program i dalje davao tri života, pritisnućemo BREAK i nastaviti sa zamenama drugih grupa. Ako se desi da iscrpimo sve LDA #3 instrukcije bez efekata, izgubili smo prvi gem.

Sledeće pretraživanje sprovodimo za instrukcijama tipa LDA #2 - možda se početni život podrazumeva. Njih, kao i u prethodnom slučaju, zamenjujemo sa LDA #3 i startujemo program nadajući se uspehu (sada vidimo zašto je neophodno imati disk - učitavanje programa sa kasete za svaku probu bi izludelo i najzagriženijeg hekera). Ukoliko izgubimo i drugi gem, pokušaćemo da tražimo instrukcije LDX #3 odnosno LDY #3 i da ih zamenjujemo sa LDX #4 odnosno LDY #4 respektivno, nadajući se da je autor programa iz nekih razloga pretpostavljao indeks registre akumulatru. Ukoliko ni ovakva potraga ne da rezultate moraćemo, da ostanemo kod teniskog rečnika, da se pomirite sa gubitkom seta.

Izgubljene bitke i izgubljeni ratovi

Ukoliko ste došli do ove tačke, najbolje je da odustanete od uzaludnog posla i zaboravite igru - dalji rad je težak i mukotrpan i ne garantuje uspeh osim u slučajevima da imate zaista mnogo iskustva u problemima ovoga tipa. Potrebno je da manje ili više shvatite funkcionisanje određenih delova programa obraćajući posebnu pažnju na inicijalizaciju i ispisivanje poruke Game Over. Ukoliko nađete segment naredbi koje ispisuju Game Over, pokušajte da otkrijete odakle se dolazi do njega i tako rešite problem. Ukoliko vaš monitor ne može da nađe string Game Over, vrlo je verovatno da ga je autor programa negde sakrio (npr. povećao ASCII kodove slova za jedan) da bi sprečio ono što upravo radite. Podstrek za dalji rad se može da pruži jedino naša nacionalna osobina nazvana inat - autor ovoga teksta neće skoro zaboraviti četiri dana teškog rada koja su mu bila potrebna za pronalaženje POKE-a za beskonačno života u izvrsnoj igri Eagle Empire.

Pošto ste, uz manje ili više napora, pronašli put ka besmrtnosti, možete da snimite program na disketu tako da po normalnom učitavanju normalno radi a da igrač dobija beskonačno života ukoliko u toku učitavanja drži pritisnut taster SHIFT ili TAB. Pošto ste utrošili nekoliko sati na traženje besmrtnosti, možete da utrošite nekoliko minuta na njenu eksplataciju. Vrlo je verovatno da će vam i igra i besmrtnost vrlo brzo dosaditi i da ćete poželeti da na ovakav način "razvalite" neku drugu igru - to traženje može da bude bolja zabava od svake igre!

Evo, na kraju, i nekoliko rezultata koje možete da primenite pošto su igre na koje se POKE-ovi odnose relativno malo ili nimalo zaštićene.

Snapper za BBC: u drugom delu programa (Snap2) iza *load snapper ubacite ?&1344=&EA:?&1345=&EA.

Planetoid za BBC: u drugom delu programa iza *load planetoid ubacite ?&1D9E=&EA: ?&1D9F=&EA ukoliko želite beskonačno života i ?&1AC9=&EA: ?&1AcA=&EA ukoliko želite i beskonačno bombi.

Positron za BBC/Electron: ?&4967=&EA:?&4968=EA daje beskonačno života.

Killer Gorilla za BBC: četiri NOP-a (&EA) počev od &1E88 daju beskonačno života, dva NOP-a počev od &13E9 daju beskonačno vreme za svaki zadatak.

Chuckie Egg za BBC: na &2A45 treba ubaciti instrukciju JMP &2A70.

Swoop za BBC: na &2500 treba ubaciti JMP &24EB.

Swoop za Electron: na &1B47 i &1B48 treba ubaciti dva NOP-a (&EA).