[C# - JS] Webrequest mit Evercookie

03/01/2015 22:52 Njahs#1
Guten Abend,

ich habe ein Problem mit der Javascript API Evercookie ([Only registered and activated users can see links. Click Here To Register...], [Only registered and activated users can see links. Click Here To Register...]) im Zusammenhang mit Httpwebrequests in C#. Sobald ich versuche, für (in diesem Beispiel) eine Seite abzustimmen, werde ich vom Server als Bot enttarnt. Selbst wenn ich besagte Cookies manuell erstelle, hilft es nicht.

www(.)topliste.top(-)pserver.com/in/3635-kizu2-org.html

Anhand des Beispieles dieser Seite habe ich versucht, eine Lösung zu finden, Evercookie zu umgehen bzw. auszutricksen, jedoch ohne erfolg.

Das Hauptproblem scheint darin zu liegen, den Cookie, in diesem Fall heißt dieser "topl", manuell so zu erstellen, dass die Seite diesen annimmt und mich nicht als Bot enttarnt. Dies kann getestet werden, indem man Javascript in seinem Browser deaktiviert.

All das soll über Httpwebrequests geschehen, jedoch habe ich bislang nach langer Suche und Recherche keine Lösung meines Problems gefunden.

Nun meine Frage - Kennt sich damit jemand aus oder hat damit bereits Erfahrungen gemacht?

Grüße
03/03/2015 11:18 Mostey#2
Wenn der Cookie (oder was auch immer da notwendig ist, geht aus deinem Post nicht so ganz hervor und ich habe gerade keine Zeit mir die Seite genauer anzuschauen) durch JavaScript Code gesetzt/modifiziert/berechnet wird, hast du so wie ich das sehe nur 2 Möglichkeiten:

- Du emulierst einen Browser der JavaScript Code ausführen kann und tust exakt das selbe mit diesem Browser, was du auch sonst tun würdest. Dazu gibt's beispielsweise im WinForms Framework ein WebBrowser Control, welches du auch verstecken kannst.

- Du findest heraus, was der JavaScript Code macht (also wie er den Cookie berechnet) und nutzt das, um einen gültigen HTTP Request zu bauen.

Wie sieht's mit deinem Code aus? Vielleicht machst du ja dort etwas falsch?
03/03/2015 17:15 Njahs#3
Quote:
Originally Posted by Mostey View Post
Wenn der Cookie (oder was auch immer da notwendig ist, geht aus deinem Post nicht so ganz hervor und ich habe gerade keine Zeit mir die Seite genauer anzuschauen) durch JavaScript Code gesetzt/modifiziert/berechnet wird, hast du so wie ich das sehe nur 2 Möglichkeiten:

- Du emulierst einen Browser der JavaScript Code ausführen kann und tust exakt das selbe mit diesem Browser, was du auch sonst tun würdest. Dazu gibt's beispielsweise im WinForms Framework ein WebBrowser Control, welches du auch verstecken kannst.

- Du findest heraus, was der JavaScript Code macht (also wie er den Cookie berechnet) und nutzt das, um einen gültigen HTTP Request zu bauen.

Wie sieht's mit deinem Code aus? Vielleicht machst du ja dort etwas falsch?
Erst einmal danke für die Antwort.

Die erste Idee kam mir selbst schon einmal in den Sinn, jedoch möchte ich diese nur in Erwägung ziehen, wenn ich keine andere Möglichkeit habe.

Das Inhalt des Cookies ist ein String, der durch die Funktion hex_md5 verschlüsselt wurde ('Math.random() + "un"+ new Date().getTime()'). Soweit kein Problem, außer, dass es mein Problem nicht löst, selbst wenn ich mir den besagten Hex selbst generiere und als Cookie mitgebe.

Mein momentaner Code sieht so aus

Main.cs

WebLX.cs

So sieht der Request Header aus:


Ich bedanke mich nochmal für die Antwort :)

Grüße
03/06/2015 13:27 Mostey#4
Ich persönlich würde die Generierung dieses ominösen Cookies mal rausnehmen. Wird der Cookie sofort gesetzt, wenn du die Seite besuchst oder erst nach dem Login? Grundsätzlich würde ich vor dem Login einen einfachen GET Request auf die Hauptseite setzen, den CookieContainer mitgeben und zwischenspeichern, damit du ihn beim nächsten POST Request mitgeben kannst. Vielleicht setzt die Seite einige Cookies beim ersten Seitenaufruf und kann so sicherstellen, dass es sich um einen Bot handelt. (Niemand kann sich über den Browser einloggen ohne die Loginmaske gesehen zu haben. Da der Browser zuerst ein GET Request absetzt, wäre das hier das erste, was ich testen würde)

Ein 1:1 Vergleich zwischen Request und Response mit dem Browser und deinem Programm wäre hilfreich.