Index: trunk/obscure.php =================================================================== --- trunk/obscure.php (revision 1252) +++ trunk/obscure.php (revision 1253) @@ -1,274 +1,274 @@ #!/usr/local/bin/php <?php if (isset($argv[2]) && $argv[2] != '') { define('SEED', $argv[2]); } else { define('SEED', rand(0, 100000)); } function gen_name($old) { return md5($old.SEED); //return '_n_'.$old; } $functions = array(); $php = file($argv[1]); $n = 1; for($x=0;$x<count($php);$x++) { $line = $php[$x]; if ( preg_match("/^[ ]*\/\/.*?$/", trim($line)) ) { //echo "SKIPPING ".$php[$x]; $php[$x] = ""; continue; //cut comments } if ( preg_match("/^\/\*.*\*\/$/", trim($line)) ) { //echo "SKIPPING ".$php[$x]; $php[$x] = ""; continue; //cut comments } if(substr($line,0,10)=="function _") { $dec_parts = explode(" ",$line,2); $pp = explode("(",$dec_parts[1]); $name = $pp[0]; $attribs="(".$pp[1]; //echo "found func $name attribs: $attribs\n"; $start = $x; for($f=$x;$f<count($php);$f++) { if(substr($php[$f],0,1)=="}") { $end = $f; break; } } if($start && $end && strlen($name)) { $newname = "_".gen_name($n); $n++; $functions[$name] = array("start"=>$start,"end"=>$end,"attribs"=>$attribs,"newname"=>$newname); } } } // print_r($functions); //echo "<PRE>"; print_r($functions); echo "</PRE>"; function GetVarName($s) { $alphabet = "abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $name = ""; $var_end = 0; $char = substr($s,$var_end,1); if(substr($s,0,1)=="$") { $var_end++; $char = substr($s,$var_end,1); } while(is_numeric(strpos($alphabet,$char)) && strlen($char)) { $name .= $char; $var_end++; $char = substr($s,$var_end,1); } return $name; } function obscure_func($NewName,$Attribs,$code) { global $functions; $globals = array(); $globals[] = '$this'; $globals[] = '$_GET'; $globals[] = '$_FILES'; $globals[] = '$_POST'; $globals[] = '$_COOKIE'; $globals[] = '$_SERVER'; $variables = array(); $new_code = array(); for($x=0;$x<=count($code);$x++) { $line = $code[$x]; $line = ltrim($line); $line = str_replace("\t","",$line); $g = strpos($line,"global"); if(is_numeric($g)) { $vars = trim(substr($line,$g+7)); $vars = substr($vars,0,-1); $v = explode(",",$vars); for($z=0;$z<count($v);$z++) $globals[] = ltrim($v[$z]); } $new_code[$x] = $line; } $code = $new_code; for($x=0;$x<count($code);$x++) { foreach($functions as $name=>$attr) { $line = $code[$x]; $code[$x] = str_replace($name,$attr["newname"],$line); } } $VarCount =0; if(strlen($Attribs)>3) { $Attribs = trim($Attribs); $Attribs = str_replace("\t","",$Attribs); //echo "getting attribs from $Attribs\n"; $a = explode(",",substr($Attribs,1,-1)); // echo "got attribs for func [$Attribs]:\n"; // var_dump($a); if (is_array($a) && $a[0] != '') { foreach($a as $attr) { list($attr,$default) = explode('=', $attr); //echo "attr: $attr / def = $default\n"; if ($default != '') { $defaults[$attr] = $default; //echo "stored defaults for $attr\n"; } $variables[$attr] = '$_'.gen_name($VarCount++); } } } for($x=0;$x<count($code);$x++) { $line = $code[$x]; if(!strlen($line)) continue; $p = strpos($line,"$"); while($p>0) { if(substr($line,$p,2)!="$$") { $name=GetVarName(substr($line,$p)); if(strlen($name)) { $name = "$".trim($name); if(!in_array($name,$globals) && !array_key_exists($name,$variables)) $variables[$name] = '$_'.gen_name($VarCount++); } } $p = strpos($line,"$",$p+1); } } for($x=0;$x<count($code);$x++) { // print_r($variables); foreach($variables as $v=>$varname) { //echo "strpos ".$code[$x].', '.$v."\n"; $p = strpos($code[$x],$v); while(is_numeric($p)) { $t = GetVarName(substr($code[$x],$p)); if('$'.$t == $v) { $code[$x] = substr_replace($code[$x],$varname,$p,strlen($t)+1); } $p = strpos($code[$x],$v,$p+1); } } } $o = "function $NewName"."("; if (is_array($a)) { foreach($a as $attr) { list($attr,$default) = explode('=', $attr); $av[] = ($variables[$attr].(isset($defaults[$attr]) ? '='.$defaults[$attr] : '')); } } if(count($av)>0) $o .= implode(",",$av); $o .= ")"; //echo "reversed: $o\n"; $o .= implode(" ",$code); //$o = str_replace("\n","",$o); return $o; } $out = ""; $outline = 0; $shuffled = array_rand($functions, count($functions)); // print_r($shuffled); foreach ($shuffled as $name) { $pos = $functions[$name]; //foreach($functions as $name =>$pos) //{ $dest = $pos["start"]; $newname = $pos["newname"]; if(!$outline) $outline = $dest; unset($code); for($x=$dest+1;$x<=$pos["end"];$x++) { $code[] = $php[$x]; } $newcode = obscure_func($newname,$pos["attribs"],$code); $out .= $newcode; } foreach($functions as $name=>$pos) { for($x=$pos["start"];$x<=$pos["end"];$x++) { $php[$x] = ""; } } $code =array(); for($x=0;$x<count($php);$x++) { $line = $php[$x]; foreach($functions as $name=>$attr) { $line = str_replace($name,$attr["newname"],$line); } $code[$x] = $line; } $php = $code; $line=1; $tmp_file = fopen($argv[1].'_', 'w'); for($x=0;$x<count($php);$x++) { if($x==$outline) { //echo "$line: ".$out; fwrite($tmp_file, $out); } if(strlen($php[$x])) { //echo "$line: ".ltrim($php[$x]); fwrite($tmp_file, ltrim($php[$x])); } $line++; } fclose($tmp_file); - //rename($argv[1].'_', $argv[1]); + rename($argv[1].'_', $argv[1]); ?> Property changes on: trunk/obscure.php ___________________________________________________________________ Modified: cvs2svn:cvs-rev ## -1 +1 ## -1.7 \ No newline at end of property +1.8 \ No newline at end of property