Potrzebna pomoc w zlikwidowaniu buga w Dosowej grze.

1

Cześć.

Ostatnio mam fazę żeby w wolnym czasie bawić się w udoskonalanie roboty po "złych hackerach" ;) I w oldskoolowych produkcjach, ktorych i tak już legalnei nie ma szans kupić. Poprowawiam niektóre interesujące mnie tytuły by tak zwane dox checki się najlepiej w ogóle nie ukazywały lub gry są czasami nie dokońća ok popatchowane, bo w dawnych czasach zjadaczą crackersów nie chciało się przysiąść no i może debuggery nie były zawsze tak dla nich wygodne.

Do rzeczy. Zwracam się tutaj z prośbą i pytaniem. Na tapecie mam teraz grę którą widzę na sieci wiele osób, również z poza Polski darzy sympatią, nagrywając z niej letsplaye i dyskutując na forach. Ta gra to "Summer Challenge" od Accolade z 1992 roku. Połamałem już dox checka swoim TSR'em na 16h, bo nie umiem robić takich myków że inicjujemy TSR na 21h i się nie zamraża on na samym sobie. Jednak i tak zrobiłem lepiej niż cracker/grupa Onyx i chyba zgapiający od nich pokręcone rozwiązanie z masą zmian w pamięci Zagrzebskie modziciele, bo dox check w ogóle się nie pokazuje (i wystarcza zmiana jednego bajtu najlepiej w pamięci nawet dla gry w rozpakowanej postaci).

Pozostał jeszcze problem poprawienia buga gry. Unpackowałem ją z pomocą unp.exe dla jak dla mnie łatwiejszego podglądania również pod HIEW i spatchowałem by unpackowana się uruchamiała. Jednak nie mogę pozbyć się błedu proszącego o wyłączenie debuggera, nawet jeżeli odpala się bez debuggera. Błąd ten pojawia się przy próbie rozpoczęcia olimpiady lub treningu. Ma on miejsce jeżeli liczba cycles DosBOX'a jest większa niż chyba 2000. Pomaga tylko na chwilę wejście do ekranu setupu w menu głownym i wyjścia z niego. Wtedy błedu nie ma. Jakby się może karta dźwiękowa musiała przeinicjować czy coś :/ Chciałbym jednak aby gra działała perfekcyjnie. Namierzyłem miejsca w kodzie gdzie wywala do DOS'a z errorem.

Jednak śledząc kod pod debuggerem DosBOXa lamerską metodą porównując kod bez wchodzenia do setupu i w oknie obok z wejściem do setupu, gdzie błąd nie wystąpi. Wszystkie instrukcje są tak samo, tylko wersja która się wywali zatrzymuje się po jednym callu na przerwaniu 3F. Podgląd rejestrów pokazuje to samo, po drodze skoki przechodzą tak samo. Może ktoś znalazł by czas i pomógł mi rozgyźć problem? Pisałem już do gościa co zrobił tutorial jak rozpakowaywać ezeki starym debuggerem DosBOX'a, ale nie odpisał.

Jeżeli ktoś by się zdecydował znaleźć chwilę czasu na zabawę to prosze dać znać, podeśle linki do wrzuconej kompilacji z narzędziami ułątwiającej analize pod DosBOXowym debuggerem. A także skromne notatki z pliku tekstowego z opisem co do tej pory ustaliłem. Chociaż niewiele tego jest. Z góry dziękuję i przepraszam za rozpisanie się, ale to dział nietuzinkowy więc nie może być samego lakonicznego pytania jak w innym dziale ;)

Edit: jednak chyba spatchowałem złe miejsce i pomimo iż dox chceck jest pominięty, to koder zastawił pułapkę. I wprawdzie sterowanie enterem działa ok. Ale konkurencja na przykład treningowa w rzucie oszczepem, działa tak że rzucając oszczep spacją lub backspace nie jest odnotowywane puszczenie klawisza i rzucamy wtedy niemal po torze pod kątem prostym, co skutkuje beznadziejnym wynikiem. Spróbuję się temu jeszcze na spokojnie przyjrzeć. Nadal jednak pozostaje problem errora z debuggerem, także liczę że ktoś pomoże.

0

W temacie zgłosił się @fur, że nie rozumie mojego bełkotliwego slangu. Ale odpowiedzi tutaj nie widzę. Pewnie została usunięta. Także drogi @fur co Tobie wyjaśnić? Chętnie doprecyzuję. Ale czy mogę liczyć na Twoją pomoc? Może użyłem trochę slangu. Ale na pewno nie w składni gibums++ typu ocb/wgl/bd/cb. Także wedle mnie akceptowalne.

Ze "złymi hackerami" to taki żart. Po prostu takie wybitne "dobre hackery" jak lam(a)ctuff czy jak mu tam było, tak kiedyś w TV zaproszony jako expert do jakiegoś programu na TVP dawno temu o Internecie i komputerach. Rozgraniczył, że dobry hacker to on i jego kolesie chyba kiedys z gimnazjum. Bo oni włamują się na serwery i to jest ok. A cracker to też się włamuje tylko, że niszczy dane i w ogóle to zło najgorsze. I wszystko to dla kasy. Totalny bełkot. Nic nie dała krucjata ludzi kiedyś siedzących na IrcNecie na #crackpl żeby wbić do łba wbić wszystkim baranom, że cracker od zawsze łamał zabezpiecznia gier i oprogramowania komputerowego), a hacker włamuje się na serwery sieciowe, podmienia strony i takie tam. Obie "profesje" z róznych pobudek.

Debugger to wiadomo. Śledzimy nim kod. DosBOX ma własny dodatkowy, nawet fajny. Ale jak komuś brakuje trochę doświadczenia z czasów DOS'a i rozumienia do końca co się dzieje z grą w pamięci to musi po ludziach o pomoc poprosić ;) Doxcheck to docs check czyli zabezpieczenie stosowane w starych dosowych grach (i może wczesnych Windowsowych też) żeby podać kod z karty kodów dołaczonych do oryginałnej i kompletnej gry. Czasem słowo z instrukcji, a czasem było takie zmyślne papierowe kółko - code wheel jak w Another World i kręciłeś żeby podać symbol o który prosi gra na danych koordynatach w pewnym polu. TSR to wiadomo, rezydentny program. Były i takowe cracki, działało to w pamięci. Mniej inwjazyjnym i legalnym TSR'em były choćby dosowe drivery myszki czy programy włączające wyświetlanie polskich fontów pod DOS.

Jak coś jeszcze niejasne to pytaj śmiało, doprecyzuje. Zresztą to dział nietuzinkowe tematy, także i słownictwo takowe - czasami za pewnie nie tylko u mnie - w treści może się zdarzyć ;P Jeśli były jakieś literówki to sorry. Najpewniej nie dostrzegłem.

0

@fur: sprecyzuj czego nie rozumiesz. Dla Ciebie chyba wszystko jest bełkotem. To po co zaglądasz do tego działu w takim razie. Jest nietuzinkowy, więc i poruszane zagadnienia nie zahaczają raczej o pytania typu "jak włączyć komputer?" :/ Potrzebuje pomcy z kimś lepiej ogarniającego debuggowanie pod kątem DOS'owego kodu. Debuggowanie nawet w celach ogarnięcia zagadnień inżynierii wsteczniej i reversowania kodu, to po części według mnie i element programowania.

A że to jest dział o nietuzinkowych zagadnieniach, także według mnie - nie dotyczy stricte samego pisania kodu i pytan jakie można zadawać tutaj w innych działach tematycznych. Prosił bym o odzewa osoby, które mogą pomóc. Bo póki co czekam na informacje od jednego bloggera MD z zagranicy, który odpisał mi na mój komentarz pod jego artykułem i podesłalem mu moje notatki, pliki do debuggowania w tym unpackowany exek z ominiętym sprawdzeniem integralności.

Jednak może w międzyczasie ktoś tutaj zajrzy i coś doradzi, zgłosi chęc pomocy. Na takie osoby liczę, a nie na te, które nieuzasadniny sposób potrafią wszystko krytykować jako "bełkot", nie wnosząc nic do tematu.

0

@fur: chętnie dowiem się co dokładnie zje...... i jak można zrobić lepszego TSR'a do tej gry by kompletnie pominąć docs check (chociaż ten TSR by ONYX jest ok, ale zawsze można spróbować coś dopracować). No i najważniejsze jak "oszukać" tę grę by "zawsze myślała", że uruchamiamy ją z parametrem setup? Zanim pewnie uzyskam odpowiedź od wspomnianego blogera, to może Ty mi coś doradzisz. To co podasz maila do siebie? To Ci wyślę pliki do analizowania plus skonfigurowane "mini środowisko" do analizowania (DosBOX).

A @msm napisał, że mam "ciekawy styl pisania", więc pewnie ma go już też dosyć. Bo ostatnio na PW jakoś nie odpisywałeś. I nie dałeś znać czy już Twój port "Polan" z single playerem jest gotowy do testów przeze mnie :)

0

Nie chce mi się w tym grzebać, bo i tak pewnie niewiele z tego pamiętam.

Pamiętam tylko jak kiedyś robiliśmy coś takiego w akademiku.
Np. była gra w której spacja służyła do strzelania - trzeba było ciągle klepać spację.

Wtedy wsadziliśmy tam coś pod obsługę klawiatury żeby trwale repetowało spację
po jednym naciśnięciu, a po drugim stop, i tyle.

I tam był problem z tym, bo gra po uruchomieniu czyściła ten nasz rezydent.
Trzeba było to robić jakoś pośrednio... potem zrobiliśmy to jakoś tak, że dopiero
po uruchomieniu gry podstawiamy przerwanie... z jakiegoś innego przerwania, którego ta gra nie ruszała.

0

Problemem już nie jest w sumie ta spacja. Bardziej już mi zależy na tym setup wywołanym na stałe. Czekam, więc jak odpowie mi jeden zagraniczny bloger. Ewentualnie @Azarien ma teraz chwilę wolnego i napisał do mnie PW, to może On coś wymyśli. A z docs checkiem chodzi o to, że kiedy pominiemy go robiąc skok bezwarunkowy, w miejscu gdzie wykonuje się on i tak po odpowiedzi prawidlowej (bo raz musimy podać, a dzieki crackowi TSR nie musimy podawać prawidłowego "numeru biletu"). To źle działają spacja oraz backspace.

Prawdopodobnie dlatego, że po podanniu prawidlowego "numeru biletu", nawet oszukanego crackiem TSR (lub dzięki ustawianiu czegoś przez niego, ale nie doszedłem czego) ustawiana jest jakaś zmienna, która powoduje, że klawisz wykrywany jest w sposó praiwdłowy. Nie moge jednak nameirzyć tego miejsca. Próbowalem lamerską metodą, która znalazłem miejsce wykwyania entera w menu. Czyli pod Cheat Engine szukałem w całej pamięci DOSBox'a opcode'ów 20 75 lub 20 74 i zamienialem 20 na 35 ale naciskanie piątki nic nie dawało. Zresztą i po podmianie Entera w ten sposób w grze działa on nadal. Także w grę wchodzi albo inny opcode skoku albo inny kod dla klawisza. Dlatego na razie czekam na pomoc z ogarnięciem parametru setup.

EDIT: ok, poczytałem, pokombinowałem i już wiem, że Debugger DOSBox'a olewa przerwania 08h i 09h, które w tej samej grze bez problemów wyłapuje SoftICE uruchomiony na VMWare Workstation i DOSie. Trzeba łapać na adres na ogół znajdujący się w 0000:0022 czyli przerwania 08h. Ponieważ często zdarza się, że kiedy nacisniemy klawisz, gra przywraca stary adres obslugi przerwania 09h.

Spróbował bym lamerską metodą porównywać zachowanie skoków i kodu w oknach debuggera obok siebie. Ale problem jest z przetestowaniem spacji/backspace. Najlepiej robić to w konkurencji rzutu szczepem. Ale żeby rzucić nawet przy obejściu docs checka i "wadliwym zachowaniu" się klawisza. Trzeba się rozpędzić enterem naciskając go szybko. A tutaj cięzko wykonać mi rozbieg. Nacisnąc i przed naciśnięciem spacji założyć pułapkę na adres przerwania 08h. Wtedy porównał bym sobie czy nie ma jakiegoś sprawdzenia po drodze. Może jest jakaś inna metoda. Ale jej nie znam. A niestety debugger DOSBox'a nie pozwala na tworzenie makr ani na warinki poza sprawdzeniem AH przy zakładaniu bpint. Natomiast SICE nie działa w emulacji DOS'a pod DOSBox'em, a pod VMką wiele gier się nie załaduje. A i tamtejszy stary SICE chyba też nie miał jeszcze makr. Także DOSBox do emulacji starych gier działa imo najlepiej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1