Fotka.pl poddała się ;)

27 stycznia 2008

fotka.plHa! Udało się ;) Przyznam, że programiści fotka.pl zrobili wiele aby utrudnić automatyczne głosowanie na zdjęcia ale na pewno oni sami zdają sobie sprawę, że nie da się tego zabezpieczyć w stu procentach. Trochę nad tym posiedziałem i mam gotowe rozwiązanie ;)

A zainspirował mnie program FotkaFucker. Symuluje on kliknięcia myszki. Logujemy się na fotka.pl, włączamy program i idziemy pod prysznic a program sam "klika" gdzie trzeba. Trzeba jednak przyznać, że nie jest to rozwiązanie idealne. Tu trzeba programu, który sam się zaloguje na konto, sam będzie odwiedzał kolejne profile i sam zagłosuje a my w tym czasie będziemy mogli normalnie korzystać z komputera. Potraktowałem to jako wyzwanie :)


Gdzie leży problem? W sposobie głosowania. Użyto do tego pliku flash. Nie da się już tak łatwo odczytać co i gdzie należy wysłać żeby głos został oddany.

Ale od początku. Wchodzimy na fotka.pl, logujemy się na swoje konto, wybieramy dowolny profil, włączamy sniffer i oddajemy głos. Szybko okazuje się, że wywoływany jest taki adres: http://www.fotka.pl/ajax/glosuj.php?user_id=324543&pktt=9743a66f914cc249efca164485a19c5c

I już wiemy, że będą schody... Zmienna user_id to żaden problem ale jak uzyskać zmienną pktt (która oczywiście za każdym razem jest inna)? Skąd ona się bierze? Jedyne co można wywnioskować to to, że jest to pewnie jakiś hash md5.

Otwieramy źródło strony, trochę szperania i docieramy do tego pliku www.fotka.pl/xsl/profil.92.xsl. Znowu szperanie i natrafiamy na taki kawałek kodu:

CODE:
  1. var so = new SWFObject("
  2. <xsl:value-of select="/fotka/k/img_url">
  3. swf/g8.swf","g","360","44","9.0.20","#ffffff");
  4. so.addVariable("user_id", "
  5. <xsl:value-of select="/fotka/profil/id">
  6. ");
  7. so.addVariable("profil_id", "
  8. <xsl:value-of select="/fotka/profil/user_id">
  9. ");
  10. so.addVariable("login", "
  11. <xsl:value-of select="/fotka/profil/login">
  12. ");

No dobra... Widać, że do pliku swf przekazywane są trzy zmienne. Flash je w jakiś sposób mieli i przekazuje do skryptu glosuj.php dwie zmienne: user_id w niezmienionej postaci oraz tajemniczą zmienną pktt. Nie ma wyboru, trzeba się bliżej przyjrzeć plikowi http://s.fotka.pl/img/swf/g8.swf

Istnieją dekompilatory plików swf. Potrafią wyciągnąć z flasha pliki graficzne, dźwięki a nawet Action Script i zapisać to jako plik źródłowy fla (chociaż oczywiście bywają różne problemy). I wszystko byłoby pięknie gdyby nie to, że nasz g8.swf został napisany pod Flash 9 i w Action Script 3. A na to jeszcze dekompilatorów nie ma... :) A przynajmniej nie takich, które potrafią wyciągnąć ładny, sformatowany kod AS3. Ale pewne rozwiązanie pojawiło się już ponad rok temu.

Z pomocą przychodzi projekt Tamarin w którym znajdziemy dekompilator kodu binarnego AS3. Ktoś dobrze pomyślał i powstało narzędzie o którym można tutaj poczytać. Znajdziecie tam także link do działającej z linii poleceń aplikacji pod Windows.

I w ten oto sposób dochodzimy do końca naszej podróży :) Po użyciu wyżej wymienionego programu i zdekompilowaniu pliku g8.swf otrzymujemy coś takiego. Nie wygląda to zbyt pięknie i na pewno nie przypomina kodu Action Script ale można z tego wyczytać jak działa flash.

Więcej nie napiszę :P I tak przyprowadziłem Was pod same drzwi, trzeba teraz tylko wyciągnąć przed siebie rękę i je otworzyć :) Cały ten plik tylko wygląda tak strasznie. Tak naprawdę jest tam ważnych kilka linijek, reszta to implementacja md5 i inne "śmieci". Podpowiem jeszcze tylko tyle, że zmienna login przekazywana do swf to ściema :P Nigdzie to nie jest używane.

Życzę powodzenia w dochodzeniu do prawdy ;) Po rozszyfrowaniu budowy zmiennej pktt wystarczy już tylko proste wysyłanie nagłówków i parsowanie xml i mamy gotowe narzędzie do automatycznego głosowania na fotka.pl :)

 Dodaj komentarz

28 odpowiedzi dla tego wpisu

  1. xxx napisał:

    :( Zawsze ludzie za dużo mówią i potem mają problemy z fotka.pl przez takie właśnie rozpowszechnianie wiedzy dla zwykłych laików fotka.pl to będzie wielkie, wolne i nieprawdomowne bagno w które wstyd wchodzić :( I po co to? Lepiej tego nie rozpowszechniać :)

  2. MariuszT napisał:

    Jak ktoś jest kumaty to sam sobie poradzi bez moich podpowiedzi. Najwyżej więcej czasu mu to zajmie :) A jak ktoś jest laik to dla niego powyższe rozwiązanie i tak jest zagadką.

  3. xxx napisał:

    No to teraz będzie gówno w rankingu i fotka.pl będzie niewiarygodna -,- chyba ze administracja cos zmieni

  4. xxx napisał:

    Znając życie to Fotka będzie się czepiała do tego posta :)

  5. MariuszT napisał:

    Haha a to kiedyś fotka była wiarygodna? No daj spokój, jak w ogóle można tu mówić o jakiejś wiarygodności? :) Ameryki nie odkryłem, jak ktoś chciał to już wcześniej rozkodował zmienną pktt i napisał sobie automat. To jest walka z wiatrakami. Oni na fotka.pl coś zmienią to znowu ktoś inny zacznie to rozkodowywać. Można się tak w nieskończoność bawić w kotka i myszkę.

    Pfff niech się czepiają :) Nie zdradzam tu całej tajemnicy, nie robię nic nielegalnego i do niczego złego nie namawiam ;) Potraktowałem to tylko i wyłącznie jako wyzwanie a wpis pełni rolę edukacyjną.

  6. xxx napisał:

    Na nic ci się to nie zda już :) Fotka wprowadziła nowe blokady ;]

  7. MariuszT napisał:

    Ooo no to jeszcze dzisiaj postaram się sprawdzić co tam nowego zrobili :)

  8. mars napisał:

    ciut zmienili w g12.swf jest teraz:

    57 initproperty count
    59 findproperty lshift
    62 pushstring „(},;”
    65 initproperty lshift
    68 findproperty theUrl
    71 pushstring „/ajax/glosuj.php?user_id=”
    74 getlex glos
    76 getproperty userID
    79 add
    80 pushstring „&pktt=”
    83 add
    84 findpropstrict hex_md5
    86 findpropstrict hex_md5
    88 pushstring „”
    90 getlex glos
    92 getproperty userID
    95 add
    96 pushstring „”
    98 add
    99 getlex glos
    101 getproperty profilID
    104 add
    105 pushstring „”
    107 add
    108 getlocal1
    109 add
    110 pushstring „”
    112 add
    113 getlex count
    115 add
    116 pushstring „”
    118 add
    119 getlex lshift
    122 add
    123 callproperty hex_md5 (1)
    126 callproperty hex_md5 (1)
    129 add
    130 initproperty theUrl

  9. xxx napisał:

    Oj dałeś za mało ;]

  10. xxx napisał:

    Teraz musisz sie pobawić z systemem binarnym Base64 Hex i MD5 wątpie żeby Ci się udało :)

  11. MariuszT napisał:

    Rozkodowałem :) Teraz już nie mam czasu, jutro z samego rana wyjeżdżam ale wieczorem postaram się skrobnąć nowy wpis :) Panowie z fotka.pl, musicie się bardziej postarać :)

    Chociaż z drugiej strony to czego nie będziecie robić to i tak znajdzie się sposób na rozkodowanie tego. Wszystko zależy wyłącznie od determinacji osoby, która próbuje odgadnąć pktt :)

    Wieczorem napiszę więcej, dobranoc ;)

  12. rallacS napisał:

    cytat XXX:
    Teraz musisz sie pobawić z systemem binarnym Base64 Hex i MD5 wątpie żeby Ci się udało :)

    Po tej wypowiedzi mam już całkowitą pewność, że administratorzy fotki.pl nie są wiele mądrzejsi od użytkowników tego portalu….

  13. xxx napisał:

    cytat RALLACS:
    Po tej wypowiedzi mam już całkowitą pewność, że administratorzy fotki.pl nie są wiele mądrzejsi od użytkowników tego portalu….

    Może byś zobaczył cały kod a nie tylko kawałek ? Po twojej wypowiedzi to mi się wydaje że admini są ciut ale to ciut mądrzejsi od Ciebie :)

  14. MariuszT napisał:

    Panowie, spokojnie ;) Nie chcę się mieszać w personalne ataki ale muszę przyznać, że faktycznie mnie również ta wypowiedź trochę rozśmieszyła ;P O tym, że tam jest użyte md5 to pisałem już dużo wcześniej a „system binarny Base64 Hex” rozwalił mnie na łopatki :P Zwłaszcza, że problem z rozkodowaniem aktualnego systemu głosowania leżał gdzie indziej i nie trzeba się martwić ani o md5 ani o base64. Ale zaraz napiszę o wszystkim w nowym wpisie :)

  15. Zabawa w kotka i myszkę z fotka.pl napisał:

    [...] niedzielę we wpisie Fotka.pl poddała się napisałem instrukcję w jaki sposób odszyfrować tajemniczą zmienną pktt. A jest to potrzebne [...]

  16. xyz napisał:

    hehe
    ja nawet napisałem program w javie, który w pewnym stopniu zamienia bytecode na AS :) bo poc o ślęczeć i analizowac kod :D
    pozdro

  17. MariuszT napisał:

    Hehe no można się tak bawić :) Ale ja chciałem tylko sam siebie sprawdzić czy rozwikłam zagadkę i dalej nie będę się tym bawił ;) No chyba, że fotka znowu coś zmieni i okaże się, że nie postarali się za bardzo… :)

    Zresztą już dobrze się poruszam w tym kodzie i nie robi mi to większej różnicy czy wygląda to właśnie tak jak teraz czy jak kod AS.

    A lada chwila pojawi się jakiś dekompilator, który wyciągnie nam ładny kod AS3. Jest już Action Script Viewer. Wersja numer 6 (na razie beta) podobno już sobie z tym radzi tylko program na razie jest dostępny wyłącznie dla klientów ASV5.

  18. xxx2 napisał:

    mnie wkur… ludzie z fotki chcial bym im troszku namieszac co nieco lapie z kompami ale te systemy to czarna magia… macie jkis pomysl jak im namieszac??? jest jakas mozliwosc
    /??

  19. Anonim napisał:

    :/

  20. HAPPY STEFAN napisał:

    Co wam po tym programie jak teraz na fotce jest tak ze jak podejrzysz wiecej niz 300 profilkow w ciagu godziny ma sie bana ;/ na cale 24h ;/

  21. MariuszT napisał:

    W takim razie wystarczy ustawić odpowiednie opóźnienie :)

  22. ktos:p napisał:

    i jak ci poszlo z tym programem? probujesz cos dalej?

  23. MariuszT napisał:

    Nie pisałem programu, chciałem tylko się sprawdzić czy dam radę rozszyfrować obsługę głosowania. Może nawet i chciałbym napisać program ale takich niespełnionych projektów to ja mam dużo ;) Czasu na wszystko brak a jeszcze trzeba jakoś na życie zarabiać.

  24. kixner napisał:

    Co jak co, ale na osadzie to jest jeszcze latwiejsze :P

  25. MariuszT napisał:

    Wcale nie zaprzeczam :) Na osadzie nie trzeba kombinować bo to nie jest taki łakomy kąsek jak fotka.pl ;)

  26. ktos:p napisał:

    moze sprobuj napisac ten program:) chetnych bedzie napewno bardzo duzo:) i dzieki temu bedziesz mogl rowniez zarabiac na zycie:)

  27. Anonim napisał:

    ;(

  28. eee napisał:

    Witam,
    przez przypadek tu trafiłem bo wpisałem do generatora md5 wyraz dupa którego hash odpowiada temu w linku do głosowań:P „9743a66f914cc249efca164485a19c5c” – to tłumacząc na polski znaczy „dupa”. Ciekawy mieli pomysł.

Odpowiedz



Podobne wpisy: