Showing posts with label hacking. Show all posts
Showing posts with label hacking. Show all posts

Wednesday, November 7, 2007

Hacking Microsoft Game: Pinball

Bang Zack dan Juki sedang bersaing untuk memperebutkan Khalila. Yah, namanya juga bersaing, apa aja dijadiin alasan supaya yang saingannya ga ngedeketin target. Kali ini bang Zack ngajak Juki maen Pinball, sebuah permainan standar dari M$ Windows XP. Mereka sepakat, siapa yang paling tinggi nilainya, maka dia berhak mendekati Khalila tanpa diganggu selama sehari.

Udah bisa ditebak, Juki yang mantan pencopet selalu saja kalah kalau bersaing dengan bang Zack, si penjagal kebo. Walaupun mereka berdua ga terlalu bisa maen komputer, tetep aja ada salah satu yang lebih unggul. Orang itu adalah bang Zack.


Juki meratapi nasibnya yang tidak akan bertemu dengan Khalila, pujaan hatinya, hari ini. Tapi Juki ga kehilangan akal. Setelah mencari informasi ke seluruh dunia (Internet), Juki akhirnya mengetahui bahwa M$ Windows menyimpan konfigurasi software di registry. Nilai permainan pinball juga disimpan di registry. Lokasinya adalah di HKCU\Software\Microsoft\Plus!\Pinball\SpaceCadet.



Berbekal ilmu "trial and error", Juki mencoba mengutak-atik registry menggunakan software bawaan Microsoft, regedit. Juki terpaksa mengambil resiko aplikasi tidak akan berjalan dengan baik bila key registry yang diutak-atik salah. Di registry terlihat nama Bang Zack dan Juki, beserta nilai mereka. Key "0.Name" berisi nama Bang Zack dan "0.Score" berisi nilainya yaitu 810000. Dari strukturnya terlihat bahwa key "0.Name" dan "0.Score" merupakan key untuk menyimpan nama dan nilai pemain pinball yang berhasil menduduki peringkat pertama. Begitu seterusnya.

Berarti untuk mengubah nama dan nilai, kita hanya perlu mengubah key Name dan Score. Hmm... mungkin saja... Mengapa masih mungkin? Karena ada key verification, yang masih belum diketahui apa fungsinya. Nah, . Key 0.Name diganti dengan "Juki" dan key 0.Score diganti menjadi "11755400". Selesai. Si Juki pun membuka pinball dan mengecek high scores. Eh... ternyata kosong!!! Tidak ada nama Juki maupun Bang Zack. Wah celaka! Dimana salahnya???

Juki pun terduduk lemas. Apa kata bang Zack nanti kalau tahu namanya sudah tidak ada di deretan high scores. Bisa-bisa Juki dimarahi ama bang Zack. Kemudian dia teringat key verification. Mungkin itu key yang digunakan untuk verifikasi, apakah nama pemegang rekor dan nilainya valid.

Dengan semangat membara, Juki mempelajari bagaimana key verification dibuat. Untuk mengetahuinya, ia melakukan beberapa pengamatan sebagai berikut:

Pada kondisi default, atau tidak ada pemain yang memperoleh nilai tertinggi, data registry pinball adalah:

0.Name = ""
0.Score = -999
1 .Name = ""
1.Score = -999
2 .Name = ""
2.Score = -999
3 .Name = ""
3.Score = -999
4 .Name = ""
4.Score = -999

verification = -4995


Perkiraan:
verification = -999 + (-999) + (-999) + (-999) + (-999) = -4995

Hm... kemungkinan, verification diperoleh dari menjumlahkan seluruh key Score.

Untuk memastikannya, dilakukan percobaan dengan memainkan pinball. Syaratnya, belum ada satu pun pemain yang mengisi high scores. Setelah permainan pinball berakhir, pemain memasukkan nama untuk peringkat pertama high scores karena merupakan satu-satunya pemain. Nama yang dimasukkan adalah "a" (tanpa tanda kutip). Data registry pinball adalah:

0.Name = "a"
0.Score = 192750
1 .Name = ""
1.Score = -999
2 .Name = ""
2.Score = -999
3 .Name = ""
3.Score = -999
4 .Name = ""
4.Score = -999

verification = 188851

Perkiraan:
verification = 192750 + (-999) + (-999) + (-999) + (-999) = 188754

whoops... kok ga sama?

Sisa verification = 188851 - 188754 = 97

Kesimpulan sementara a = 97

Kemudian dilakukan percobaan kedua, dengan syarat tidak ada pemain yang mengisi high scores. Nama yang dimasukkan tetap "a". Hasil yang diperoleh:

0.Name = "a"
0.Score = 114000
1 .Name = ""
1.Score = -999
2 .Name = ""
2.Score = -999
3 .Name = ""
3.Score = -999
4 .Name = ""
4.Score = -999

verification = 110101

Perkiraan:
verification = 110101 + (-999) + (-999) + (-999) + (-999) = 110004

Sisa verification = 110101 - 110004 = 97

Berarti hampir dipastikan bahwa a = 97

Mengapa hampir pasti? Karena si Juki belum tau, darimana datangnya 97 untuk huruf "a"? Karena udah buntu, akhirnya si Juki browsing entah kemana. Eh... abis tu dia baca artikel tentang ASCII [Link]. Dari situ dia tahu kalo kode ASCII untuk huruf a adalah 97!!!

Kalau begitu, rumus untuk mencari nilai verification adalah

verification = jumlah seluruh nilai + jumlah kode ascii seluruh nama

Tapi... apa benar? Untuk memastikannya, kita harus mencobanya. Nama yang akan dijadikan top score adalah juki dengan nilai 11755400.

Menurut tabel ASCII [Link], j = 106, u = 118, k = 107, i = 105. Bila dimasukkan ke dalam rumus:

verification = (11755400 + (-999) + (-999) + (-999) + (-999)) + ((106 + 117 + 107 + 105) + 0 + 0 + 0 + 0)
verification = 11751404 + 435 = 11751839

OK, sekarang kita hanya perlu mengisi key 0.Name dengan juki, 0.Score dengan 11751404 dan verification dengan 11751839.

Kira-kira seperti yang terlihat di bawah ini:


Setelah selesai mengedit registry, buka pinball dan lihat highscores. Whuzzzz.... kini muncul nama "juki" dengan nilai 11755400.


Pada akhirnya Juki menyimpulkan bahwa rumus untuk nilai verification adalah

Verification = Jumlah Seluruh Nilai (key Score) + Jumlah Kode ASCII Seluruh Nama (key Name)

Nah, sekarang, berhasilkah si Juki mengalahkan bang Zack? Ternyata, selagi Juki mengutak-atik registry pinball, bang Zack ngalor-ngidul bersama Khalila. Ternyata kasus ini hanya akal-akalan bang Zack aja agar Juki sibuk dan lupa ama Khalila. Yah... namanya juga bang Zack, makin tua makin banyak akalnya!

NB:
Bila ada kesamaan nama tokoh pada cerita di atas dengan tokoh di sinetron PPT (Para Pencari Tuhan), hal tersebut memang disengaja. Maklum la, penulis suka nonton sinetron PPT seh... hehe... ni lagi nungguin PPT seri ke-2 (Kalo ada...)

Tuesday, November 6, 2007

Deface dalam Semenit

Web FBI yang baru aja di-deface

Beberapa hari yang lalu, karena ga da kegiatan, iseng browsing ke situs-situs underground. Eh, rupanya nemu mainan baru. :D Buat yang pengen nge-deface web dengan cara yang gampang, tapi merasa berdosa bila mengacak-acak web orang, cara berikut cocok buat kamu.

1. Pilih target kamu. Misalnya web punya FBI (eh, bukan Fans Berat Inul loh!!!) yang beralamat di http://www.fbi.gov.

2. Hapus alamat di address bar, dan ganti dengan:

javascript:document.body.contentEditable='true'; document.designMode='on'; void 0

3. Wussshhhh.... Web siap di-deface. Klik pada tulisan atau gambar di web tersebut. Ubah seperlunya :D

NB:
Teknik ini hanya "men-deface" web secara lokal. Artinya, perubahan hanya terlihat di browser kamu aja. Web yang asli sama sekali tidak terganggu. Jadi kamu ga usah merasa berdosa karena telah men-deface web orang :D.

Friday, October 26, 2007

Hacking Microsoft Game: Minesweeper

Bagi pengguna M$ Windows, tentu saja mengenal permainan Minesweeper. Salah satu permainan standar yang ada pada instalasi M$ Windows. Sesuai dengan namanya, permainan ini mewajibkan pemainnya untuk menandai ranjau yang tersembunyi. Hm... kalau cara bermainnya silakan buka permainannya dan lihat help. :)


Bila kita berhasil memecahkan rekor waktu membersihkan ranjau dengan menandai seluruh lokasi ranjau dengan bendera, kita diminta untuk memasukkan nama kita. Agar dicatat sebagai "Fastest Mine Sweepers".




Nah, yang jadi persoalan, bagaimana cara agar nama kita masuk ke Fastest Mine Sweepers tanpa perlu memainkan permainan minesweeper ini? Ups... mo cheat ya? Bisa... Setelah diselidiki, ternyata minesweeper menyimpan data pemegang rekor waktu tercepat di registry. Letaknya di HKCU\Software\Microsoft\winmine.


Pada gambar di bawah terlihat key Name1, Name2, Name3. Key tersebut untuk menyimpan nama pemegang rekor waktu tercepat. Sedangkan key Time1, Time2, Time3 adalah key untuk menyimpan waktunya. Name1 dan Time1 untuk rekor Beginner, Name2 dan Time2 untuk rekor Intermediate, Name3 dan Time3 untuk rekor Expert. Cukup dengan mengedit key tersebut, nama dan waktu kita bisa muncul di Fastest Mine Sweepers.


Sekarang kita edit Name1. Dengan mengklik ganda key tersebut, akan muncul kotak dialog. Ketikkan nama yang akan dijadikan pemegang rekor. Untuk waktunya edit key Time1. Pilih base decimal dan isikan angka yang diinginkan.



Kalo udah diedit, buka lagi minesweeper dan lihat highscorenya. Maka akan muncul pemegang rekor hasil rekayasa kita. Hehe...



Semoga bermanfaat... :)