Listelerinizi Koruyun
Retro bilgisayarListelerinizi Koruyun
YAT BA
İndi | ğer BASIC'te program yazıyorsanız ve bu programları başkalarının görmesini istemiyorsanız işiniz zor. Programınızı çok iyi korunmuş bir turboyla kasete kaydetmek sorununuzu çözebilir ama bu durumda, korunmamış kopyasını almayı unuttuysanız başınızı büyük belaya sokarsınız. Bu yazıdaki amacımız BASIC programınızı meraklı gözlerden saklamak (hatta sadece yetkili kişilerin incelemesine izin vermek) için gereken bilgileri size iletmek. Her zaman yaptığım gibi, en basit yöntemleri açıklayarak başlayacağım konuya. Daha sonra BASIC yorumlayıcısının açıklarından yararlanarak bazı karakterleri gizlemenin, ya da satırlardan sonra ekranı temizlemenin nasıl yapılabileceğini anlatacağım. Son olarak da BASIC programlarını listeleyen rutinin bir açık noktasından yararlanarak, BASIC programınızın sadece satır numaralarının görünmesini nasıl sağlayacağınızı anlatacağım. BASIC programını korumak için kullanılabilecek en ilkel yöntem, LIST ve SAVE komutlarının adreslerinin saklandığı vektörleri bozarak bu komutların işlemesini engellemektir. 774 ve 775 adreslerinin değeriyle oynayarak LIST komutunu, 818 ve 819 adreslerinin değerleriyle oynayarak da SAVE komutunu işlemez hale getirebilirsiniz. Ama tahmin edebileceğiniz gibi bu komutları engelleyebilmek için öncelikle programınızın çalıştırılması gerekmektedir. Bunu yapabilseniz zaten POKE 808,225 komutuyla RUN/STOP + RESTORE kombinasyonunu engelleyebilirdiniz. Bu yüzden bu adresleri kullanmayı şimdiden unutsanız da olur.
İyi de nasıl yapacağız?
Bu durumda daha değişik arayışlara girmemiz gerekecek. İlk olarak aklımıza gelebilecek şey, bir makine dili programı ekleyerek (ki bunu bizim için yapacak hazır programlar bulunuyor) programın yüklenir yüklenmez başlamasını sağlamak. Ama demin de söylediğim gibi bu tür programlar sizin de ulaşımınızı engellediği için biraz tehlikelidir. Aynı tehlikeli gruba giren koruma sistemlerinden biri de programınızı COMPILE etmektir. BASIC programı COMPILE ettiğinizde kullandığınız programa bağlı olarak 6510 makine dili veya p-code adı verilen bir kod üretilebilir. Bu kod normal programınızdan hızlı çalışacağı gibi (3-10 kat) BASIC listesinin de bir daha geri gelmemek üzere kaybolmasını sağlar. Bu çeşit bir korumadan sonra herhangi birinin (siz dahil) bu programın listesini alması mümkün olmayacaktır. Ama bunu uygulayabilmek için disket sürücüye sahip olmalısınız. Bu şekilde koruduğunuz bir programın başına bir de şifre koruması ekleyebilirseniz, yetkili olmayan kişilerin programdan uzak kalmasını garanti etmiş sayılabilirsiniz. Bu ekleyeceğiniz şifre korumasının IF A$ = “şifre” THEN ... şeklinde olmamasına dikkat etmelisiniz. En iyisi şifre kelimesini harflere bölüp programın değişik yerlerinde tek tek kontrol etmek olacaktır. Bu şekilde koruduğunuz bir programın şifre korumasını liste alınabilirken bile çözmek oldukça zor olabilir. Programınız çalıştıktan sonra 45-46 değerlerinin sizin bıraktığınızla aynı olup olmadığına da bakabilirsiniz. Bu adresler her zaman BASIC programının bittiği adresi gösterir. Ama bu adresleri kontrol etmek için ekleyeceğiniz her satır bu değerleri değiştireceği için gerçek değerini öğrenmekte oldukça zorlanırsınız. Bu değerleri nasıl öğreneceğinizi size söylemeyeceğim, ama sizin bu işi nasıl yapabileceğinizi öğrenmek istiyorum. Ne olursa olsun benim çözümümü gelecek sayıda öğreneceksiniz.
ROM'u kandırmaya ne dersiniz?
Deminden beri anlatıp durduğum sistemlerde ya programlarınızı bir daha inceleyememe riskini göze alıyorsunuz, ya da belli bir dereceye kadar makine dili öğrenmeniz gerekiyor. Sonuçta sadece BASIC bilenlerin programlarını koruması oldukça zor oluyor. Bilgisayarın BASIC listelerini gösteren rutini incelediğimiz zaman, programlarımızı korumaya yarayacak bazı açıklıklar yakalayabiliriz oysa. Mesela belli bir şekilde belli karakterleri girdiğinizde satırın herhangi bir yerinde bulunan karakterleri silebilir, ya da ekranı hepten temizleyebilirsiniz. Bunun yanında programın listesinin en sonuna tanıtıcı bir sayfa bile ekleyebilirsiniz bu karakterleri kullanarak. Bu karakterlerin ne olduğuna değinmeden önce, BASIC listesine bunları nasıl yaptırabileceğimizi öğrenmemiz yerinde olur: Kontrol karakterlerini eklemek istediğiniz yere ilk olarak bir REM komutu yazın. Sonra iki kere tırnak işareti ekleyin (“ ”) ve ikinci tırnak işaretini silin. Bu sayede tırnak modundan çıkmış olursunuz (yani renk değiştirirseniz, kursor rengi değişir, renk değiştirecek karakter belirmez). Daha sonra CTRL-9 tuş kombinasyonuyla RVS-ON moduna girin. Artık bastığınız tüm harfler negatif olarak (siyah yerine beyaz, beyaz yerine siyah gelecek şekilde) ekrana çıkacaktır. Daha sonra yapmak istediğiniz işlem için gereken tuşları Tablo-1'den seçerek REM” 'ın arkasına ekleyin. Sanırım en iyisi basit bir örnek vermek olacak. Satır numarasını ve REM komutunu silip ekranda sadece bir mesajın görünmesini sağlamak için sırasıyla aşağıdaki işlemleri yerine getirin: 1) 10 REM” ” yazın. 2) İkinci tırnak işaretini silin. 3) CTRL-9'a basarak RVS-ON moduna girin. 4) Yedi defa T tuşuna basın. Ekranda negatif T'ler belirecektir. 5) CTRL-0'a basarak RVS-OFF moduna girin. 6) COMMODORE DERGİSİ yazın ve RETURN'e basın. 7) LIST komutuyla yarattığınız şaheseri görün. Çok eğlenceli değil mi? Ama hemen bilgisayarın başına atlayıp rengârenk bir liste yaratmaya çalışmadan önce yazının kalanını okuyun, yoksa hiçbir şey yapamazsınız. T, yani karakter silme gibi karakterler (ki bunların sayısı çok azdır) doğrudan doğruya çalışabilir. Oysa tüm renk değiştirme kodları, kursor hareketleri, vb. çalışabilmek için kendisinden önce SHIFT-M karakterinin (tabii ki negatif olarak) girilmiş olmasını beklerler. Yani bir alt satıra geçmeden renk değiştirme gibi bir şansınız yok. Tabi ki bu çok yüzeysel bir kısıtlama, çünkü alt satıra inip tüm karakterlerin çalışmasını sağladıktan sonra rahat rahat kursor kontrol kodlarıyla üst satıra çıkıp yazmaya buradan devam edebilirsiniz. Artık TABLO-1'i kullanıp süslü ve gizli listeler yaratmanız mümkün. Bu sistemle renkli, hoş görünüşlü listeler yapabileceğinizi anladınız sanırım. Eminim şimdi de nasıl program koruyabileceğinizi düşünüyorsunuzdur. Çok önemli bilgiler içeren satırların sonuna bir REM” ekleyip buraya bir alt satıra geçme, bir de ekran temizleme karakteri atarsanız bu satırı okumak için oldukça uğraşmanız gerekecektir. Ya da bir sayıyı gizlemek için sayının hemen arkasına bir ekleyip içine REM” ve sayıyı silecek kadar T (RVS-ON) basıp yeni bir sayı ekleyebilirsiniz. Listenizi inceleyen herkes (siz de dahil) buradaki sayının ya da yazının gerçek değerini göremeden üzerine sahtesi basılacaktır.
NORMAL : Beyaz
Alt satır (CR) : Küçük harf : Kursor aşağı : Reverse açık : Kursor sol üst köşeye : Bir Harf sil : Kırmızı : Kursor sağa : Yeşil : Mavi
E H I M N co R S T £ t
COMMODORE( CE )4
— Cyan : Mor
: Küçük-Büyük harf kilitli : Küçük-Büyük harf serbest mak için iki değişik yöntem önerebilirim size: 1. REM” ” yazıp ikinci tırnağı silin. Yedi tane T (RVS-ON) yazmak yerine yedi kere SHIFT-DEL kombinasyonuyla yer açın ve yedi kere DEL'e basın. Bu sayede gerekli kodu bilgisayar sizin için hesaplayacak ve RVS-ON ekrana yazacaktır. Dikkat, yedinci T'yi bastıktan sonra yazılan T'ler silinir, bu yüzden kaç tane INSERT yazdıysanız o kadar DEL yazın. SHIFT-M dışında hemen hemen tüm karakterleri bilgisayara hesaplattırabilirsiniz. Bir kez (RVS-ON) SHIFT-M'ye basın, daha sonra INSERT (SHIFT-DEL) ile bir yer açın. Eğer yazı rengini beyaz yapmak istiyorsanız, bildiğiniz gibi CTRL-1 kombinasyonuna basın. Yazının rengi beyaz olmayacak, ekranda beyazın kontrol karakteri belirecektir. Bu sistemi kullanırsanız sadece bu şekilde yazamayacağınız
SHIFT- : Turuncu : Açık yeşil 1: Alt satır (CR) : Büyük harf : Siyah : Kursor yukarı 1: Reverse kapalı : Ekranı temizle : Araya harf ekle ©: Kahverengi 1 Açık kırmızı : Gri 2 : Açık mavi 3 : Kursor sola :Sarı
DP NSZ
TABLO-1: Listelerinizde istediğiniz işlemleri yaptırmak için
kullanabileceğiniz karakterler.
Eminim TABLO-1'de bulunan tüm karakterleri ezberlemek size çok zor gelecektir. Bundan kurtulmak için karakterleri ezbere bilmeniz yeterli olacaktır (SHIFT-M gibi). 2. REM” yazın. Bu sefer iki tırnak yazıp ikincisini silmeyin ama. Bu sayede bilgisayarınız gene tırnak modunda kalacaktır. Bir kez boşluk tuşuna basın. Şimdi yapmak istediğiniz işlemleri sıralayın (SHIFT-M ve DELETE karakterleri dışındakileri). Bu sefer bütün işlemler kendi karakterini gösterecektir sadece. RVS-ON ve RVS-OFF'u bile kullanabilirsiniz. Daha sonra RETURN'e BASIN, satırı listeleyin, her şey kontrol karakteri olarak görünecektir. Yani henüz işlemlerinizi ekranda göremezsiniz. Şimdi DELETE (RVS-ON T) kullanmak isterseniz istediğiniz kadar INSERT (SHIFT-DELETE) ve bu sayıda DELETE girin. Daha sonra bir boşluk bıraktığınız yere gidin ve bir kez RVS-ON SHIFT-M yazın. LIST dediğinizde yaptığınız her şeyi ekranda görebilirsiniz. Program-1'de bu şekilde düzenlenmiş bir listenin MDE dökümünü bulabilirsiniz (takdir edersiniz ki BDE bu programların listesini çıkaramıyor). Programı MDE ile yazın ve kaydedin. Daha sonra LIST dediğinizde kontrol karakterleriyle yapabileceklerinizin küçük bir örneğini Sondaki RUN'ın üzerine kursor'u nasıl yerleştirdiğimizi de siz bulun artık. Bu sistemi kullanmadan önce programınızı bir yerlere kaydetmeyi unutmayın. Çünkü bu şekilde koruduğunuz ya da düzenlediğiniz programları siz de bir daha inceleyemezsiniz. Yani deminden beri söyleyip durduğum programınızı tehlikeye atma olayı burada da var. Son bir uyarı: Döküm Eki'ne gönderdiğiniz programları sakın bu şekilde korumayın ya da düzenlemeyin. BDE bunları basamadığı için programınız yayınlanmaz!
Ben tehlikesiz koruma istiyorum!
Doğal olarak hepiniz sadece programlarınızı korumak istiyorsunuz. Hem de öyle bir şekilde korumak istiyorsunuz ki, sizden başka kimse programı inceleyemesin. Ama siz istediğiniz anda korumanızı kaldırabilmelisiniz. Bu koruma sistemini gerçekleştirebilirsiniz. Ama yeterli bilgiye sahip olmadığınızı varsayarak ilk ola-
MOD'lar aracılığıyla BASIC'in bellekte nasıl durduğunu incelemekle başlayalım. Bir BASIC programı, 43-44 adreslerinde low-high (alçak-yüksek; $0801 için $01 $08 şeklinde) formatında bulunan adresten başlar. Bu adresten bir önceki adreste bulunan (genelde $0800) değer 0 değilse ne programınız çalışır, ne de NEW komutu işler. (Buradan sonra normalde olduğu gibi 43-44 adreslerinde $0801 olduğunu düşünerek adresleri buna göre ayarlayacağım. Diğer durumlar için biraz kafa yormanız yeterlidir.) $0801-$0802 adreslerinde ikinci satırın başladığı adres alçak-yüksek bayt formatında tutulur. Yani ilk satır $0801-$0812 arasını kaplıyorsa bu iki adres $0813 adresini gösterir. $0803-$0804 adreslerinde satır numarası alçak-yüksek bayt formatında tutulur. Bu sebeple satır numaralarınız 63000'lere kadar çıkabilir. $0805 adresinden sonra BASIC programınızın baytlarına rastlayabilirsiniz. Ama komutlar özel olarak kodlanarak saklanır burada. Yani PRINT komutunu yazıp $0805'ten sonrasını incelerseniz, PRINT'in ASCII kodu olan $50, $52, $49, ...'ya rastlamazsınız. Bunların yerine $99 kodlu tek bir bayt PRINT'i temsil eder. Satır sonunu belirtmek için bir adet $00 kullanılır. İkinci satır bu $00'dan sonra başlar ve aynı yapıya sahiptir. Bu zincirleme liste $00 $00 $00'a rastlanana kadar devam eder. Bu üç sıfır, BASIC programının sonunun geldiğini bilgisayara bildirir. Yani bir satırın yapısını özetlersek: 1. ve 2. bayt: Sıradaki satırın bellekteki yeri. 3. ve 4. bayt: Satır numarası. 5. bayt ve sonrası: BASIC programı ve kodlar. Son olarak da bir adet (son satıra üç) $00. İsterseniz her şeyi bir de örnek üzerinden inceleyelim. Örneğimiz iki satırdan oluşuyor: 10 REM PROGRAM-I 20 PRINT “PROGRAM-I” Programın bellekte nasıl durduğunu görmek için bir göz atın isterseniz. Gördüğünüz gibi ilk iki bayt $0811 adresini gösteriyor ($11 $08). Yani ilk satır $0810'da bitiyor. Ve ilk satır numarası 10 ($0A $00: $000A — 10). Daha sonra REM'in kodu olan $8F geliyor. Bir boşluktan ($20) sonra PROGRAM-I'in ASCII kodları ($50 $52 $4F $47 $52 ...) yer alıyor. Ve $0810'da yer alan $00 ile satır sona eriyor. Aynı yapıyı ikinci satırda da gözlüyoruz. Üçüncü satır adresi olarak $0822 gösteriliyor, satır numarası 20. $0815-$0821 arasında gerekli BASIC kodları yer alıyor. $0821 adresinde yer alan $00 satırın sonunu belirtiyor. $0822 adresinde bulunan $0000 adresi ($00 $00) BASIC programının bittiğini gösteriyor.
Teknik bilgi yeter!
Yapacağımız koruma işlemi aslında daha önceleri de kullanılıyordu. Özellikle SIMONS' BASIC'de istediğiniz satırların başına DISAPA (argo DISAPPEAR — yok ol) yazdıktan sonra, direk modda SECURE 10 yazarak bu satırların satır numarası dışında yok olmasını sağlayabilirsiniz. Ama bu satırları geri almanın yolu yoktur. Gizlenmiş bir satıra bakarsanız (demin anlattığım sistemle) ilk baytının $00 olduğunu görürsünüz. Yani bilgisayar
ÖĞÜT 0809
08
AF A7
06
AR AT
0821 00 00
SET PROGRAM PROGRAM || PROGRAM PROGRAM:PROGRAM SONU
AN
O
SHOPPING yarınızı bariz bir biçimde dolandırıyorsunuz. Programı listelemeye çalışan rutin, buradaki $00'ı görür görmez bu satırın o noktada bittiğini sanıyor ve listelemeye satırın ilk iki baytının gösterdiği adresten devam ediyor. Oysa programı çalıştıran rutin için (RUN) bu bayt, satırın bittiğini ve gelecek dört baytı atlamasını söyleyen bir işaret yalnızca. Yani RUN komutu satır bitince ilk iki baytta gösterilen adresten değil, biten yerin dört bayt ilerisinden devam ediyor programı çalıştırmaya. İşte biz bu noktada olaya el koyacağız. LIST rutininin gösteremediği fakat RUN rutininin çalıştırabildiği satırlar yaratacağız. Bunu yapmak için, gereken satırın başına bir sıfır ve dört gereksiz bayt koyacağız. Bu sıfırı gören LIST rutini doğrudan doğruya diğer satıra atlayacaktır. Oysa RUN rutini sıfırı görünce dört gereksiz baytı atlayacak ve satırı çalıştıracaktır. Bu sayede programımızı meraklı gözlerden gizleyebiliriz. Ama bu işi elle yapmanın (hele uzun programlarda) canınızı çıkartabileceğini düşünerek, size bir de program hazırladım. Program bu gereksiz dört baytı bir şifre olarak kullanıyor ve satırları bu şifreye göre gizliyor. Daha sonra kullanıcı kilitli satırları açması için diğer programı çağırıyor (şifre vererek tabii ki). Eğer bu şifre gizli bir satırdaki şifreyle tutuyorsa bu satır görülebilir hale geliyor. Gerekli incelemeleri yaptıktan sonra tekrar şifre vererek gizleyebilirsiniz bu satırları. Programı kullanabilmek için ilk olarak PROGRAM-?'yi MDE kullanarak yazın ve kaydedin. Daha sonra bilgisayarınızı kapatıp açın ve bu programı yükleyin. NEW dedikten sonra gizlenecek kısımları olan BASIC programınızı yükleyin ve gizlenecek satırların başına yana ok (klavyede sol-üst köşede bulunur) işaretini ve dört adet “iki nokta üstüste” işaretini ekleyin. Bu işlemden sonra programınız çalışmaz, çünkü bu satırlarda SYNTAX ERROR verir. Bu yüzden RUN komutunu kullanmayın. Gerekli satırların hepsinin başı-
na bu beş işareti ekledikten sonra:
SYS49152, “ŞİFRE” komutunu girin. Dikkat: şifre kelimesi dört harften büyük olmasın, problem yaratabilir. Dört harften küçük şifreler kullanabilirsiniz. Artık istediğiniz satırlarınız gizlenmiş olacaktır. İsterseniz bir grup satırı bir şif-
PROGRAM : CO00 COB8
reyle kilitleyebilirsiniz. Bunun sonucunda tüm şifreleri bilmeyen hiç kimse tüm programı göremez. Şifrelenmiş satırları açmak daha da kolay. Şifreyi bilmeniz yeterli bu işi yapmak için. Şifreli programı yükleyip: SYS49155, “ŞİFRE” yazarsanız bu satırlar hiç yok olmamış gibi geri gelecektir (tabii ki şifreyi doğru verdiyseniz). Burada da bir ile dört karakter arasında değişen şifreler kullanmaya dikkat edin. Güvenlik açısından programın tam olarak nasıl çalıştığını açıklamayacağım. Bu yüzden bana çok kızmazsınız umarım.