[ wex-alpha @ 20.05.2011. 20:44 ] @
Iz hobija sam pokusao napraviti aplikaciju preko koje se moze logovati na Facebook. Nisam htio da koristim nijedan API, zbog nekoliko razloga. Sa API-jem je vec gotovo sve odradjeno, a i mora se uzeti onaj developer key... mrzilo me da citam sta je potrebno da se dobije. Dakle, app je trebao imati sljedece stvari: - Da je wpf - Da se ne koristi nijedan API - Da izvuce sve frendove i njihove: *slike *albume - Da se moze spamati :D Aplikacija je gotova sa nekoliko bugova, ali bitno je da radi. Necu stavljati source, ali cu staviti smjernice i ukazati na probleme na koje sam nailazio, pa ako neko zeli napraviti nadam se da ce mu biti lakse nego meni. Kao prvo krenuo sam na sljedeci nacin, sve rucno: Code (csharp): HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create("https://login.facebook.com/log...2F%2Fm.facebook.com%2Fhome.php"); ///jos koda Uspjesno sam se logovao, ali fb trazi da identifikujem novi PC sa kojeg sam se logovao. Dakle jos mnogo posla. Svaki zahtjev se mora rucno obradjivati. Na kraju sam se odlucio za webbrowser kontrolu. Cisto da ne moram paziti na cookies, i pracenje requestova. Dakle ovo: Code (csharp): webBrowser1.Navigate(new Uri("http://www.facebook.com/")); mshtml.HTMLDocument fb1 = ((mshtml.HTMLDocument)this.webBrowser1.Document); Ali problemima tu nije kraj. Buduci da sada simuliram click, FB krije id login dugmeta. Dinamicki ga mijenja svaki put, ali evo lijeka i za to: Code (csharp): string[] rijeci= fb1.body.innerHTML.ToString().Split('<'); //sve strpaj u array string [] rrrr = rijeci[38].Split(' '); // uzmi 38 element arraya te ga razbi po space string falakurcu = rrrr[1].Replace("id=", ""); // 1 element koji sadrzi submit, ukni mu id= da bi dosli da naseg ID-a :) /* TO DO: Izbaciti parsiranje po elementu [38], vec koristiti parsiranje po kljucnoj rijeci. Mor TO DO: Napraviti listu kljucnih rijeci putem kojih se vrsi parsiranje */ i nakon toga: Code (csharp): ((mshtml.IHTMLElement)fb1.all.item("email")).setAttribute("value", "korisnickoime"); ((mshtml.IHTMLElement)fb1.all.item("pass")).setAttribute("value", "password"); //persist u html-u se moze aktivirati na click, ako ne zelimo biti logovani svaki put ((mshtml.HTMLInputElement)doc.all.item(falakurcu)).click(); Sad smo napokon logovani. Dodouse FB trazi identifikaciju, tj. potvrdu novog PC-a, ali se to moze detektovati parsiranjem, fb1. Na srecu, fb uvijek koristi iste tagove pa se moze analiziranjem fb1 utvrditi sta hoce fb. Ima i slucaj kada fb trazi da se verifikuje email za nalog koji koristite, ali i to je lagano za detektovati. I na kraju, necu dati sourse gotove aplikacije, ali ako neko zeli mogu mu pomoci :) PS Spamanje necijeg zida, se lagano rijesava... fb ima onu opciju da se blokira nezeljeni korisnik. :) PSS web kontrola vam jedino sluzi kao sredstvo komunikacije sa fb... uposte ne mora biti vidljiva na ekranu. |