Evet, bugün hep birlikte Lale Savaşçılarını kırıyoruz arkadaşlar, disketlerimizi alıyoruz ve kırıyoruz, bakın burda kırılmışı var:
Aslında maceranın başı Umut Tarlaları'na dayanıyor. Başta uğraştığım şey umut tarlalarını tek diske sığdırmaktı ve başardım. Evet arkadaşlar, bazı fedakarlıklar yaparak umut tarlaları tek diskte dağıtılabilirmiş. Örnek, intro yok, med-res çözünürlükteki gazete sayfalarını 2 renge indirmek.
Tek diske inen oyun direkt olarak bu ekrana geçiyor denebilir.başka örnek, Sadece 8 renk kullanılmış olan oyunun açılış ekranını 32'den 8 renge indirmek gibi (o ekranda bir zorluk derecesi slider'ı var, kırmızıdan sarıya gidiyor. 8 renge indirince o slider renkleri saçmalıyor tabi), oyunda görüntülenmeyen ama diskette yer var diye konmuş krobb grafiğini diskten çıkarmak.
Krobb'u sordum tabi, ve fikir aşamasından ileri geçememiş bir puzzle oyunu olduğunu öğrendim.Neyse, bu kesintiler yardımıyla UMT tek diske sığdıktan sonra domino'nun da uyarmasıyla bunu şimdilik dağıtmak istemediğime karar verdim, iki sebepten, birincisi oyunun kümülatif deneyimi ciddi sekteye uğruyordu, ikincisi zaten bu uğraş bir "acaba mümkün mü?" durumundan ibaretti. Sonra acaba introyu da iyice sıkıştırıp diskin bir yerine sokuşturabilir miyim diye çalışmaya başladım--modern sıkıştırma algoritmaları falan var günümüzde sonuçta, diskleri olduğu gibi ziplerseniz 750kb tutuyor, teorik olarak mümkün.
Bu sırada daha önce Siliconworx IRC kanalında bir hayli sürtmüştüm, (freenode.org sunucularında bir kanalları vardı), bu sefer facebook gruplarına dadandım, benden illallah demişlerdir herhalde. Birtakım sorularla başlarını ağrıtırken İstanbul Efsaneleri disk imajlarını güzelce paketlediklerini gördüm ve indirdim. Bu diskler zaten birçoğumuzda var, ama kendileri resmen dağıtınca daha bir güzel oluyor. Neyse, UAE ile deneyince bir baktım hala şifre soruyor. Bunu görünce Umut Tarlalarını anında unuttum. Zaten kırılmamış oyun bulmak çok zor, nadide bir eser, hem de dişime göre.
WinUAE ile oyun kırmak kolay. Küçük bir amiga oluşturup (minimum ram, minimum donanım) belleğini kurcalamak yeterli. Daha önce yaptığım üzere bunu da halletmek istedim.
Oyunu yükledim, şifre sorunca herzamanki taktiğimi yaptım, şifreye abuk subuk bişeyler yazmak mesela "asd123" gibi. Sonra debugger'ı açtım (shift+F12) yazdğım yazıyı bellekte arattım: s "asd123"
tek bir lokasyon çıktı. Oraya göz atıca m <adres> kendi uyduruk şifrem ve bu şifre ile karşılaştırıldığı için karşısında doğru cevap yazıyordu: "tavsiye". Böylece ilk doğru şifreyi ele geçirmiş oluyorsunuz. Sonra s "tavsiye" yazınca, 4-5 farklı yer çıkıyor, hepsine tek tek bakınca bir noktada tüm şifrelerin tutulduğu yeri buluyorsunuz. Sonra tek yapmanız gereken bu stringleri 0byte uzunluğa indirmek. Böylece hiçbirşey yazmadan şifre geçilebiliyor. (not. shift+f12'de gui debugger için xx komutu, çıkmak için x komutu vermeniz gerekiyor)
Her zaman bu kadar kolay olmuyor elbette. Ki bu sefer de asıl problem şifreleri bulmak değil, pakedi açmak oldu. Yukarıdaki stringleri 0byte'a indirme işini ram'de yapmanın bir anlamı yok, asıl olay dosyayı yamalamak. Böylece sizden başkası da crack'i kullanabilir. Dosyayı yamalamak için ise dosyanın ham haline ulaşmanız gerekiyor.
Yamalamam gereken dosya, amos'a özgü bir "zip"in içinde duruyordu. Ne kadar karmaşık olabilir ki? Bir tür RLE olmalı diye araştırmaya koyuldum ve tek ulaştığım şey AMOS compiler kaynak kodundaki
sıkıştırma koduydu.
Fakat, Umut Tarlaları AMOS 1.3 Creator ile yazılmıştı, Lale Savaşçıları ise Amos Pro 2.0 ile yazılmış. Amos Pro dosyayı compile ettikten sonra yeni bir tür algoritma ile sıkıştırma özelliğine sahip. Önce standard bir sıkıştırma olabilir mi diye standard exe paketleyicileri denedim ve malesef başarısız oldum. (AmosPro'da Amiga'nın en poüler exe paketleyicisi olan powerpacker için kütüphaneler mevcut olmasına karşın bu da kullanılmamış. Belki oyunun yapıldığı zamanda dökümantasyon eksiği vardı ya da extension henüz yazarlara ulaşmamış olabilir)
Internette araştırmaya başladım, stackexange'de bile amos exe'leri nasıl unpack edebilirim? soruları vardı, fakat cevap yoktu. Amos niş bir dil, belli ki bununla uğraşan pek olmamış. Ama, neyseki AmosPro kaynak kodları ortalıkta geziyordu. Hemen repoya danıştım, biraz kurcalama ile aradığım kod parçasını 1060 numaralı satırdan başlayacak şekilde buldum:
https://github.com/AMOSFactory/AMOSProfessional/blob/original/%2Bheader.s Fakat küçük bir sorun vardı, 68k asm'den pek anladığım söylenemez. Evet daha önce seka, devpac vb kurup denemeler yaptığım oldu ama artık beynim herşeyi tutamıyor, ve şu anda bomboştu. Commodore'cu arkadaşlar sayesinde bazı komutları unutmuyorum ama 68k biraz büyük boy bir işlemci. Yetmezmiş gibi amiga multitask bir işletim sistemine sahip, 68k da bunu destekleyecek şekilde tasarlanmış. Kod kümeleri bellekte yer değiştirebiliyor ve buna göre zıplama dallanma, hafıza transferi işlemleri otomatik olarak bu rölatif konuma göre düzeltiliyor. Bu da debugging'i çok zor hale getiriyor. Önce unsquash'ı anlamaya koyuldum:
Önce başucu kitabımız, motorola referans kılavuzu (PRM):
buradan indrebilirsiniz pdfBoşuna başka kaynak aramayın, hepsi boş iş. Bunla başlıyor bunla bitiyor arkadaşlar.
Ama şurda güzel bir girişim var:
http://mrjester.hapisan.com/04_MC68/Gerçekten de z80/sinclair ile karşılaştırınca amiga dökümantasyonu göz yaşları içinde kalıyor. 6502/C64 ile karşılaştırmaya gerek bile yok sanırım.
Z80 olsa iş çoktan bitmişti. Neyse bu 1-2 saati böyle yedikten sonra Unsquash'ın ne yaptığını anladım. Sonra UAE debuggerı ile gerçekte ne yaptığını gözlemledim. Hep aynı şikayet ama, UAE'nin debugger'ını zaten Toni Willen yazmamış, ve eabdeki yazışmalarımızda "Abi ben hiç kullanmadım debuggerı, nasıl çalışıyor bilmiyorum" şeklinde bir durum mevcut. Zaten zor olan debugging bayaa çetrefilli bir hal alıyor. Tamam unsquash'ın ne zaman ne yaptığını öğrendim, dosyanın bellekte açılmış imajına ulaştım ama daha önce bahsettiğim rölatif adresleme (supervisor mode/effective address) işi yüzünden bu imajı sanal amiganın belleğinden alıp tekrar exe dosyası haline getirmek mümkün olmuyor maalesef. Oluyorsa da ben bilmiyorum nasıl yapıldığını.
Ben de, "sadece unquash'ı kodunu işleteceğim zaten, bir 68K simülatörü mü denesem?" Şeklinde arayışa koyuldum.
Birkaç tane var, en iyisi
http://www.easy68k.com/ adresindeki, Easy68K simülatörü. Abi yapmış. Ama malsef amosdaki unsquash kodunu işletsem de dosyayı işlemeyi başaramadım. Çünküü, HUNK yüzünden!
Evet, elbette, amiga'nın kendi dosya sistemi vardı. Aslında komplike bir sistem değil. Amiga disk dosyalama sistemi günümüz video container'lerine çok benziyor. Buna göre her dosya HUNK denilen kümelerden oluşuyor ve bu kümelerin 15-20 tane türü var. İşte data kümesi, header kümesi, exe kümesi vb. Çünkü bir dosya açıldığında o kümenin chip ram'e mi, fast ram'e mi konacağı, bu küme ne işe yarar, neyin parçası önceden belli, bunlar da HUNK özelliklerinde tutuluyor. NEyse açtık bunu da okuduk
http://amiga-dev.wikidot.com/file-format:hunkNeyse ki aminet hunk araçları ile kaynıyor, burda sıkıntı yok:
https://aminet.net/search?query=hunkBen burdan 5-10 utility denedim, biri tam istediğim gibi hunkları tüm propertyleri ile dump edebiliyordu, onu kullandım şu anda hangisiydi açıp bakamıyorum, kullandım ve unuttum, ama bu kısım basitti. UAE'den takip ettiğim kadarıyla şifrelerin tutulduğu "hunk" dosyadaki ilk hunk. Bunu önce açmalıyım (unsquash), sonra stringleri sıfırlamalıyım, ve tekrar paketlemeliyim ve yerine koymalıyım. Bunun işleyeceğinden de emin değilim hani.
Fakat elimde henüz bir unsquash programı yok, easy68k da hayalimdeki kolaylığı sağlamamıştı. AmosPro reposundaki koddan başka birşey yok daha doğrusu. Aslında az gittim uz gittim dere tepe düz gittim ama bir arpa boyu yol aldım. Artık amos exe'lerini unsquash eden bir program yazma zamanı gelmişti. Bu işler için c# kullanıyorum. Sebep? Yıllar boyu kendi küçük kod kütüphanemi oluşturmuş durumdayım. Dosya okuyucular, parse ediciler vb. birçok şeyi baştan yazmam gerekmiyor, eski kodları bir araya getirerek iş görüyorum. Tabiiki amaç belliydi, 68000 asm halindeki Unsquash kodunu c# haline getirmek. Başladım PRM'i hatim etmeye. Sonra bir ara zihni sinir kimliğim açığa çıktı ve dedim ki, ya burda topu topu 20-25 tane asm kodu var. Ben bu algoritmayı çözmeye çalışacağıma, bu komutları simüle edeyim bakalım ne olacak
İnsan bazen saçmalıyor işte.
Başladım PRM'den bakıp bakıp kendi simülatörümü yazmaya
Bakıyorum kimler ne yapmış diye. Önce biri mutlaka bir c# çekirdeği yazmıştır diye arattım, Moo68K çıktı:
https://github.com/dd86k/Moo68k/tree/master/Moo68kNe sevindim anlatamam. Hemen daldım ama bir baktım projede hiçbir gelişme yok. Registerleri tanımlayıp bırakmış, komutların içleri hep boş.
ARM'ın şahane bir 68k çekirdeği vardı:
https://github.com/notaz/cyclone68000 bu telefonlarınızdaki sega, amiga vb tüm emülatörler bunu kullanır, her tür dökümante edilmemiş tuhaf garip davranışları destekleyen bir çekirdek. gp32 zamanı bununla denemeler yapmıştım. Fakat şimdi aşmış gitmiş, boş boş bakakaldım. Baktım böyle olmayacak. İş başa düştü.
neyse ben oturup kendi özgün (uydurmasyon) yöntemle mini-simülatörümü yazmaya başladım.
Yanlış anlaşılmasın, bu tam bir simülatör sayılmaz. Sadece bana lazım komutların bana lazım türevlerini taklit eden fonksiyonlar bütünü
Ordan al, buraya koy, haa bak 68K'da Stack Pointer yokmuş amk, MOVE ile MOVEA arasındaki fark ne? Meğer A7 ile SP aynıymış, MOVE.L SP, d3 görünce anla ki aslında o MOVE.L A7,D3 olacak falan derken komutarı dizdim. Ha bu işlemi yaparken unsquash'ın da ne yaptığını çözdüm orası ayrı. Sadece bu yeterli gelmedi, neyse ki squash kodunu çağıran rutin zaten amos ile yazılmıştı ve biraz geç oldu ama rutinin gerçek çalışma şeklini tam olarak anlamamı sağladı. Ama oldu, evet başardım. Çıkan ürün plug-and-play değil tabi, ama datayı bir şekilde unsquash etmeyi başardım.
Amos yarı-basic/yarı-asm ile yazılmış squash rutiniStringleri patch'ledim, ama bidakka
Geri nasıl sıkıştırıcam bunu? Hayır hayır, bununla daha fazla uğraşamazdım tabi. Tüm paket açıldığında 130KB'lık dosya 350kb'a uzuyor. Fakat diskte 150kb'lık yer var. Neyse, iş sonunda dosyadaki tüm HUNK'ları unsquash edip, sonra hepsinden yeni bir dosya oluşturup, sonra bu dosyayı da imploder ile sıkıştırdım. eskisinden de küçük oldu (libs klasörüne 2kb'lık bir kütüphane eklenmek zorunda kaldı tabi).
Sonra denedim crack başarılı, oyuna giriliyor. Giriliyor da oyun çok acımasız. Siliconworx ciddi misiniz?
Oyuna başladığınız gibi bir köpek size saldırıyor. Eğer karakter yaratma ekranında 1-2 saat boyunca zar atıp şahane karakterler yaratmadıysanız bu köpecik ekibin çoğunu öldürüyor. Gerçekten oyunda ilerlemek için 1-2 saat uğraştım. En dost canlısı oyun diyemeyeceğim. Aslında itiraf edeyim, izometrik görüntü ve beholder tarzı dungeon crawling vb çok etkileyici, ama küçük bir oyun olduğu çok belli. Oyunun içine doğru 20 dakikalık bir yolculuk yaptım ve sonra benden bu kadar diyerek Lale Savaşçılarının yanına da bir tik atıp bucket list'imden çıkardım.
Ha, aslında bizim için bu crack'e hiç gerek yoktu. Çünkü oyunun kullanma kılavuzu internette (ve bizim e-kütüphanemizde) mevcut. Örneğin şu sayfaya giderseniz:
https://retrojen.org/lib/mag/reforizer.php?mag=Lale-Savascilari-Maceracinin-El-Kitabi-Amiga&issue=00&pageno=35"kareyi" kelimesinin altıın çizili olduğunu görebilirsiniz. Bu oyunda sorulan bir şifre. Disketlerin orjinalini istiyorsanız, onları
şurdan indirebilirsiniz. Bu durumda e-kütüphanedeki pdf'i de indirmenizi öneririm.
Disklerin kırılmış halleri ise burada. Eh tabi başına bir ascii art koymadan olmuyor. Henüz cracktro teknolojisine ulaşamadık, imploderden sonra diskte 50 kb'lık yer açılmasına karşın burda bıraktım
Lale Savaşçıları Kopya Koruması Kırılmış Sürüm 2 adet ADF dosyası