Вход Регистрация
Файл: pobs.php
Строк: 479
<?
    
/*

    POBS - PHP Obfuscator

    January 5th, 2002

    Version: 0.93 

    For the most up-to-date documentation visit:
    http://pobs.mywalhalla.net

    This program is free software; you can redistribute it and/or 
    modify it under the terms of the GNU General Public License as
    published by the Free Software Foundation; either version 2 of the
    License, or (at your option) any later version. 

    This program is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of 
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
    General Public License for more details. 

*/

    
include 'pobs-ini.inc.php';
?>    
<HTML>
<HEAD>
    <TITLE>POBS - A PHP Obfuscator</TITLE>
    <STYLE TYPE="text/css">
        body { font-family: Arial, sans serif;font-size:<? echo ($FontSize+2); ?>pt;  vertical-align: top; }
        td { font-family: Verdana, sans serif;font-size:<? echo $FontSize?>pt;  vertical-align: top; }
    </STYLE>
</HEAD>
<BODY>
<?
    
if ( !empty($_POST) ) extract($_POST);
      else if (!empty(
$HTTP_POST_VARS)) extract($HTTP_POST_VARS);

    if ( isset( 
$OK ) ) CheckSafeMode();

    
$StartTime time();

    
$TotalFileSizeRead 0;
    
$TotalFileSizeWrite 0;

    
$ExVarArray = array();
    
$FuncArray = array();
    
$ConstArray = array();
    
$VarArray = array();

    
$LineArray = array();
    
$FileArray = array();
    
$UdExcVarArrayWild = array();

    if ( isset( 
$OK ) ) // if action parameter in querystring
    
{
        if (!(
is_readable($SourceDir)))
        {
            echo 
"Error. Source Directory ".$SourceDir." is not readable. Program will terminate<br>";
            exit;
        }

        if (!(
is_writeable($TargetDir)))
        {
            echo 
"Error. Target Directory ".$TargetDir." is not writeable. Program will terminate<br>";
            exit;
        }

        echo    
'<h3>Execute POBS : &quot;'.$SourceDir.'&quot; =&gt; &quot;'.$TargetDir.'&quot;</h3>';
        
GetWildCards();
        
ScanSourceFiles();

        
asort$FuncArray );
        
asort$ConstArray );
        
sort$FileArray );

        
ShowArrays();
        
WriteTargetFiles();
    }
        else 
ShowScreen();


function 
ShowScreen() {
    global 
$TimeOut$FileExtArray$TargetDir$SourceDir$UdExcFuncArray$UdExcVarArray$UdExcConstArray;
    global 
$ReplaceFunctions$ReplaceConstants$ReplaceVariables$RemoveComments$RemoveIndents$ConcatenateLines;
    global 
$FilesToReplaceArray;
    
?>    
    <TABLE CELLPADDING=0 WIDTH=100% CELLSPACING=0 BORDER=0>
        <TR>
            <TD BGCOLOR=#6699CC VALIGN=TOP><A HREF="http://pobs.mywalhalla.net" TARGET=_new><IMG SRC="pobslogo.gif" HSPACE=20 WIDTH=150 HEIGHT=61 BORDER=0></A><TD>
            <TD BGCOLOR=#6699CC VALIGN=TOP><br><b>A PHP Obfuscator<br>Version 0.93</TD>
        </TR>
    </TABLE>
    <? CheckSafeMode(); ?>
    <TABLE CELLPADDING=3 WIDTH=100% CELLSPACING=0 BORDER=1 BORDERCOLOR=#000000>
        <TR><TD BGCOLOR=#6699CC VALIGN=TOP> <CENTER><DIV style="font-size:13pt"><b>Settings</DIV></CENTER></TD></TR>
        <TR><TD><CENTER>For the most up-to-date documentation, visit <A HREF="http://pobs.mywalhalla.net" TARGET="STD">http://pobs.mywalhalla.net</A></CENTER></TD></TR>
    </TABLE>
    <br>
    <TABLE CELLPADDING=3 WIDTH=100% CELLSPACING=0 BORDER=0>
        <TR>
            <TD WIDTH=60% VALIGN=TOP>
            <TABLE WIDTH=100% CELLPADDING=3 CELLSPACING=0 BORDER=1 BORDERCOLOR=#000000>
                <FORM METHOD="POST" ACTION="<? echo $GLOBALS[PHP_SELF]?>">
                <TR><TD BGCOLOR=#E6E6E6 VALIGN=TOP><b>TimeOut (sec)</b></TD></TR>
                <TR><TD><? echo $TimeOut ?></TD></TR>
                <TR><TD BGCOLOR=#E6E6E6 VALIGN=TOP><b>Source Directory</b></TD></TR>
                <TR><TD><? echo $SourceDir ?></TD></TR>
                <TR><TD BGCOLOR=#E6E6E6 VALIGN=TOP><b>Target Directory</b></TD></TR>
                <TR><TD><? echo $TargetDir ?></TD></TR>
                <TR><TD BGCOLOR=#E6E6E6 VALIGN=TOP><b>Allowed File Extensions</b></TD></TR>
                <TR><TD><? foreach($FileExtArray as $Key => $Value ) echo $Key.': '.$Value.'<br>'?></TD></TR>
                <TR><TD BGCOLOR=#E6E6E6 VALIGN=TOP><b>Replacements</b></TD></TR>
                <TR><TD>
                    <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=2>
                        <TR><TD WIDTH=100 valign="bottom">Functions</TD><TD WIDTH=10>&nbsp;</TD><TD><input type="checkbox" name="ReplaceFunctions" value="1" checked></TD></TR>
                        <TR><TD valign="bottom">Constants</TD><TD WIDTH=10>&nbsp;</TD><TD><input type="checkbox" name="ReplaceConstants" value="1" checked></TD></TR>
                        <TR><TD valign="bottom">Variables</TD><TD WIDTH=10>&nbsp;</TD><TD><input type="checkbox" name="ReplaceVariables" value="1"></TD></TR>
                    </TABLE>
                </TD></TR>
                <TR><TD BGCOLOR=#E6E6E6 VALIGN=TOP><b>Removals</b></TD></TR>
                <TR><TD>
                    <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=2>
                        <TR><TD WIDTH=100 valign="bottom">Comments</TD><TD WIDTH=10>&nbsp;</TD><TD><input type="checkbox" name="RemoveComments" value="1" checked></TD></TR>
                        <TR><TD valign="bottom">Indents</TD><TD WIDTH=10>&nbsp;</TD><TD><input type="checkbox" name="RemoveIndents" value="1" checked></TD></TR>
                        <TR><TD valign="bottom">Returns</TD><TD WIDTH=10>&nbsp;</TD><TD><input type="checkbox" name="ConcatenateLines" value="1"></TD></TR>
                    </TABLE>
                </TD></TR>
                <TR><TD BGCOLOR=#E6E6E6 VALIGN=TOP><b>File system</b></TD></TR>
                <TR><TD>
                    <INPUT TYPE=CHECKBOX NAME="ReplaceNewer" CHECKED>Replace edited files only<br>
                    <INPUT TYPE=CHECKBOX NAME="RecursiveScan" CHECKED>Recursive scan (into sub-directory)<br>
                    <INPUT TYPE=CHECKBOX NAME="CopyAllFiles" CHECKED>Copy all files (not in allowed file extensions) from source to dest <br>
                </TD></TR>
                <TR>
                    <TD BGCOLOR=#E6E6E6 ALIGN=CENTER VALIGN=TOP>
                    <INPUT TYPE=SUBMIT NAME=OK VALUE="Start processing">
                    </TD>
                </TR>
                </FORM>
            </TABLE>
            </TD>
            <TD WIDTH=20%>
            <TABLE CELLPADDING=3 WIDTH=100% CELLSPACING=0 BORDER=1 BORDERCOLOR=#000000>
                <TR><TD BGCOLOR=#E6E6E6 VALIGN=TOP><b>Exclude Functions</b></TD></TR>
                <TR><TD><? foreach($UdExcFuncArray as $Key => $Value ) echo $Key.': '.$Value.'<br>'?></TD></TR>
                <TR><TD BGCOLOR=#E6E6E6 VALIGN=TOP><b>Exclude Constants</b></TD></TR>
                <TR><TD><? foreach($UdExcConstArray as $Key => $Value ) echo $Key.': '.$Value.'<br>'?></TD></TR>
            </TABLE>
            </TD>
            <TD WIDTH=20%>
            <TABLE CELLPADDING=3 WIDTH=100% CELLSPACING=0 BORDER=1 BORDERCOLOR=#000000>
                <TR><TD BGCOLOR=#E6E6E6 VALIGN=TOP><b>Exclude Variables</b></TD></TR>
                <TR><TD><? foreach($UdExcVarArray as $Key => $Value ) echo $Key.': '.$Value.'<br>'?></TD></TR>
            </TABLE>
            </TD>
        </TR>
    </TABLE>
<?
}

function 
GetYesNo($Value)
{
    if ( 
$Value == FALSE ) return "<FONT COLOR=Red>No</FONT>";
    else return 
"<FONT COLOR=green>Yes</FONT>";
}

function 
GetWildCards() {
    
// Scan UdExcVarArray and move the Variables with Wildcards (*) to a separate array
    // Separating the variables with wildcards speeds up the scanning and checking process
    
global $UdExcVarArray$UdExcVarArrayWild;
     
    foreach( 
$UdExcVarArray as $Key => $Value )
    {    
        
$pos strrpos($Value"*");
        if ( 
$pos !== FALSE )
        { 
            echo 
"WildCardValue: ".$Value."<br>";
            
array_push($UdExcVarArrayWildstr_replace("*"""$Value));
            
$UdExcVarArray[$Key]="Niets".$Key;
        }
    }
    
    echo 
'&nbsp;<br>';
}

function 
ScanSourceFiles$path '' )
{
    global 
$ExVarArray$FuncArray$ConstArray$VarArray$LineArray$FileArray$StdExcFileArray;
    global 
$SourceDir$TargetDir$FileExtArray$ReplaceVariables;
    global 
$RecursiveScan$CopyAllFiles// File system option...
    
global $UdExcVarArray$UdExcVarArrayWild$UdExcFuncArray$UdExcConstArray
    
    
$dir dir$SourceDir.$path.'/' );
    while( 
$FileNaam $dir->read() )
    {
        
$fileName $path.'/'.$FileNaam;
        
        if ( 
is_file$SourceDir.$fileName ) )
        { 
            
// check if file has the proper suffix
            
$Suffix substr($FileNaam,(strrpos($FileNaam".")+1));
            if (
in_array($Suffix$FileExtArray) && ! in_array$FileNaam$StdExcFileArray ) && sizeof($FileArray) < 400)
            {
                echo 
"<b>+ Scanning Filename: ".substr($fileName1)."</b><br>n";
                
array_push$FileArraysubstr($fileName1) );
                
$LineArray file$SourceDir.$fileName );
                
flush();
                
                for (
$rgl 0$rgl<sizeof($LineArray); $rgl++)
                {
                    
$Line trim(strtolower($LineArray[$rgl]));
                    
                    if ( 
substr($Line09)=="function " // Search for Function declaration
                    

                        
$posEinde strpos($Line"(");
                        
$FunctieNaam substr(trim($LineArray[$rgl]), 0$posEinde);
                        
$FunctieNaam trim(str_replace("function """$FunctieNaam));
                        if (!(
$FuncArray[$FunctieNaam]) and !(in_array($FunctieNaam,$UdExcFuncArray))) $FuncArray[$FunctieNaam]="F".substr(md5($FunctieNaam), 0,8);
                        
$FunctieTeller++;
                    }
                        elseif ( 
$ReplaceConstants && ereg"define[ t(]"substr($Line07) ) ) // Search for Constant declaration 
                    
{
                        
$posStart strpos($Line"(");
                        
$posEnd strpos($Line",");
                        
$ConstantName substr(trim($LineArray[$rgl]), ($posStart+1), ($posEnd-$posStart-1));
                        
$ConstantName str_replace('"',"",$ConstantName);
                        
$posDollar strpos($ConstantName"$"); // name of constant may not be a variable
                        
if ( $posDollar === FALSE && $ConstantName != 'SID' ) { // doesn't convert SID constant (PHP4)
                            
if (!($ConstArray[$ConstantName]) and !(in_array($ConstantName,$UdExcConstArray))) { 
                                
$ConstArray[$ConstantName]="C".substr(md5($ConstantName), 0,8);
                            }
                        }
                    }
                    if ( 
$ReplaceVariables SearchVars$LineArray[$rgl] ); // *** Search Variables
                
}
            }
                elseif ( 
$CopyAllFiles )
            {
                echo 
"- Copy Filename: ".substr($fileName1)."<br>n";
                
copy(  $SourceDir.$fileName,  $TargetDir.$fileName );
            }
        }
        else if ( 
$RecursiveScan && is_dir$SourceDir.$fileName ) && $FileNaam != "." && $FileNaam != ".." )
        {
            if ( @
mkdir$TargetDir.$fileName0707 ) ) echo 'Creating Directory : '.$TargetDir.$fileName.'.<br>';
                else echo 
'- Creating Directory : '.$TargetDir.$fileName.' <FONT COLOR=orange>Warning: Creation failed.</b></FONT><br>';
            
ScanSourceFiles$fileName );
        }
    }
    
$dir->close();
}

function 
ShowArrays() {
    global 
$FuncArray$VarArray$ConstArray$FileArray$UdExcVarArray$UdExcVarArrayWild$FunctieTeller;

    echo    
'<br>&nbsp;<br><hr color="#000000" height=1 noshade><h3>Replaced elements :</h3>';

    
DisplayArray$FuncArray"Found functions that will be replaced"$BgColor="FFF0D0");
    
DisplayArray$ConstArray"Found constants that will be replaced"$BgColor="8DCFF4");
    
$VarsArr $VarArray;
    
ksort$VarsArr );
    
DisplayArray$VarsArr"Found variables that will be replaced"$BgColor="89CA9D");
    
DisplayArray$UdExcVarArray"User Defined Exclude Variables"$BgColor="BFBFBF");
    
DisplayArray$FileArray"Scanned Files"$BgColor="FA8B68");

    echo    
'<br>&nbsp;<br><hr color="#000000" height=1 noshade><h3>Number of userdefined elements to be replaced :</h3>'.
                
'Functions: '.sizeof$FuncArray ).'<br>'.
                
'Variables: '.sizeof$VarArray ).'<br>'.
                
'Constants: '.sizeof$ConstArray ).'<br>'.
                
'<br>Scanned Files: '.sizeof$FileArray ).'<br>'.
                
'&nbsp;<br>';
}

function 
WriteTargetFiles() {
    global 
$FilesToReplaceArray$FileArray$StartTime$TotalFileSizeRead$TotalFileSizeWrite;
    global 
$ReplaceNewer$SourceDir$TargetDir;
    
    echo    
'<h3>Check and Replacing file :</h3>'.
                
'<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3><TR>';

    foreach( 
$FileArray as $Key => $FileName)
    {
        
$ReplaceFile TRUE;
        
        if ( 
$ReplaceNewer )
        {
            
$FileRead $SourceDir."/".$FileName;
            
$FileWrite $TargetDir."/".$FileName;
            if (
file_exists($FileWrite)) { // *** CHECK IF SOURCEFILE IS NEWER THAN TARGETFILE 
                
$FileStats stat($FileWrite);
                
$FileWriteDate $FileStats[9];
                
$FileStats stat($FileRead);
                
$FileReadDate $FileStats[9];
                if ( 
$FileReadDate <= $FileWriteDate $ReplaceFile FALSE;
            }
        }
            else 
$ReplaceFile FALSE;
        
        echo 
'<TR><TD>'.$FileName.'</TD><TD>';
        if ( 
$ReplaceFile )
        {
            
$FileStartTime time();
            echo 
': <FONT COLOR=red>Replaced</FONT>';
            
ReplaceThem($FileName);
            echo 
' - Elapsed Time: '.(time()-$FileStartTime).' sec.';
        }
            else echo 
': <FONT COLOR=green>Not replaced</FONT> (sourcefile older than targetfile).';
        echo 
'</TD></TR>';
        
flush();
    }

    echo     
'</TABLE>'.
                
'&nbsp;<br>'.
                
'&nbsp;<br><hr color="#000000" height=1 noshade><h3>Stats :</h3>'.
                
'Start Time: '.$StartTime.'<br>'.
                
'Finish Time: '.time().'<br>'.
                
'<b>Elapsed Time: '.(time()-$StartTime).' sec</b><br>'.
                
'&nbsp;<br>'.
                
'<b>Total FileSize of parsed Files: '.$TotalFileSizeRead.' Bytes<br>'.
                
'Total FileSize of written Files: '.$TotalFileSizeWrite.' Bytes</b><br>';
}

// ** FUNCTIONS ** 

function SearchVars($Line)
{
    global 
$VarArray$StdExcVarArray$UdExcVarArray$UdExcVarArrayWild;
    
    while (
ereg('$([0-9a-zA-Z_]*)'$Line$regs))
    {
        
$VarName $regs[1];
        if (!
$VarArray[$VarName] and !(in_array($VarName,$StdExcVarArray)) and !(in_array($VarName,$UdExcVarArray)))
        { 
            
// check in Wildcards Array
            
foreach( $UdExcVarArrayWild as $Key => $Value )
            {
                if (
substr($VarName0strlen($Value)) == $Value)
                {
                    echo 
'<i>&nbsp; &nbsp; Variable with name '.$VarName.' added to $UdExcVarArray.</i><br>';
                    
array_push($UdExcVarArray$VarName); // add to excluded Variables array
                
}
            }
            if (!(
in_array($VarName,$UdExcVarArray))) // check again in Excluded Variables Array
            

                
$VarArray[$VarName]="V".substr(md5($VarName), 0,8);
            }
        }
        
$pos strpos($Line'$');
        
$Length = ($pos+strlen($regs[1]));
        
$Line substr($Line, (strpos($Line,'$')+1));
    }
}

function 
ReplaceThem($FileName)
{
    global 
$VarArray,$FuncArray$ConstArray$SourceDir$TargetDir$ReplaceVariables;
    global 
$ReplaceConstants$ReplaceFunctions$RemoveIndents$RemoveComments$ConcatenateLines;
    
    
$FileRead $SourceDir."/".$FileName;
    
$FileWrite $TargetDir."/".$FileName;
    
    
$FdRead fopen$FileRead'r' );
     
$contents fread$FdReadfilesize$FileRead ) );
     
$GLOBALS['TotalFileSizeRead'] += filesize$FileRead );
     echo 
' - Size:'.filesize$FileRead );
     
fclose$FdRead );
     
    
$contents ereg_replace"[rn]{2,}""n"$contents ); // REMOVE EMPTY LINES AND DOS "rn"
    
$contents ereg_replace"[ t]{2,}"' '$contents ); // REMOVE TOO MANY SPACE OR TABS (but also in output text...)

    
if ($RemoveIndents) {
        
$contents ereg_replace"n[ t]*""n"$contents);  // REMOVE INDENT TABS and SPACES
    
}
    if (
$RemoveComments) {
        
$contents ereg_replace"[ tn]+//[^n]*"''$contents); // REMOVE COMMENTS //
        
$contents preg_replace'`/*.*?*/`s'''$contents); // REMOVE COMMENTS /* ... */
    
}
    if (
$ConcatenateLines) {
        
$contents ereg_replace"([{};:])[ t]*n"'1'$contents);  // CONCATENATE LINES 
    
}    

    
// *** REPLACE FUNCTIONNAMES
    
if ( $ReplaceFunctions )
    {
        foreach( 
$FuncArray as $Key => $Value $contents ereg_replace("([^a-zA-Z0-9_])".$Key."[ t]*\(","\1".$Value."("$contents); //werkt
    
}

    
// *** REPLACE VARIABLENAMES
    
if ( $ReplaceVariables )
    {
        if ( 
stristr($contents'name=' ) ) {
            
$ReplaceFieldnames TRUE;
            
$contents eregi_replace('([ r"'])name=([\"']*)','1NAME=2', $contents); // rename input fields to upper case
        }    else 
$ReplaceFieldnames = FALSE;

        if ( strpos( 
$contents, '->') ) $ReplaceObjects = TRUE;
            else 
$ReplaceObjects = FALSE;

        if ( strpos( 
$contents, 'class') ) $ReplaceClasses = TRUE;
            else 
$ReplaceClasses = FALSE;

        foreach( 
$VarArray as $Key => $Value )
        {
            if ( strpos(
$contents$Key) !== FALSE ) // to speed up things, check if variable name is, in any way, present in the file
            {
                
$contents = ereg_replace('([$&])('.$Key.')([^0-9a-zA-Z_])','1'.$Value.'3', $contents);  // normal variables and parameters
                
$contents = ereg_replace('$(GLOBALS|HTTP_COOKIE_VARS|HTTP_POST_VARS|HTTP_GET_VARS)([ t]*)[(["' t]*)'.$Key.'(["' t]*)]', '$1[3'.$Value.'4]', $contents ); // var in Tabs

                $contents = ereg_replace('
(setcookie|session_register|session_is_registered|session_unregister)([ t]*)((["' t]*)'.$Key.'(["' t]*))''1(3'.$Value.'4)'$contents ); // cookie or session variables

                
if ($ReplaceFieldnames$contents ereg_replace('([     "']NAME=[\"']*)'.$Key.'([\     "'>])','1'.$Value.'2'$contents); // input fields
                
if ($ReplaceObjects$contents ereg_replace('->[ t]*('.$Key.')([^0-9a-zA-Z_])','->'.$Value.'2'$contents); // objects
                
if ($ReplaceClasses$contents ereg_replace('([^0-9a-zA-Z_])class[ t]*('.$Key.')([^0-9a-zA-Z_])','1class '.$Value.'3'$contents); // class declaration
            
}
        }
    }
    
// *** REPLACE CONSTANTNAMES
    
if ( $ReplaceConstants )
    {
        foreach( 
$ConstArray as $Key => $Value $contents ereg_replace('([^a-zA-Z0-9_$])('.$Key.')([^a-zA-Z0-9_])''1'.$Value.'3'$contents );
    }

    
$FdWrite fopen$FileWrite'w' );
    
$NumberOfChars fwrite$FdWrite$contents );
     
fclose$FdWrite );
    
clearstatcache();
    
$GLOBALS['TotalFileSizeWrite'] += filesize$FileWrite );
}

function 
DisplayArray($ArrayName$HeaderText=""$BgColor="FFF0D0")
{
    global 
$TableColumns;
    
    
$sizeOf sizeOf$ArrayName );
    
    echo    
'<br>'."n".
                
'<TABLE WIDTH="100%" BORDER=0 CELLSPACING=1 CELLPADDING=3 BGCOLOR="#000000"><TR><TD><FONT COLOR=#FFFFFF><b>'.$HeaderText.'</b></FONT></TD></TR></TABLE>';
    if ( 
$sizeOf )
    {
        if ( 
$sizeOf $TableColumns $width $TableColumns; else $width $sizeOf;
        
$width 100 $width;

        echo 
'<TABLE WIDTH="100%" BORDER=0 CELLSPACING=1 CELLPADDING=3 BGCOLOR="#000000"><TR>';
    
        
$Cnt 0;
        
$Line 0;
        foreach( 
$ArrayName as $Key => $Value )
        {    
            
$Cnt++;
            echo 
'<TD WIDTH="'.$width.'%" BGCOLOR="#'.$BgColor.'"><b>'.$Key.'</b><br>'.$Value.'</TD>';
            if ( ( 
$Cnt $TableColumns) == 0  && ( $Cnt != $sizeOf ) )
            {
                echo 
'</TR>';
                echo 
'<TR>';
                
$Line ++;
            }
        }
        
$i $Cnt $TableColumns;
        if ( 
$i && $Line ) for ( ; $i $TableColumns$i++ ) echo '<TD BGCOLOR=#'.$BgColor.'>&nbsp;</TD>';
        
        echo 
'</TR></TABLE>'."n";
        
flush();
    }
        else echo 
'<i>No match or no replace requested</i><br>';
}

function 
CheckSafeMode()
{
    global 
$TimeOut;

    
$SafeMode strtolower(get_cfg_var("safe_mode"));
    if (!
$SafeModeset_time_limit($TimeOut);
        else echo 
"<b><FONT COLOR=orange>Warning: SafeMode is on. Can not set timeout.</b></FONT><br>"
}

?>

</BODY>
</HTML>
Онлайн: 1
Реклама