Henryk Plötz: Es gehört hier nicht hin, aber bitte helft mir!

Beitrag lesen

Moin,

Die JavaScript'verschlüsselung' läuft nur auf dem IE. Einige Zeichen stimmen bei NN einfach nicht, evtl. ist dass der unescape(%7e); bug. (Da kommt das Unicode Zeichen für Euro raus.)

Also das Entschlüsseln läuft auch mit PHP ganz super :-)

Das vote.php liefert bei Aufruf mit IE anderen Code:
hier mal in dekodiert:

Ok, ich habe was falsch gemacht. Der Code scheint tatsächlich anders zu sein, wenn der Referer richtig gesetzt wird. Ich hab daher mein Dekodierskript geändert und erhalte jetzt das gleiche Ergebnis.

Das vote2.php antwortet dann mit folgendem -wiederum verschleierten- Script:

Hihi, mein PHP-Dekodierer schluckt auch das ohne Murren.

Nach einigem Nachdenken bin ich zu dem Schluss gekommen, das das ganze wohl 'voting' Scripte verhindern soll, andererseits soll mehrfaches Aufrufen der Abstimmung möglich bleiben.

Das ist dann aber nicht ordentlich durchdacht. Schliesslich erfolgt der Aufruf zur Zahleneingabe vollständig in JavaScript. Ein Autovoter würde aber einfach bloß den nächsten URL raussuchen und diesen aufrufen. (Ich hab es mir mal gespart mein Skript auch noch um diese Funktion zu erweitern)

[1] mit RegExpen ist das rauspfriemeln der interessanten Strings dennoch einfach: /,[a-z]="([^"])*"/ für den "Schlüssel" und /[};][a-z]("([^"])")/ für die "Daten".

Hmm, ich könnte mir auch nicht wirklich vorstellen wie man die Strings ohne Regexpe einfach kriegen kann.

Der Vollständigkeit halber hier mein Skript, vielleicht kann es ja noch jemand bei einer anderen Seite gebrauchen:
<?php
 // konfig:
 $url = "http://www.er-ist-wie-du.de/vote2.php"; // Aufzurufender URL
 $ref = "http://www.er-ist-wie-du.de/starrt.php"; // Anzugebender Referer

// ---
 $purl = parse_url($url);
 $socket = fsockopen($purl["host"], $purl["port"]!=0?$purl["port"]:80, $errno, $errstr, 15);

if(!$socket) die("tod: ".$errstr);
 fwrite($socket, "GET ".$purl["path"].($purl["query"]!=""?"?".$purl["query"]:"")." HTTP/1.0\nHost: ".$purl["host"].($ref!=""?"\nReferer: ".$ref."\n":"")."\n");

$orgfile= "";
 while(!feof($socket)) $orgfile.=fread($socket, 2048);

if(preg_match("/function\s*(\S+)\s*(.*)/is", $orgfile, $matches)) {
  $fnam = $matches[1];
  $file = $matches[2];
 } else die("Falsches Format");

if(preg_match('/\S=0,\S=0,\S="([^"]+)"(.*)/is', $file, $matches)) {
  $dekey = $matches[1];
  $file = $matches[2];
 } else die("Kein Schlüssel");

$z = "";

function decode($p)
 {
  global $z, $dekey;

$p = rawurldecode($p);
  $t = "";

for($i = 0; $i < strlen($p); $i++) {
   $g = ord(substr($p, $i, 1));
   $c = $g ^ (1+$i) ^ ord(substr($dekey, $i % strlen($dekey),1));
   $t .= chr($c);
  }
  $z .= $t;
 }

while(preg_match('/'.$fnam.'("([^"]+)")(.*)/is', $file, $matches)) {
  decode($matches[1]);
  $file = $matches[2];
 }

echo htmlentities($z);  // Quelltext anzeigen
 // echo $z; // Quelltext ausführen
 ?>

--
Henryk Plötz
Grüße aus Berlin