Just another Security site
porno filmpornopornoanal sex izleporno filmporn

DKH – Soru 10: Matematrondan kacis

Posted on December 27, 2012 | in DKH-2012 Sorular | by

ruletMatematron gezegeninde yanınızda 200 MTL ile kaldınız.
Tek yapmanız gereken 8000 MTL toplayıp dünyaya geri dönmek.
Ancak gezegende tek para kazanacağınız yer rulet masası.
Ve kuralları biraz değişik…


Roulette

İpucu: Tersine mühendislik her zaman en kolay yol değildir.

Puan:
İlk 10: 360
İlk 10-20: 330
Geri kalan: 300

cw-ftrLine

Çözüm:

Yöntem 1: Programın çalışmasını sezgisel olarak anlayıp one göre oynamak.

Ben bu soruyu öncelikle deneme yanılma yöntemiyle çözdüm. Çok fazla zaman almıyor.

Rulet’te birkaç el oynadıktan sonra şu hususları tespit ettim:

1. Başta parayı yatırdığınız rakam çıkıyor. Yani ilk elde hep kazanıyorum. Bu 2 veya 3 defa oluyor arka arkaya. (Demek ki Randomize ile ilgili bir problem var. Muhtemelen “Initial Vector” bizim seçimimiz ile ilgilidir. Normalde sistem saatinden alınırsa, kişi saniye salisesini her defasında ayarlayamayacağından dolayı her defasında farklı bir sonuç ortaya çıkacak.)

2. 00’ın özel bir durumu var.

3. Birkaç kere kaybettikten sonra 00’a parayı yatırdığınızda arka arkaya 2-3, bazen 4 defa kazandırıyor.

4. Bazen rakamı bilmiş olmana rağmen kaybettiniz diyor. Bunun ardında 00’a parayı yatırınca 3 defa arka arkaya kazandırıyor.

Haliyle, kazandırma ihtimali yüksek olan ellerde yüksek miktar, boş geçecek ellerde de düşük miktar ile manuel olarak kazanabiliyorsunuz.

Yöntem 2: Programı Decompile ederek.

Dosyanın içine strings ile baktığımda “SOFTWARE\Borland\Delphi\RTL” görüyorum. Bu program da “Borland Delphi” ile yazılmış.

DeDe programı ile rulet.exe dosyasını açıyorum. Project bölümüne gelip kaydediyorum. Sonra da Unit1.pas dosyasını Notepad ile açıyorum.

Öncelikle Delphi programında kullanılan nesnelerden biri dikkatimi çekiyor:

 

soru_10_01

 

TIdDecoderMIME nesnesi, Delphi’de Base64 Encode/Decode yapmak için kullanılıyor. Eğer cevap doğrudan string olarak kod içinde yoksa, muhtemelen bir şifreleme veya one benzer bir takla attırıyordur text bölüme. Bunu aklımızın bir köşesine yazdık.

Devam ediyorum… Bundan sonraki bölümde string’lere dikkatimi veriyorum.

 

soru_10_02

 

Bu değil.

 

soru_10_03

 

Bu da değil.

 

soru_10_04

 

Hmmm… Bu olabilir: “TTR0M200dH

Neden olabilir? Çünkü Base64 output karakter setine uyuyor.

Base64 ile ilgili kısa bir bilgi verelim. Bilenler bu paragrafı geçebilirler. 3 adet byte’ı alıp, bunları 6’şar bitlik dört gruba ayırır. Bitlerin başına da 2 adet 0 biti koyunca byte’ları tamamlamış oluyor. Böylece printable olmayan karakterleri printable hale getirmiş oluyor. Buna benzer başka algoritmalar da var. Base64 output’unda sadece şu karakterler olabilir: “A-Z, a-z, 0-9, +, /”. Toplam 64 adet farklı karakter. Daha ayrıntılı bilgi için: WikiPedia‘dan istifade edebilirler.

Hemen web üzerinden bir base64 Encoder/Decoder site buluyorum. Mesela: http://www.base64decode.org/

“TTR0M200dH” kısmını yazıp <DECODE> butonuna basıyorum. “M4t3m4t” çıkıyor karşıma. Yarışma formatına uygun bir string.

Devam ediyorum.

 

soru_10_05

 

Bu da değil.

 

soru_10_06

 

Bu da olabilir. Base64 formatına uyuyor.

Yukarıda yazmış olduğum base64 sitesine tekrar geçip, “IwbjRrYjFM” stringini <DECODE> edince karşıma “#F#” böyle tuhaf bir şey çıkıyor. Halbuki baya ümitlenmiştim.

Devam ediyorum.

 

soru_10_07

 

Bu da değil.

Neyi atlamış olabilirim?

Olabilir dediğim iki string’i (“TTR0M200dH” ve “IwbjRrYjFM”) birleştiriyorum. “TTR0M200dHIwbjRrYjFM” şeklinde tek bir stringi deniyorum. Bu sefer oldu sanırım: “M4t3m4tr0n4kb1L”.

Yöntem 3: Programın binary’sini açıp başlangıç parasını 8.000 üzerinde bir rakam yapıp, ilk elde kazandığımızda cevabı alabiliriz.

Bu yöntemi uygulamak için “Resource Hacker” programından istifade edebiliriz. Programı çalıştırıp, “rulet.exe” isimli dosyayı açıyoruz.

soru_10_10

Burada sol tarafta bulunan TFORM1 bölümüne giriyoruz. Ve başlangıç olan “200” değerinin nerede olduğuna bakıyoruz.

soru_10_11

Rakamı bulduk. Bu rakamı değiştirerek “10.000” yapabiliriz mesela. Veya aynı nesne için ReadOnly seçeneği görünmektedir. Değeri “True”. Eğer bu seçeneği de “False” olarak değiştirirsek oyuna başladıktan sonra elimizdeki para miktarını değiştirebiliriz.

soru_10_12

Editör bölümünde gerekli düzeltmeleri yaptıktan sonra “Compile Script” butonuna basıp menüden “Save As” seçeneği ile yeni dosya adı olarak kaydediyoruz.

Program, yaptığımız değişikliklere göre çalışacaktır:

soru_10_13

 

Yöntem 4:Program çalıştırıp, memory’deki paranın değerinin bulunduğu adresinde bulunan değerin değiştirilip (10.000 mesela), ilk elde kazandığımızda da cevabı alabiliriz. Bu yöntemin de  daha iyi bilen biri tarafından yazılmalıdır.

Cevap: M4t3m4tr0n4kb1L

Komutan

 

TAGS: , , , , , , , , ,

Leave a Reply

Your email address will not be published. Required fields are marked *

To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create