Kodierungsfrage

Also, wenn ich von der unkodierten Variante auf die kodierte kommen möchte, dann muss ich erst aus jedem Buchstaben den Ascii Code machen, diesen dann in mehrere Zahlen teilen (also einfach in 2 Differenten teilen), diese in ne Klammer schreiben und von den den Hex-Code errechnen, oder? :D
 
Hi,

So in etwa. Hier mal ein kleines Beispiel:
Zeile: image.setAttribute('src', 'http://www.domain.de/', 0);

PHP:
<?
function decode($str)
{
	$coded = "";
	for($i=0;$i<strlen($str);$i++)
	{
  		if($coded != "")
  		{
  			$coded .= ", ";
  		}
		$coded .= ord($str[$i]);
	}
 return $coded;
}

echo 'image.setAttribute(String.fromCharCode('.decode("src").'), String.fromCharCode('.decode("http://www.domain.de/").'), 0)';
?>

Das mit den Zahlen splitten usw kannst du ja noch mit einbauen. Den Code sollte man eigentlich verstehen können.
 
Warum geht das nicht?:

PHP:
//
// Eine Zahl in $nParts Summanden / Differenden splitten.
// Dieses als Array zurückgeben
function numberSplit ( $int, $nParts )  
{ 
    $orig = $int;
    $ary = array(); 
    $d = 0; 
    $z = $int;    
    $ary[] = $orig;
    
    // Zufallszahlen subtrahieren 
    while( (count($ary)-1) < $nParts ) { 

        $rand = mt_rand(1, $int ); 
        
        $ary[] = $rand; 
        $int -= $rand;
        $d += $rand;
    } 
    
    $ary[ $nParts-1 ] += ($z - $d);
    
    // Zahlen vergrößern
    /*$fak = mt_rand( 1000, 3000 );
    
    foreach( $ary as $k => $v ) {
        $ary[ $k ] = $ary[ $k ] * $fak;
    }
    
    $ary[] = $fak;*/
    
    return $ary; 
}  

//
// Konvertiert jedes Element in die Hexadezimalschreibweise
function convToHex( $ary )
{
    foreach($ary as $k=>$v) {
        $ary[ $k ] = '0x' . base_convert( $ary[ $k ], 10, 16 );
    }
    
    return $ary;
}

//
// Dekodiert einen String. Erst wird jedes Zeichen in einen Ascii Code umgewandelt,
// danach wird dieser Code gesplittet und die einzelnen Teile in Hexadezimalzahlen umgewandelt
function decode( $str )
{
    $coded = '';
   
    for( $i = 0; $i < strlen($str); $i++){
        // Ascii Zeichen erstellen
        $asc = ord( $str{$i} );
        // Nun den Ascii Code splitten
        $ascs = numberSplit( $asc, mt_rand(1, 3));
        // Nun jedes Element in hex umschreiben
        $ascs = convToHex( $ascs );
        
        #$quot = $ascs[ count($ascs)-1 ];
        // Nun als Differenz schreiben
        $diff = '((' . implode('-', $ascs) . ')';
        #$diff .=  '/' . $quot;
        $diff .= ')';
        
        $coded .= $diff . ',';
    }
    
    $coded = substr($coded, 0, strlen($coded)-1 );
    
    return $coded;
}

//
// Erstellt für jedes Element den Fake-Code und gibt diese in einem Array zurück
function createFake( $ary )
{
    $coded = array();

    $var = "var image{6}=document.createElement({1});image{6}.setAttribute({2},{3},0);image{6}.setAttribute({4},1,0);image{6}.setAttribute({5},1,0);var paragraph{6}=document.getElementById({7});paragraph{6}.appendChild(image{6});";
    
    $i = 0;
    foreach($ary as $fakeP => $domain) {
        $co = str_replace(     
                            array(
                                    '{1}',
                                    '{2}', 
                                    '{3}', 
                                    '{4}', 
                                    '{5}', 
                                    '{6}', 
                                    '{7}'
                                 ),
                            array(
                                    'String.fromCharCode(' . decode('img') . ')',
                                    'String.fromCharCode(' . decode('src') . ')',
                                    'String.fromCharCode(' . decode( $domain ) .')',
                                    'String.fromCharCode(' . decode('width') . ')',
                                    'String.fromCharCode(' . decode('height') . ')',
                                    ++$i,
                                    'String.fromCharCode(' . decode( $fakeP ) .')',
                                 ),
                            $var
                          );
        $coded[] = $co;    
    }
    
    return $coded;
}

/************************** START CODE ***********************************/
$ary = array(
                'a' => 'domain.de',
                'b' => 'nsane.de', 
                'c' => 'google.de', 
                'd' => 'bla.de'
            );

print_r( createFake( $ary ));

Wenn ich versuche, mal testweise das stringFromCharcode auszugeben, dann kommt nur e raus :// Wo liegt dort der Fehler?
 
Zurück