Reklama
Strona 1 z 2 12 OstatniaOstatnia
Pokazuje wyniki od 1 do 15 z 16

Temat: [Python] tibiaproxy v3.2

  1. #1

    Data rejestracji
    2005
    Posty
    257
    Siła reputacji
    19

    Domyślny [Python] tibiaproxy v3.2

    Panie i panowie, przedstawiam tibiaproxy ^^. Projekt jest w całości napisany w Pythonie i na razie w fazie "proof of concept". Jest to proxy dla serwerów Tibii bazujących na protokole 10.22, w tym real Tibii. Proxy potrafi podmienić wiadomości od login servera tak, żeby połączenia przechodziły przez niego, a następnie - w trybie game servera - przesyłać pakiety między graczem a serwerem. Jako dowód, że proxy pośredniczy w ruchu, wszystkie próby powiedzenia w grze czegokolwiek, co zaczyna się znakiem ">" będą skutkować próbą uruchomienia tego, co gracz napisał jako kodu Pythona, bez przesyłania tego dalej do serwera. Poniżej screen:



    Podrzucam to raczej jako ciekawostkę - program w tym momencie jest raczej bezużyteczny, właściwie to gdybym wiedział, ile zajmie mi doprowadzenie go do aktualnego stanu, prawdopodobnie bym go nie zaczął. Nauczyłem się jednak masy rzeczy na temat protokołu Tibii. Lista TEORETYCZNYCH rzeczy, które takie proxy mogłoby robić, gdyby je dalej rozwijać:

    • grzebanie w pakietach - cele edukacyjne (nauka protokołu Tibii), eksperymenty z hackami mieszającymi w serwerze, zgrywanie map do OTSów, zaawansowany TibiCam,
    • tzw. headless bot - bot, który nie wymaga włączonego komputera z Tibią do działania. Możnaby go zainstalować na przykład na domowym routerze z oprogramowaniem typu DD-WRT (lub innym OpenWRT). Mogłoby to się przydać w scenariuszu, w którym proxy jest zainstalowane na serwerze z bardziej stabilnym połączeniem internetowym i w przypadku gdy gracz się rozłączy (codzienność przy Neostradzie), bot powiedziałby o tym swojej drużynie i UHał swojego właściciela, póki nie wróci on do gry (a może także uciekł w bezpieczne miejsce),
    • łączenie kont, dzielenie się kontem między znajomymi - teoretycznie możnaby sprawić, że dwie osoby weszłyby na to samo konto i kontrolowały je bez kickowania się nawzajem. Możliwe jest też dodanie funkcji, która pozwoliłaby na połączenie kilku kont - wpisujesz jeden, z góry ustalony login i hasło, a przy logowaniu możesz wybierać postacie z kilku różnych kont zebrane w jednym miejscu,
    • multiclient w wersji hardcore - łączenie się przez inne proxy (Tor? pewnie zbytnio by lagował) tak, aby MC było trudniejsze do wykrycia.


    Co do szczegółów technicznych, program składa się z 969 linii, w tym tak naprawdę tylko 414 to kod, reszta to komentarze i puste linie dla estetyki. Starałem się, żeby było jak najczytelniej a kod był jak najprostszy, poświęciłem też ciut czasu na napisanie README.txt (którego i tak pewnie nikt nie przeczyta). Przyznam, że prawie nie testowałem tego proxy - trochę pochodziłem po domyślnej mapie The Forgotten Servera (do znalezienia tutaj: https://github.com/otland/forgottenserver). Program się nie wysypał, choć druga próba zalogowania już się nie uda (nie testowałem tego też na liście postaci dłuższej niż jedna).

    Póki nie zobaczę choć minimum zainteresowania moim projektem, nie mam w planach pisać instrukcji jak go uruchomić - przy odrobinie szczęścia może wystarczy Ci plik README.txt z paczki z kodem. Jeśli znasz trochę Pythona i chcesz się pobawić w rozwijanie tego projektu, opisz tu swój problem, może uda mi się Tobie pomóc.

    Projekt hostowany jest na githubie - najnowsze wydanie można pobrać tutaj:
    https://github.com/d33tah/tibiaproxy/releases
    Ostatnio zmieniony przez deathplanter : 24-11-2013, 15:59 Powód: nowa wersja

  2. #2

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    Fajna rzecz, mogłoby poslużyć jako świetny interfejs dla bota ;)
    Gratki

  3. Reklama
  4. #3

    Data rejestracji
    2005
    Posty
    257
    Siła reputacji
    19

    Domyślny

    Ogłaszam wydanie v1.1. Jedyna zmiana w porównaniu do v1.0 to brak zależności od numpy - udało mi się znaleźć sposób, żeby zastąpić oferowany przez tę bibliotekę typ uint32 implementacją w czystym Pythonie (http://stackoverflow.com/q/19611001/1091116). Nową wersję można znaleźć tutaj:

    https://github.com/d33tah/tibiaproxy/releases/tag/v1.1

    Cytuj Havaran napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Fajna rzecz, mogłoby poslużyć jako świetny interfejs dla bota ;)
    Gratki
    Dzięki ;) Na OTLand jak próbowałem ogłosić moje dzieło, to mi skasowali temat bez wyjaśnienia :<

  5. #4
    Avatar LGTK
    Data rejestracji
    2009
    Położenie
    Podlaskie, Białystok
    Wiek
    32
    Posty
    267
    Siła reputacji
    15

    Domyślny

    Bardzo spoko sprawa miałem pisać pod aktualną w Cpp ew C# jednak póki co brak motywacji. :)
    PIŻMAG

  6. #5

    Data rejestracji
    2005
    Posty
    257
    Siła reputacji
    19

    Domyślny

    Cytuj LGTK napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Bardzo spoko sprawa miałem pisać pod aktualną w Cpp ew C# jednak póki co brak motywacji. :)
    Polecam Pythona ;) To naprawdę przyjemny język.

    Co do innych implementacji, ciut rozwinę temat - w zasadzie, jak już przebrniesz przez RSA/XTEA, dalej jest już z górki. Jeśli chcesz pomocy z implementacją tych algorytmów, mogę spróbować pomóc. Osobiście, tego typu projekt chodził mi po głowie od dobrych... 7 lat? Dawno, dawno temu próbowaliśmy z Killavusem napisać coś, co się zwało DeeNash, wtedy to była implementacja w C++, oparta o kod OpenTibia clienta. Nie było to proxy, ale projekt samego headless bota. Odpuściłem sobie, kiedy zobaczyłem, że binarka nie działa na moim routerze - nie rozumiałem, czemu tak się działo i bardzo mi się to nie podobało.

    C# odradzam, chyba że od razu będziesz to testować pod mono - inaczej całość nie będzie przenośna. (aczkolwiek, przyganiał kocioł garnkowi, sam nie wiem czy moje proxy rusza już pod Windows, mam nadzieję, że tak :P). Z drugiej strony, jeśli założysz, że proxy odpalane jest na tym samym komputerze, co klient Tibii, możesz ominąć potrzebę implementowania RSA - klucze XTEA wyciągałoby się wtedy nie z zaszyfrowanego pakietu, ale z pamięci klienta. Mi jednak takie rozwiązanie bardzo się nie podobało.

    Co do aktualnej wersji Tibii - przygotowałem już w pełni działające sobie środowisko testowe pod 10.20, tym razem nawet nie używam maszyny wirtualnej z Windows. Możliwe, że pobawię się tym na dniach - wtedy byłby już sens pisać instrukcję uruchomienia tego bota przez zwykłych użytkowników ;)

    Swoją drogą, orientuje się ktoś, kiedy najbliższy update? Trochę bez sensu byłoby rozgryzać protokół 10.20, jeśli w ciągu kilku tygodni planowane byłoby 10.30.

  7. #6

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    Mono to bardzo ale to bardzo rozwinięty soft - miałem serwer gry napisany w C# i uruchomiłem go na debianie bez problemu :)

  8. #7

    Data rejestracji
    2005
    Posty
    257
    Siła reputacji
    19

    Domyślny

    Cytuj deathplanter napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Odpuściłem sobie, kiedy zobaczyłem, że binarka nie działa na moim routerze - nie rozumiałem, czemu tak się działo i bardzo mi się to nie podobało.
    Tak jeszcze dodam "dla potomnych" - na routerze najprawdopodobniej nie działało to dlatego, że jest coś takiego jak "endianess" (https://pl.wikipedia.org/wiki/Kolejność_bajtów). Jeśli ktoś planuje programować coś podobnego na C++, apeluję o testowanie tego na zarówno platformie little endian jak i big endian, to kod będzie bardziej użyteczny.

    Cytuj Havaran napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Mono to bardzo ale to bardzo rozwinięty soft - miałem serwer gry napisany w C# i uruchomiłem go na debianie bez problemu :)
    Zgoda, ale jeśli od początku będzie używał okienek z MS C#, z tego co mi wiadomo, całość nie będzie przenośna. Słyszałem, że w Mono obowiązują inne interfejsy, oparte o GTK. Tak czy siak, ja w tym programował nie będę, bo to nie jest tak naprawdę wolna platforma (groźby patentowe) :p

  9. #8

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    um, no tak, zanim przenioslem serwer zdjalem cale GUI i zostawilem formę konsolową. Nie jestem pewien jak by to bylo z okienkami ;)

    @up
    Endianess raczej nie ma nic wspólnego. Router tylko przenosi dane, niezależnie od tego czy Twoje dane są zapisane w little endian czy big endian :) poza tym, jesli programujesz na PC to ten problem Cię dotyczyc nie powinien bo wszyscy używamy little endian :P

  10. #9

    Data rejestracji
    2005
    Posty
    257
    Siła reputacji
    19

    Domyślny

    Cytuj Havaran napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    @up
    Endianess raczej nie ma nic wspólnego. Router tylko przenosi dane, niezależnie od tego czy Twoje dane są zapisane w little endian czy big endian :) poza tym, jesli programujesz na PC to ten problem Cię dotyczyc nie powinien bo wszyscy używamy little endian :P
    Ja próbowałem na routerze postawić tego bota, kompilowanego skrośnie.

  11. #10

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    lul xD po co na routerze?

  12. #11

    Data rejestracji
    2005
    Posty
    257
    Siła reputacji
    19

    Domyślny

    Cytuj Havaran napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    lul xD po co na routerze?
    Bo akurat eksperymentowałem z programowaniem embedded. Poza tym, można to argumentować tak, że żre mało prądu i i tak jest odpalony 24h/dobę. No i biorąc pod uwagę, że na PC robię więcej rzeczy, większe szanse są, że crashnie mi PC, niż router - w takiej sytuacji bot mógłby jakoś zareagować (póki co - hipotetycznie).

  13. #12

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    no to jesli endianess byl problemem to wystarczylo teoretycznie w wypadku wykrycia systemu big endian, przy wysylce wszystkie wartosci liczbowe ( shorty inty longi bla bla bla ) pozamieniac bajty miejscami ( czyli np 0x12345678 zamienic przy wysylce na 0x78563412 )

  14. #13

    Data rejestracji
    2005
    Posty
    257
    Siła reputacji
    19

    Domyślny

    Cytuj Havaran napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    no to jesli endianess byl problemem to wystarczylo teoretycznie w wypadku wykrycia systemu big endian, przy wysylce wszystkie wartosci liczbowe ( shorty inty longi bla bla bla ) pozamieniac bajty miejscami ( czyli np 0x12345678 zamienic przy wysylce na 0x78563412 )
    W teorii, tak. W praktyce, trzeba było wiedzieć o endianess (w wieku 16 lat jeszcze nie wiedziałem) i mieć pomysł, jak poprawić kod, żeby całość działała ;) Dziś bym sobie prawdopodobnie poradził, wtedy - nie.

  15. #14

    Data rejestracji
    2005
    Posty
    257
    Siła reputacji
    19

    Domyślny

    (nie edytuję poprzedniego posta, bo inaczej subskrybujący - jeśli w ogóle tacy tutaj są - nie zobaczą odpowiedzi)

    Wydałem tibiaproxy v2.1. Obsługuje protokół 10.21, na razie bez obsługi oryginalnej Tibii. W zasadzie, wydaję to, bo jakbym miał naprawić wszystkie bugi, to prawdopodobnie nigdy by ten program nie wyszedł ;)

    Link do kodu tutaj:
    https://github.com/d33tah/tibiaproxy/releases/tag/v2.1

    Być może niedługo napiszę jakieś instrukcje jak to przetestować - na razie pytania proszę zgłaszać w tym temacie.
    Ostatnio zmieniony przez deathplanter : 05-11-2013, 00:33

  16. #15

    Data rejestracji
    2005
    Posty
    257
    Siła reputacji
    19

    Domyślny

    (znowu nie edytuję, z powodów takich jak powyżej)

    Wydałem tibiaproxy v3.1. Poprawiłem masę bugów. Lista zmian:

    3.1 [22 Nov 2013]
    • If plugin returned True, don't forward the packet.


    3.0 [22 Nov 2013]


    • Debug mode, which doesn't use any threading.
    • New plugin system, along with old "eval" plugin and "hello" example.
    • Removed destination_game_host/port.
    • Don't crash completely on runtime errors.
    • Early (not working yet) code for real Tibia support.
    • Allow any number of characters and worlds.
    • If the login server reply does not seem to contain character list, just
      forward it.
    Można je pobrać tutaj:
    https://github.com/d33tah/tibiaproxy/releases/tag/v3.1

    Swoją drogą, nie widziałem nigdzie IP changera pod 10.22 i musiałem stworzyć własnego - jeśli mieliście podobny problem i chcecie przetestować to proxy, mogę opisać, jak to zrobić ;)
    Ostatnio zmieniony przez deathplanter : 23-11-2013, 00:31

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. [tibiaproxy by d33tah] Oficjalny temat
    Przez deathplanter w dziale Tibia
    Odpowiedzi: 11
    Ostatni post: 23-03-2014, 14:10
  2. Python szybka pomoc
    Przez Criss26 w dziale Programowanie
    Odpowiedzi: 4
    Ostatni post: 31-01-2014, 15:40
  3. [Python][XML]Wyciągnięcie attrybutu od wybranego roota
    Przez Rysiek w dziale Programowanie
    Odpowiedzi: 5
    Ostatni post: 29-11-2013, 19:16
  4. [TA] tibia auto python script
    Przez Mandor Silo w dziale Tibia
    Odpowiedzi: 1
    Ostatni post: 13-09-2013, 11:25

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •