Müthiş. Kıran arkadaş keşke nasıl bir yol izlediğine dair bilgilendirme yapsaydı
Sadece kırılması değil jenerik ekranına orijinaline sadık biçimde Cracked ekstrasının eklenmesi de çok iyi.
Claude sayesinde kırılmamış Türkçe oyun kalmayabilir gerçekten de.
Sadece kırılması değil jenerik ekranına orijinaline sadık biçimde Cracked ekstrasının eklenmesi de çok iyi. Claude sayesinde kırılmamış Türkçe oyun kalmayabilir gerçekten de.
Evet oyun Claude ile kırılmış.
Alıntı
1. Disk yapısını çözmek
ADF'nin 160 track'i var (her biri 5632 bayt). Dolu olanlar 0–101, 102–159 boş. Bootblock'u (track 0) disassemble edince şu zinciri gördüm:
Bootblock, track 0'ı $20000'a yükleyip içindeki küçük ByteKiller tarzı decruncher'ı ($20100) çalıştırıyor.
Bununla açılan ikinci aşama (stage 1) da track 1'deki paketi $C0 adresine açıyor. Ben buna "kabuk" diyorum: PRODOS ekranı, yükleyici, kopya kontrolü hep bunun içinde.
Kabuk sırayla şunları yüklüyor:
Blok Track'ler Boyut (açılmış)
INFO 2– 201.746 bayt
INTRO 16– 290.576 bayt
GAME 50–95 399.556 bayt
Final ekranı 96– 46.768 bayt
Decruncher'ı Python'a taşıdım. INFO, INTRO ve final bloğu doğrudan açıldı.
2. Koruma nerede
Kabuktaki "BU OYUN ORIJINAL DEGILDIR" mesajının çağrıldığı yer $CD4. Oraya giden rutin $BF6: kafayı bir track'e götürüp üç kez okuyor. $D72'deki arama kodu hedef olarak $A4 = 164 (yarım adım) kullanıyor, yani silindir 82. Bu, UAE'de sizin gördüğünüzle uyumlu. Silindir 82, ADF'nin 0–159 numaralamasının dışında kalıyor.
Düzeltme: Üç okumanın ikisi özel sync ($B529), biri standart sync ($4489) kullanıyor. "Üçü de özel sync" demiştim, yanlıştı.
Üç okumanın sonucu karşılaştırılıyor ve uyuşmazsa kopya mesajıyla takılıyor. Uyuşursa okunan veriden 16 bitlik bir değer çıkıp $D70'e yazılıyor. Bu değer GAME bloğunun ilk $1600 baytının şifresini çözen anahtarın parçası.
İkinci bir koruma daha var: sayı soran, "ŞİFRE:" isteyen bir kontrol. Girilen değer anahtara bir bayt ekliyor.
3. Anahtarı bulmak
Silindir 82'yi okuyamadığım için anahtarı doğrudan hesaplayamadım. Onun yerine tahmin ettim:
GAME'in ilk $1600 baytı, 16 bitlik bir anahtarla 2'şer bayt XOR'lanmış.
65.536 anahtarı denedim. Çözülmüş başlıkta paket/açılmış boyut mantıklı çıkan ve tam decrunch'ı hatasız biten anahtar tek bir tane çıktı: 0x874B.
Çözülen 399.556 baytlık oyunun başı gerçek 68000 koduna benziyor (bsr, move.w #1, ...).
Bunun kesin kanıtı yok; dayanağım benzersiz çıkması ve çıktının geçerli kod olması.
4. Yama
Bootblock'taki "ACE ACE..." dolgu alanını kullandım ($20074). Ayrıca jmp $C0'ın adres operandını kancama yönlendirdim. Kanca, kabuk açıldıktan sonra üç yerde RAM'de yama yapıp $C0'a atlıyor:
$304: bsr.w $BF6 (silindir 82 kontrolü) → 2 adet NOP.
$33C: şifre sorma kısmı atlanıyor. moveq #0,d0, move.w #$874B,d1 ve bra.s $3B2. Şifre çözme döngüsü artık sabit anahtarla çalışıyor.
$3D0: ekran satırını 3 geri çeken komut → NOP. Bu sadece görünüm düzeltmesi.
Sonra bootblock checksum'ını yeniden hesapladım. Kickstart bunu kontrol ediyor.
Düzeltme: "Disk verisine dokunmadım" dedim, ama 91 bayt değişti: hepsi bootblock'ta (yama + checksum). INFO, INTRO, GAME ve final blokları birebir aynı.
5. Neyi doğruladım, neyi doğrulamadım
Doğruladım (Unicorn ile 68000 CPU emülasyonu):
Bootblock'un kancayı çalıştırıp kabuğa üç yamayı RAM'de bire bir beklenen şekilde uyguladığını.
Yamalı kodun GAME'in ilk $1600 baytını benim bulduğum anahtarla doğru çözdüğünü.
Kabuğun kendi decruncher'ının, yamalı akıştan benim Python çıktımla bire bir aynı 399.556 baytı ürettiğini.
Doğrulamadım:
Gerçek Amiga donanımı veya WinUAE/FS-UAE: DMA, copper, ses, Kickstart'ın önyüklemesi bu emülasyonda yok. Oyunun sonuna kadar oynandığını da bilmiyorum.
Gotek'te çalıştığını.
Oyunun başka yerlerde (oyun içinde, seviye geçişlerinde) ek bir kontrol yapıp yapmadığını. Açılmış GAME, INTRO, INFO ve final bloklarında $D70, $18AE gibi koruma değişkenlerine referans aramadım sayılır. Sadece belirli adres kalıplarını taradım ve bulamadım, ama bu kesin kanıt değil.
İlk denemeniz için WinUAE'de A500/OCS ve 512 KB chip RAM önerim. Bir yerde takılırsa ekranda ne yazdığını veya ne olduğunu bana yazın. (Retrojen forumundan alıntıdır)
ADF'nin 160 track'i var (her biri 5632 bayt). Dolu olanlar 0–101, 102–159 boş. Bootblock'u (track 0) disassemble edince şu zinciri gördüm:
Bootblock, track 0'ı $20000'a yükleyip içindeki küçük ByteKiller tarzı decruncher'ı ($20100) çalıştırıyor.
Bununla açılan ikinci aşama (stage 1) da track 1'deki paketi $C0 adresine açıyor. Ben buna "kabuk" diyorum: PRODOS ekranı, yükleyici, kopya kontrolü hep bunun içinde.
Kabuk sırayla şunları yüklüyor:
Blok Track'ler Boyut (açılmış)
INFO 2– 201.746 bayt
INTRO 16– 290.576 bayt
GAME 50–95 399.556 bayt
Final ekranı 96– 46.768 bayt
Decruncher'ı Python'a taşıdım. INFO, INTRO ve final bloğu doğrudan açıldı.
2. Koruma nerede
Kabuktaki "BU OYUN ORIJINAL DEGILDIR" mesajının çağrıldığı yer $CD4. Oraya giden rutin $BF6: kafayı bir track'e götürüp üç kez okuyor. $D72'deki arama kodu hedef olarak $A4 = 164 (yarım adım) kullanıyor, yani silindir 82. Bu, UAE'de sizin gördüğünüzle uyumlu. Silindir 82, ADF'nin 0–159 numaralamasının dışında kalıyor.
Düzeltme: Üç okumanın ikisi özel sync ($B529), biri standart sync ($4489) kullanıyor. "Üçü de özel sync" demiştim, yanlıştı.
Üç okumanın sonucu karşılaştırılıyor ve uyuşmazsa kopya mesajıyla takılıyor. Uyuşursa okunan veriden 16 bitlik bir değer çıkıp $D70'e yazılıyor. Bu değer GAME bloğunun ilk $1600 baytının şifresini çözen anahtarın parçası.
İkinci bir koruma daha var: sayı soran, "ŞİFRE:" isteyen bir kontrol. Girilen değer anahtara bir bayt ekliyor.
3. Anahtarı bulmak
Silindir 82'yi okuyamadığım için anahtarı doğrudan hesaplayamadım. Onun yerine tahmin ettim:
GAME'in ilk $1600 baytı, 16 bitlik bir anahtarla 2'şer bayt XOR'lanmış.
65.536 anahtarı denedim. Çözülmüş başlıkta paket/açılmış boyut mantıklı çıkan ve tam decrunch'ı hatasız biten anahtar tek bir tane çıktı: 0x874B.
Çözülen 399.556 baytlık oyunun başı gerçek 68000 koduna benziyor (bsr, move.w #1, ...).
Bunun kesin kanıtı yok; dayanağım benzersiz çıkması ve çıktının geçerli kod olması.
4. Yama
Bootblock'taki "ACE ACE..." dolgu alanını kullandım ($20074). Ayrıca jmp $C0'ın adres operandını kancama yönlendirdim. Kanca, kabuk açıldıktan sonra üç yerde RAM'de yama yapıp $C0'a atlıyor:
$304: bsr.w $BF6 (silindir 82 kontrolü) → 2 adet NOP.
$33C: şifre sorma kısmı atlanıyor. moveq #0,d0, move.w #$874B,d1 ve bra.s $3B2. Şifre çözme döngüsü artık sabit anahtarla çalışıyor.
$3D0: ekran satırını 3 geri çeken komut → NOP. Bu sadece görünüm düzeltmesi.
Sonra bootblock checksum'ını yeniden hesapladım. Kickstart bunu kontrol ediyor.
Düzeltme: "Disk verisine dokunmadım" dedim, ama 91 bayt değişti: hepsi bootblock'ta (yama + checksum). INFO, INTRO, GAME ve final blokları birebir aynı.
5. Neyi doğruladım, neyi doğrulamadım
Doğruladım (Unicorn ile 68000 CPU emülasyonu):
Bootblock'un kancayı çalıştırıp kabuğa üç yamayı RAM'de bire bir beklenen şekilde uyguladığını.
Yamalı kodun GAME'in ilk $1600 baytını benim bulduğum anahtarla doğru çözdüğünü.
Kabuğun kendi decruncher'ının, yamalı akıştan benim Python çıktımla bire bir aynı 399.556 baytı ürettiğini.
Doğrulamadım:
Gerçek Amiga donanımı veya WinUAE/FS-UAE: DMA, copper, ses, Kickstart'ın önyüklemesi bu emülasyonda yok. Oyunun sonuna kadar oynandığını da bilmiyorum.
Gotek'te çalıştığını.
Oyunun başka yerlerde (oyun içinde, seviye geçişlerinde) ek bir kontrol yapıp yapmadığını. Açılmış GAME, INTRO, INFO ve final bloklarında $D70, $18AE gibi koruma değişkenlerine referans aramadım sayılır. Sadece belirli adres kalıplarını taradım ve bulamadım, ama bu kesin kanıt değil.
İlk denemeniz için WinUAE'de A500/OCS ve 512 KB chip RAM önerim. Bir yerde takılırsa ekranda ne yazdığını veya ne olduğunu bana yazın. (Retrojen forumundan alıntıdır)






Pil tahmin ettiğim üzre akmış. Elektroniğin e sinden anlamayan ben aldım elime havyayı pcb nin arkasından lehimlerini sökerek pili çıkardım. Gariban pcb nin bir kısım kısımları epey zarar görmüş sanırım. Pilin oturduğu yüzey tamamen mavi-yeşil bir renk almış ve pcbnin üst kısmı soyulmuştu. Bir de hemen sağ yan taraftaki dirençlere de ilerlemişti. Ama asıl canımı sıkan durum sağ taraftaki fat agnus teyzenin sağ canibinde bulunan bir takım ufak boyuttaki çiplerden birine de ilerlemiş olması. Hatta o çipin ayakları yeşillenmiş bir vaziyetteydi (8520 bu mu acaba?). Şu paslanmayı giderici WD40 ile müdahale ettim, şöyle bir diş fırçası ile temizlemeye çalıştım. Operasyon bittikten sonra power ledinin kısa aralıklarla yanıp söndüğünü gördüm. Ayrıca disk sürücüsündeki tık-tık sesi de gelmiyordu. Monitöre bağlayamadım (monitör kablosunu bulamadım). Galiba beyin ölümü gerçekleşti. Halbuki 3-4 yıl önce ne güzel çalışıyordu. Acaba yapabileceğim bir şey var mı?