11. Freecell for Windows 98 SE krekinimas

Info:
Autorius: PauliuZ (pauliuz@xxx.lt, www.pauliuz.cjb.net)
Irankiai: SoftICE, Betkoks šešioliktainis redaktorius (http://ucol.home.lt/cgi-bin/ucol.pl?l_tools)
Taikinys: Žaidimas „Freecell“

Intro:
Šis tekstas yra skirtas tiktai mokslo tikslams ir teksto autorius neatsako už netinkamą jo naudojimą! O dabar jau galime pradėti :]
Kam gi reikia krekinti „Freecell“? Jeigu žaidžiame šį žaidimą ir mums niekaip nesiseka jį sužaisti, taigi mes norime iš jo išeiti ir vėl pradėti iš naujo, bet išeinant pamatome dialogą: „Are you sure you want to quit this game?“. Jeigu spaudžiame „Yes“, tai mums užskaitomas pralaimėjimas, o mes to visai nenorime :] Todėl reikia padaryti, kad tas dialogas visai neiššoktų ir nebūtų užskaitytas pralaimėjimas.

Pora sakinių:
Būtų gerai, kad jūs turėtumėte bent „žalią" supratimą apie SoftICE, šešioliktainius redaktorius ir assembler kalbą. Bandysiu paaiškinti bent jau pagrindines SoftICE klavišų kombinacijas ir jos suderinimą.

Suderinimas:
SoftIce yra paleidžiama iš autoexec.bat paskutineje eilutėje įrašius: [kelias iki SoftIce]\winice.exe. Pvz.: C:\SoftICE\WinIce.exe, todėl SoftIce pasileidžia kraunantis windowzei.
Taip pat reikia suderinti ir winice.dat failą. Pateiksiu winice.dat failo fragmentus, kurie turi buti (daugtaškiai reiškia praleistas vietas):
...
INIT="CODE ON; X;"
...
EXP=c:\windows\system\kernel32.dll
EXP=c:\windows\system\user32.dll
EXP=c:\windows\system\gdi32.dll
...
Kombinacijos:
Ctrl+D - įeiti į SoftICE;
F5 - įšeiti iš SoftICE;
F10 - vykdyti programą po vieną eilutę;
F8 - jeigu esame ant procedūros, įeiti į ją.

Krekinimas:
Jūs laisvai galite nukrekinti ir „Freecell“ iš windows 95, ten viskas labai panašu, nes kiek žiūrėjau failų dydžiai skiriasi tik keliais baitais.
Įeiname į žaidimą (Start\Programs\Accessories\Games\Freecell). Paleidžiame jį (Game\New Game). Bandome išeiti iš jo. Pamatome dialogą: „Are you sure you want to quit this game?“. Spaudžiame „No“ (juk nenorime pralaimėti :)). Einame į SoftICE (Ctrl+D). Rašome: bpx messagebox. Išeiname iš SoftICE (F5). Vėl bandome išeiti. Aktyvuojasi SoftICE. Spaudžiame F11 (išėjimas iš proceduros). Pasirodo dialogas. Spaudžiame „No“. Vėl aktyvuojasi SoftICE. Štai ką matome:

...
:03D8 68D604           push ds                               ;dialogo parametras
:03DB 1E                  push 56c                              ;dialogo parametras
:03DC 686C05          push ds                                ;dialogo parametras
:03DF 6A24               push 24                               ;dialogo parametras
:03E1 9A00009717  call user!messagebox        ;iškviečiame dialogą
:03E6 3D0700          cmp ax,0007                        ;ar buvo paspausta „No“
:03E9 0F846E04       jz 085b                                 ;jeigu paspaudėme „No“ nedarom nieko
:03ED E8FE1A        call 1eee                             ;užskaitome pralaimėjimą
:03F0  E80734          call 38ca                             ;užskaitome pralaimėjimą
:03F3 E9BFFE         jmp 02b5                             ;nošokame į išėjimą
...

Užsirašome pilkai pažymėtys baitus (68D6041E686C056A24). Jų mums prireiks vėliau. Taigi mums reikia praleisti dialogą ir pralaimėjimo užrašymą ir iš karto nušokti į išėjimą. Tuo mums puikiai pasitarnauja pirmasis dialogo parametras, kuris užima tiek baitų kiek ir išėjimo komanda (jmp 02b5). Todėl tą dialogo parametrą (push ds) reikia pakeisti komada jmp 02b5. Rašome: bpx 3d8. Tai reiškia, kad SoftICE sustos toje vietoje, kai bus bandoma užkrauti pirmą dialogo parametrą. Išeiname iš SoftICE (F5). Bandome išeiti iš žaidimo. Aktyvuojasi SoftICE ties pirmu dialogo parametru. Rašome: a (tai reiškia, kad mes pakeisime komandą push ds kita). Dabar rašome jmp 02 b5 (keičiame komandą). Spaudžiame Enter, paskui Escape. Štai ką matome:

...
:03D8 E9DAFE       jmp 02b5                              ;nošokame į išėjimą
:03DB 1E                  push 56c
:03DC 686C05         push ds
:03DF 6A24              push 24
:03E1 9A00009717  call user!messagebox
:03E6 3D0700          cmp ax,0007
:03E9 0F846E04       jz 085b
:03ED E8FE1A        call 1eee
:03F0  E80734          call 38ca
:03F3 E9BFFE         jmp 02b5
...

Pasikeitė trys baitai, užsirašome raudonai pažymėtus (pasikeitusius) baitus (E9DAFE). Išeiname iš SoftICE (F5). Kartu su SoftICE užsidarė žaidimas ir nebuvo jokio dialogo. Einame į šešioliktainį redaktorių, atidarome faila freecell.exe, vykdome paiešką pagal pilkai pažymėtus užsirašytus baitus. Suradę juos, tris pirmus pakeičiame į raudonai pažymėtus užsirašytus baitus (E9DAFE), išsaugome failą. Išeiname iš šešioliktainio redaktoriaus.

Pabaiga:
Viskas žaidimas „nukenksmintas“. Pabandykite paleisti jį, šiek tiek jame pažaisti ir išeiti. Ką matote? Jokio dialogo išeinant! Vėl įeiname į žaidima, pažiūrime į rezultatus. Rezultatai tokie patys, pralaimėjimas neužskaitytas! Bet žaidimas iki galo dar nenukrekintas, nes dialogas atsiranda vykdant žaidimo meniu komandą „Game\New Game“ antrą kartą. Šitą dialogą pabandykite nukrekinti patys.

® 2002-2003 VaidaZ