Potrzebna pomoc w zlikwidowaniu buga w Dosowej grze.

Potrzebna pomoc w zlikwidowaniu buga w Dosowej grze.
olesio
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
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.


Pozdrawiam.
edytowany 3x, ostatnio: olesio
olesio
@Azarien, @msm możecie spojrzeć? I ewentualnie kto znalazł by chwilę na zabawę i pomoc w usunięciu buga.
olesio
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
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.


Pozdrawiam.
edytowany 3x, ostatnio: olesio
Shalom
Usunąłem jego post bo niósł zero wartościowej treści (co akurat w przypadku tego użytkownika nie jest nowością) i zawierał wulgaryzmy.
olesio
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
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.


Pozdrawiam.
msm
Wybacz, usunąłem posta na który odpowiedziałeś ;). Po prostu nie wnosił nic do wątku. Do anonima, jeśli nie cierpisz stylu pisania olesia (przyznaje że bywa ciekawy ;) ) po prostu nie czytaj jego wątków & nie zaśmiecaj forum.
olesio
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
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 :)


Pozdrawiam.
edytowany 1x, ostatnio: olesio
msm
Nie wiem czy zły styl, na pewno charakterystyczny. Polanie czekają na lepsze (spokojniejsze) czasy. Co do PM to nie zauważyłem :(. Napisałeś akurat w okresie jak nie było mnie ponad miesiąc na 4p, a po powrocie odruchowo odznaczyłem wszystkie powiadomienia i widać PM-ki żeby nie świeciły. Już czytam :P.
olesio
A ok. Wiem, że się rozpisuje, ale już nie raz zrugany przez @madmike'a używam Enterów, także chyba nie jest źle ;P
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.

olesio
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
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.


Pozdrawiam.
edytowany 1x, ostatnio: olesio
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)