Fotka.pl poddała się ;)
27 stycznia 2008
Ha! 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:
-
var so = new SWFObject("
-
<xsl:value-of select="/fotka/k/img_url">
-
swf/g8.swf","g","360","44","9.0.20","#ffffff");
-
so.addVariable("user_id", "
-
<xsl:value-of select="/fotka/profil/id">
-
");
-
so.addVariable("profil_id", "
-
<xsl:value-of select="/fotka/profil/user_id">
-
");
-
so.addVariable("login", "
-
<xsl:value-of select="/fotka/profil/login">
-
");
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ę
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
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
Blog przede wszystkim o Internecie i mojej pasji jaką jest tworzenie stron www. Ale nie ograniczam się do jednej tematyki, piszę o wszystkim o czym mam ochotę :-)
xxx napisał: 28.01.08 o godzinie 23:07
MariuszT napisał: 29.01.08 o godzinie 0:16
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ą.
xxx napisał: 29.01.08 o godzinie 1:02
No to teraz będzie gówno w rankingu i fotka.pl będzie niewiarygodna -,- chyba ze administracja cos zmieni
xxx napisał: 29.01.08 o godzinie 1:03
Znając życie to Fotka będzie się czepiała do tego posta
MariuszT napisał: 29.01.08 o godzinie 10:10
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ą.
xxx napisał: 29.01.08 o godzinie 19:26
Na nic ci się to nie zda już
Fotka wprowadziła nowe blokady ;]
MariuszT napisał: 29.01.08 o godzinie 19:58
Ooo no to jeszcze dzisiaj postaram się sprawdzić co tam nowego zrobili
mars napisał: 29.01.08 o godzinie 20:57
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
xxx napisał: 29.01.08 o godzinie 22:26
Oj dałeś za mało ;]
xxx napisał: 29.01.08 o godzinie 22:26
Teraz musisz sie pobawić z systemem binarnym Base64 Hex i MD5 wątpie żeby Ci się udało
MariuszT napisał: 30.01.08 o godzinie 0:55
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
rallacS napisał: 30.01.08 o godzinie 2:27
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….
xxx napisał: 30.01.08 o godzinie 18:18
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
MariuszT napisał: 30.01.08 o godzinie 18:28
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
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
Zabawa w kotka i myszkę z fotka.pl napisał: 30.01.08 o godzinie 21:33
[...] niedzielę we wpisie Fotka.pl poddała się napisałem instrukcję w jaki sposób odszyfrować tajemniczą zmienną pktt. A jest to potrzebne [...]
xyz napisał: 31.01.08 o godzinie 20:04
hehe
bo poc o ślęczeć i analizowac kod 
ja nawet napisałem program w javie, który w pewnym stopniu zamienia bytecode na AS
pozdro
MariuszT napisał: 31.01.08 o godzinie 21:12
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.
xxx2 napisał: 25.03.08 o godzinie 16:43
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
/??
Anonim napisał: 09.04.08 o godzinie 17:24
:/
HAPPY STEFAN napisał: 04.05.08 o godzinie 17:35
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 ;/
MariuszT napisał: 04.05.08 o godzinie 19:54
W takim razie wystarczy ustawić odpowiednie opóźnienie
ktos:p napisał: 13.05.08 o godzinie 3:30
i jak ci poszlo z tym programem? probujesz cos dalej?
MariuszT napisał: 13.05.08 o godzinie 23:52
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ć.
kixner napisał: 15.05.08 o godzinie 19:00
Co jak co, ale na osadzie to jest jeszcze latwiejsze
MariuszT napisał: 15.05.08 o godzinie 19:43
Wcale nie zaprzeczam
Na osadzie nie trzeba kombinować bo to nie jest taki łakomy kąsek jak fotka.pl
ktos:p napisał: 01.06.08 o godzinie 12:47
moze sprobuj napisac ten program:) chetnych bedzie napewno bardzo duzo:) i dzieki temu bedziesz mogl rowniez zarabiac na zycie:)
Anonim napisał: 30.07.08 o godzinie 15:42
;(
eee napisał: 06.09.09 o godzinie 14:46
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ł.