Heute zeige ich euch wie ihr euch euren ganz Persönlichen Stalker-Bot basteln könnt der alle Freehack User ausspäht die gerade Online sind ![Tongue](images/smilies/tongue.png)
Damit könnt ihr dann eure ganz eigene Version eines Überwachungsstaates aufbauen indem kein User mehr vor eurem Stalking sicher sein wird.. whoa - ist das nicht toll (nein, ises nisch..) ?![Applause](images/smilies/applause.png)
"Aber :O !... Wie soll das gehn?".. hör ich jetzt einige Fragen
und hier habt ihr die Antwort
..
![](http://i.imgur.com/eoIi1pe.jpg)
Free-Hack zeigt schon zu jedem User (auf seiner Profilseite) an was er gerade tut - wir müssen garnicht mehr selbst stalken, denn das tut schon die Forensoftware für uns ![Applause](images/smilies/applause.png)
Und da es natürlich SUPI anstrengend ist jeden User alle paar Sekunden / Minuten anzuklicken um ihn auszuspionieren, basteln wir uns jetzt mal ein Tool das dies für uns erledigt.
Dieses Tool wird folgendes tun können:
- Online User anzeigen
- Zeigen welchen Rang die User besitzen (Moderator? Super Moderator? Normaler User? Admin? etc)
- Zeigen welchen Aktivitäten diese User nachgehen
Der einfachheit halber werde ich das ganze mal in PHP machen weil mir grade die Same-Origin-Policity meines Browsers aufn Senkel geht
.. sonst hätte ich euch das ganze in Javascript erklärt wie in 90% der Fälle
Jedoch werde ich einige Aspekte nur Theoretisch behandeln um nicht zu krass zu Spoonfeeden. Dieser Thread soll lediglich dazu dienen Anfängern mal zu zeigen wie man von einer Idee zu einem fertigen Tool kommen kann. Ich Versuche hier die Denkweise beim Entwickeln von einem Tool aufzuzeigen quasi.
Fangen wir an - was benötigen wir zunächst? Genau - wir müssen rausfinden.. "Ja, welche Person ist gerade denn überhaupt ausspähbar (online) ? :O".
Dies tun wir mithilfe der Startseite von Freehack. Auf dieser steht nämlich ganz unten eine Liste der gerade Online befindlichen User und die Anzahl der Gäste.Diese Liste ist auch einsehbar ohne das wir in unserem Useraccount eingeloggt sind. Wir können also ganz einfach einsehen wer Online ist.
Doch wie setzen wir das nun in PHP um? Nun, im Grunde ist dies garnicht mal so kompliziert. Wir müssen uns vom Server einfach nur die Startseite als
HTML Sourcecode zuschicken lassen, und diesen dann Analysieren. In diesem Sourcecode steht alles enthalten was ihr auch mit euren Augen im Browser
auf der Startseite sehen könnt. Am einfachsten können wir den Server anweisen uns die Startseite zu schicken indem wir in PHP mit der Funktion file_get_contents arbeiten.
Mit der file_get_contents Funktion weisen wir den PHP Interpreter an, die URL die wir der Funktion übergeben beim jeweiligen Server anzufragen und die Antwort des Servers anschließend in eine Variable zu speichern. Würden wir also die Startseite von Freehack uns vom Server zuschicken lassen wollen, würden wir dies so tun:
Code:
<?php
$raw_html = file_get_contents("http://free-hack.com/index.php");
?>
Dieser Sourcecode frägt vom Server von Freehack die Startseite (index.php) an.
Die Antwort des Servers (Inhalt der index.php ohne PHP Code) wird dann von unserem Code in der Variable $raw_html gespeichert.
Wenn wir uns nun anschauen wollen, wie dieser Sourcecode den wir als Antwort erhalten aussieht, können wir ihn Testweise mal uns im Browser mit der echo Funktion anzeigen lassen:
Code:
<?php
$raw_html = file_get_contents("http://free-hack.com/index.php");
echo $raw_html;
?>
Nun solltet ihr die Typische Startseite von Freehack vor Augen haben wenn ihr eure PHP Datei im Browser aufruft.
Was passiert hier genau? Nun. Der Server von Freehack schickt uns den Sourcecode der Startseite von Freehack.
Dieser Sourcecode besteht zu einem großen Teil aus HTML, CSS und Javascript. Mit diesen Scriptsprachen
werden Webseiten quasi entwickelt. Browser nehmen nun diesen Sourcecode, und rendern daraus "Interaktive Bilder".
Wir kennen diese "Interaktive Bilder" auch als Webseiten. Alles was ihr auf einer Webseite sehen könnt ist entweder
bestehend aus HTML, CSS, JS, einem Bild oder weiteren Interpreter & Scriptsprachen. Und wir übergeben mit der
echo Funktion nun den Sourcecode der Startseite den uns der Server zuschickte an den Browser.
Daraufhin erkennt unser Browser "Das ist eine Webseite!" und beginnt die Webseite für uns zu rendern.
Dies ergibt dann die Typische Startseite von Freehack die wir kennen und lieben ![Cool](images/smilies/cool.png)
Nun interessiert uns aber nur ein spezieller Abschnitt dieser Startseite.. und zwar der Abschnitt ganz unten.. die Liste mit gerade aktiven Usern und Gästen.
Das bedeutet für uns - da wir nur diesen Abschnitt benötigen, können wir den Rest ohne Sorgen entsorgen ![Redface](images/smilies/redface.png)
Stellt euch vor ihr habt eine Zeitung mit einer Anzeige drine die euch interessiert.. und nun schnippelt ihr diese Anzeige mit einer Schere raus.
Den Rest der Zeitung könnt ihr dann einfach entsorgen. Genau das gleiche machen wir mit Hilfe von PHP & dem Sourcecode unserer Webseite.
Zunächst müssen wir aber mal schauen welcher Abschnitt im Sourcecode denn eigendlich die Userliste repräsentiert.
Da ich jetzt aber kein Tutorial über das Reversen oder Entwickeln von HTML Sourcecode machen möchte, beschleunige ich das ganze mal.
So schaut der Abschnitt aus der uns Interessiert:
Code:
<div id="wgo_onlineusers" class="wgo_subblock section">
<h3 class="blocksubhead"><img src="images/Seamus/misc/users_online.png" alt="Zurzeit aktive Benutzer" />Zurzeit aktive Benutzer</h3>
<div>
<p><a href="online.php">37 Benutzer sind online</a>. <span class="shade">Registrierte Benutzer: 3, Gäste: 34</span></p>
<p>Mit 4.283 Benutzern waren die meisten Benutzer gleichzeitig online (08.01.2016 um <span class="time">14:59</span> Uhr).</p>
<ol class="commalist" id="wgo_onlineusers_list">
<li><a class="username" href="https://free-hack.com/member.php?79644-PadX18"><font color=#A12C1C>PadX18</font></a>, </li>
<li><a class="username" href="https://free-hack.com/member.php?56611-SONY37"><font color=#A12C1C>SONY37</font></a>, </li>
<li><a class="username" href="https://free-hack.com/member.php?81741-sp47"><font color=#A12C1C>sp47</font></a></li>
</ol>
</div>
</div>
Hier können wir sehen das gerade PadX18, SONY37 und sp47 online ist.
Wir sehen hier auch noch weitere Informationen wie beispielweise wieviele Benutzer gerade online sind, wieviele Gäste etc.
Kurz gesagt - diese Informationen sind NÜTZLICH für unser Tool das wir entwickeln wollen.. diesen Abschnitt würden wir sehr gerne aus dem restlichen Sourcecode rausschneiden!
Doch.. aber.. wie machen wir das? :O Das ist eigendlich auch nicht sonderlich schwer! Ich habe dafür vor einer ganzen Weile mal eine PHP/JS Funktion geschrieben mit der das ganze sehr einfach ist.. ich zeige sie euch mal:
Code:
//Slice a Text out of String
function SliceText($txt, $a, $b, $num)
{
$txt = explode($a,$txt);
$txt = explode($b,$txt[1+$num]);
$txt = urldecode($txt[0]);
return $txt;
}
Um zu verstehen was diese Funktion tut, müssen wir zunächst wissen was explode() tut.
Einfach gesagt.. mit Explode können wir einen String an immer einer bestimmten Stelle abtrennen.
Beispiel: Sagen wir, wir haben eine Liste in dem Namen mit Kommas voneinander getrennt sind.
Code:
Hans, Markus, Mäxlein, Hasi, Julia, Whatever
Nun würden wir gerne die Namen in einem Array haben um sie weiter verwenden zu können.
Würden wir nun explode auf diese Liste anwenden und das Komma als Trennzeichen wählen, würde
explode() jeden Namen nehmen und in ein Array packen.
Code:
$liste = "Hans, Markus, Mäxlein, hasi, Julia, Whatever";
$namen = explode(',', $liste);
damit würden explode() uns in der Variable $namen ein Array abspeichern in dem jeder Name unserer Liste jeweils ein Element im Array einnimmt.
Quasi ein ["Hans", "Markus", "Mäxlein", "hasi", "Julia", "Whatever"]; - Der erste Parameter von explode() definiert an welcher Stelle es abgetrennt werden soll.
Und meine Funktion schneidet nun einfach mit Hilfe der explode() Funktion einen bestimmten Abschnitt aus einem Text.
Man kann hier mit meiner Funktion den Anfang & Ende bestimmen wo die Funktion jeweils den Text abtrennen soll.
Ich zeige euch mal wie wir die Funktion nutzen können:
Code:
$Daten = "<alter>100</alter>";
$Alter = SliceText($Daten, '<alter>', '</alter>', 0);
Dies führt nun dazu das alles was nach <alert> und vor </alter> steht rausgeschnitten wird.
Damit könnten wir beispielweise XML Dokumente Parsen und Informationen aus ihnen extrahieren (wie das alter hier im Beispiel).
Diese Funktion ist sehr nützlich wenn man aus HTML Code bestimmte Abschnitte & Informationen rausschneiden möchte.
Da wir wissen wie der Sourcecode unserer Startseite aussieht, können wir nun auch den Abschnitt ausschneiden den wir benötigen.
Wir wissen das der Abschnitt mit
Code:
<ol class="commalist" id="wgo_onlineusers_list">
beginnt.. und mit
endet. Was tun wir also? Genau.. wir schreiben unseren PHP Code folgendermaßen um:
Code:
$raw_html = file_get_contents("http://free-hack.com/index.php"); //raw html site
$spliced = SliceText($raw_html, '<ol class="commalist" id="wgo_onlineusers_list">', '</ol>', 0);
Nun haben wir den Abschnitt den wir benötigen rausgeschnippelt - er steht nun in der Variable $spliced.
Wenn wir uns nun den Abschnitt im Browser mit der echo() Funktion von PHP anzeigen lassen, erhalten wir folgendes:
![](http://i.imgur.com/fjdUdIZ.jpg)
Wir sehen.. das sind die User die gerade Online sind. Da aber unser Browser den Sourcecode interpretiert hat, sehen wir nur die Liste der User.
Nicht aber die zusätzlich vorhandenen Informationen im Sourcecode. Die Informationen sind aber selbstverständlich noch vorhanden!
Wir können nun das Spiel weitertreiben und mit der selben Vorgehensweise weitergehend Informationen aus diesem Abschnitt auslesen.
Wenn wir uns mal oben den Sourcecode des Abschnittes anschauen, sehen wir dort das wir dort die Namen der User haben, aber auch einen Link zu ihrem Profil.
Was benötigt unser Tool nun?
- Die Namen der User natürlich!
- Die Links zu ihren Profilen!
Beides können wir mithilfe meiner Funktion ganz einfach rausschneiden. So nun speichern wir uns die Namen der Aktiven User und ihr Profillink in Variablen.
Nun müssen wir aber noch wissen was der jeweilige User gerade tut.. und dies sehen wir.. na? Na?... NAA?????? NAAAAA?!?!?!
Genau.. auf ihrer PROFILESEITE.. zu der wir ja den Link schon ausgelesen haben
!
Was tun wir also? Ihr habt es erfasst.. wir bitten den Server von Freehack uns doch Netterweise den Sourcecode der Profilseite des Users XYZ zu senden.
Doch dabei merken wir.. outch. Der Server verbietet uns das! Wir sind nicht eingeloggt sagt er ![Frown](images/smilies/frown.png)
![Confused](images/smilies/confused.png)
Nun.. das kommt daher, weil wir uns halt noch nicht eingeloggt haben. Wir haben auch keinen Cookie einer aktiven Session eines Useraccounts der gerade eingeloggt ist mitgeschickt.
Dies bedeutet für uns - wir müssen uns beim Server authentifizieren! Und das geht mit file_get_contents(); NICHT (so einfach).
Dafür müssen wir etwas umständlicher agieren - das überlasse ich dann aber euch, denn dies solltet ihr ohne Probleme hinbekommen.
Ich gebe euch einen Tipp - ihr benötigt dafür http://us3.php.net/curl & müsst bei euren Requests dann entweder ein Login nachbasteln,
oder ein Cookie einer Aktiven Session mitschicken. Was von beidem ihr tut, überlasse ich EUCH (das ist der anti-spoonfeed part
).
Haben wir nun eine aktive Session in der wir eingeloggt sind, senden wir erneut unseren Request an den Server mit der Bitte
uns doch bitte die Profilseite des Users XYZ zu schicken. Wir bekommen nun Brav vom Server den Sourcecode zugeschickt wie schon
bei der Startseite vorhin. Nun müssen wir genau das gleiche tun wie zuvor schon - wir schnippeln uns einen bestimmten Abschnitt aus
dem Sourcecode, und lesen dann dort die Informationen aus die uns Interessieren. Dies ist in diesem Fall was der User gerade tut.
Code:
<dl class="stats">
<dt>Jetzt online</dt>
<dd> Betrachtet die Startseite <a href="https://free-hack.com/index.php">Free-Hack.com</a></dd>
</dl>
<dl class="stats">
<dt>Letzte Aktivität</dt>
<dd> Heute <span class="time">14:47</span></dd>
</dl>
Dieser Abschnitt ist der, der uns für unser Tool interessiert.
Hier können wir sehen was der User gerade tut, und wo er es tut (hier betrachten der Startseite mit Link inclusive).
Wir schnippeln also mit unserer geliebten SliceText() Funktion die wichtigen Informationen heraus und speichern sie
in Variablen. Im Grunde haben wir nun alle Wichtigen Informationen die wir für unser Tool benötigen.
Wir müssen das ganze jetzt nur zusammentackern zu einem Tool
Der Tool Programmablauf könnte so ausschauen:
1) Welche User sind Online? (zwischenspeichern der profillinks und nicknames)
2) in einer For Schleife die Liste der Profillinks abklappern & Auslesen was der User grade tt
3) Anzeigen der Aktiven User + ihrer derzeitigen Tätigkeit
Simpel und einfach in eine GUI gepackt könnten wir dies alle 5 Minuten laufen lassen und in einer Datenbank speichern oder in unserem Tool anzeigen lassen.
Voila - unser Stalker Tool wäre fertig. Wir könnten nun immer auf einem Blick sehen was jeder User tut ohne ständig Manuell uns durch die Profillinks zu klicken.
Zum Abschluss möchte ich jedoch noch einige Wichtige Informationen aufzählen:
1) Server Betreiber können es auf den Tod nicht ausstehen wenn man mit solchen Tools Server Ressourcen verbraucht. Ich bitte euch daher die Requests eurer Tools auf einem extrem niedrigen Level zu halten. Das heißt das ihr nicht alle 5 Sekunden oder gar ms eure Requests raushaut sondern eher alle 10 Minuten oder jede Stunde einmal.
Bei zu häufigen Zugriffszahlen kommt das ganze sonst einer DOS Attacke gleich und wäre extrem Schädlich & Unschön. Seid also bitte Brav und spammt Server nicht mit euren Requests zu. Ich hafte für keine Schäden die ihr durch Dummheit bei irgendwelchen Server erzeugt!
2) Der 4. Parameter meiner SliceText() Funktion ist dazu da, damit ihr durch verschiedene Einträge switchen könnt die häufiger auftretten.
Beispiel:
Code:
"<alter>10</alter><alter>24</alter>"
Wir haben hier 2 mal die gleiche Art von Anfang & Ende die wir in der SliceText() Funktion eintragen können.
Damit unsere Funktion nun aber weiß das wievielte Einträgchen ihr möchtet, könnt ihr dies angeben.
Code:
SliceText($txt, "<alter>", "</alter>", 0)
Wäre der 1. Eintrag (10 Jahre).. und
Code:
SliceText($txt, "<alter>", "</alter>", 1)
dann der 2. (24 Jahre).
Dies ermöglicht euch mehrere Einträge in z.b einer For Schleife durchzuswitchen um mehrere Einträge durchzuarbeiten.
3)
Ihr habt sicher bemerkt das ich euch nicht erklärt habe wir ihr dem Tool beibringen könnt den Rang eines Users zu erkennen.
Das ist eine Aufgabe die ihr nun selbst erledigen könnt. Tipp: Nickname Farbe & Profileseite ![Wink](images/smilies/wink.png)
So.. das wars eigendlich jetzt mit dem Thread.. ich hoffe das er zumindestens ein bisschen geholfen hat.
Grüße