Este es el Script
<?php
#
# Surrogafier v1.0-rc3
#
# Author: Brad Cable
# Email: brad@bcable.net
# License: Modified BSD
# License Details:
# http://bcable.net/license.php
#
# CONFIG {{{
# Default to simple mode when the page is loaded. [false]
define('DEFAULT_SIMPLE',false);
# Force the page to always be in simple mode (no advanced mode option). [false]
define('FORCE_SIMPLE',false);
# Width for the URL box when in simple mode (CSS "width" attribute). [300px]
define('SIMPLE_MODE_URLWIDTH','300px');
# Default value for tunnel server. []
define('DEFAULT_TUNNEL_PIP','');
# Default value for tunnel port. []
define('DEFAULT_TUNNEL_PPORT','');
# Should the tunnel fields be displayed? "false" value here will force the defaults above [true]
define('FORCE_DEFAULT_TUNNEL',true);
# Default value for "Persistent URL" checkbox [true]
define('DEFAULT_URL_FORM',true);
# Default value for "Remove Cookies" checkbox [false]
define('DEFAULT_REMOVE_COOKIES',false);
# Default value for "Remove Referer Field" checkbox [false]
define('DEFAULT_REMOVE_REFERER',false);
# Default value for "Remove Scripts" checkbox [false]
define('DEFAULT_REMOVE_SCRIPTS',false);
# Default value for "Remove Objects" checkbox [false]
define('DEFAULT_REMOVE_OBJECTS',false);
# Default value for "Encrypt URLs" checkbox [false]
define('DEFAULT_ENCRYPT_URLS',false);
# Default value for "Encrypt Cookies" checkbox [false]
define('DEFAULT_ENCRYPT_COOKS',false);
/*/ Address Blocking Notes \*\
Formats for address blocking are as follows:
1.2.3.4 - plain IP address
1.0.0.0/16 - subnet blocking
1.0/16 - subnet blocking
1/8 - subnet blocking
php.net - domain blocking
Default Value: '10/8','172/8','192.168/16','127/8','169.254/16'
\*\ End Address Blocking Notes /*/
$blocked_addresses=array('10/8','172/8','192.168/16','126/8','169.254/16');
# }}}
# ADVANCED CONFIG {{{
# The following options alter the way documents are parsed on the page. ONLY EDIT THIS STUFF IF YOU REALLY KNOW WHAT YOU ARE DOING!
# 500 is the most reasonable number I could come up with as a maximum URL length limit
# I ran into a 1200+ character long URL once and it nearly melted the processor on my laptop trying to parse it
# Honestly, who needs this long of a URL anyway?
define('MAXIMUM_URL_LENGTH',500);
# Time limit in seconds for a single request and parse. [10]
define('TIME_LIMIT',10);
# Time limit in minutes for a DNS entry to be kept in the cache. [10]
define('DNS_CACHE_EXPIRE',10);
# Use gzip (if possible) to compress the connection between the proxy and the user (less bandwidth, more CPU) [false]
define('GZIP_PROXY_USER',false);
# Use gzip (if possible) to compress the connection between the proxy and the server (less bandwidth, more CPU) [false]
define('GZIP_PROXY_SERVER',false);
# Protocol that proxy is running on. Uncomment this line to define it manually.
# If you leave this line commented, the code detects if you are running on an
# HTTPS connection. If you are, then 'https' is used as the PROTO value,
# otherwise 'http' is used. If you need a different value here, then define it.
#define('PROTO','http');
# }}}
// DON'T EDIT ANYTHING AFTER THIS POINT \\
#
# (unless you absolutely know what you are doing...)
#
# COOKIE & SESSION SETUP {{{
//$totstarttime=microtime(true); # BENCHMARK
//$blocked_addresses=array(); # DEBUG
# set error level to not display notices
error_reporting(E_ALL^E_NOTICE);
# set time limit to the defined time limit, if not in safe mode
if(!ini_get('safe_mode')) set_time_limit(TIME_LIMIT);
# use gzip compression if available
if(GZIP_PROXY_USER && extension_loaded('zlib') && !ini_get('zlib.output_compression')) ob_start('ob_gzhandler'); # use gzip encoding to compress all data, if possible
# reverse magic quotes if enabled
if(get_magic_quotes_gpc()){
function stripslashes_recurse($var){
if(is_array($var)) $var=array_map('stripslashes_recurse',$var);
else $var=stripslashes($var);
return $var;
}
$_GET=stripslashes_recurse($_GET);
$_POST=stripslashes_recurse($_POST);
$_COOKIE=stripslashes_recurse($_COOKIE);
}
# script environment constants
if(!defined('PROTO')) define('PROTO',($_SERVER['HTTPS']=='on'?'https':'http'));
define('VERSION','1.0-rc3');
define('THIS_SCRIPT',PROTO."://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}");
define('SIMPLE_MODE',DEFAULT_SIMPLE || FORCE_SIMPLE);
# Randomized cookie prefixes #
function gen_randstr($len){
$chars=null;
for($i=0;$i<$len;$i++){
$char=rand(0,25);
$char=chr($char+97);
$chars.=$char;
}
return $chars;
}
function dosetcookie($cookname,$cookval,$expire=null){
$_COOKIE[$cookname]=$cookval;
if($expire===null) setcookie($cookname,$cookval);
else setcookie($cookname,$cookval,$expire);
}
define('FIRST_LOAD',empty($_COOKIE['PHPSESSID']));
session_start();
if(empty($_SESSION['sesspref'])){
$sesspref=gen_randstr(30);
$_SESSION['sesspref']=$sesspref;
}
else $sesspref=$_SESSION['sesspref'];
if(empty($_COOKIE['user'])){
$cookpref=gen_randstr(12);
dosetcookie('user',$cookpref);
}
else $cookpref=$_COOKIE['user'];
define('SESS_PREF',$sesspref);
define('COOK_PREF',$cookpref);
define('COOKIE_SEPARATOR','__'.COOK_PREF.'__');
unset($sesspref,$cookpref);
if(FIRST_LOAD){
if(DEFAULT_URL_FORM) dosetcookie(COOK_PREF.'_url_form',true);
if(DEFAULT_REMOVE_COOKIES) dosetcookie(COOK_PREF.'_remove_cookies',true);
if(DEFAULT_REMOVE_REFERER) dosetcookie(COOK_PREF.'_remove_referer',true);
if(DEFAULT_REMOVE_SCRIPTS) dosetcookie(COOK_PREF.'_remove_scripts',true);
if(DEFAULT_REMOVE_OBJECTS) dosetcookie(COOK_PREF.'_remove_objects',true);
if(DEFAULT_ENCRYPT_URLS) dosetcookie(COOK_PREF.'_encrypt_urls',true);
if(DEFAULT_ENCRYPT_COOKS) dosetcookie(COOK_PREF.'_encrypt_cooks',true);
}
# }}}
# ENVIRONMENT SETUP {{{
global $postandget,$blocked_addresses,$dns_cache_array;
$postandget=array_merge($_GET,$_POST);
define('PAGETYPE_MINIREGEXP','(=[_\.\-]?\&=|=)?');
define('PAGETYPE_REGEXP','/^'.PAGETYPE_MINIREGEXP.'(.*)$/');
if(!empty($postandget[COOK_PREF])) $oenc_url=$postandget[COOK_PREF];
else{
$pagetype_str=preg_replace(PAGETYPE_REGEXP,'\1',$_SERVER['QUERY_STRING']);
define('QUERY_STRING',substr($_SERVER['QUERY_STRING'],strlen($pagetype_str),strlen($_SERVER['QUERY_STRING'])-strlen($pagetype_str)));
define('PAGETYPE_NULL',0);
define('PAGETYPE_FORCE_MAIN',1);
define('PAGETYPE_FRAME_TOP',2);
define('PAGETYPE_FRAMED_PAGE',3);
define('PAGETYPE_FRAMED_CHILD',4); # framing children for crimes isn't very nice, but the script does it anyway
switch($pagetype_str){
case '=&=': define('PAGETYPE_ID',PAGETYPE_FRAME_TOP); break;
case '=_&=': define('PAGETYPE_ID',PAGETYPE_FRAMED_PAGE); break;
case '=-&=': define('PAGETYPE_ID',PAGETYPE_FORCE_MAIN); break;
case '=.&=': define('PAGETYPE_ID',PAGETYPE_FRAMED_CHILD); break;
# this is one more unencoded string for future features
# case '=*&=': define('PAGETYPE_ID',); break;
default: define('PAGETYPE_ID',PAGETYPE_NULL); break;
}
unset($pagetype_str);
define('NEW_PAGETYPE_FRAME_TOP',(PAGETYPE_ID===PAGETYPE_FRAMED_CHILD?PAGETYPE_FRAMED_CHILD:PAGETYPE_FRAME_TOP));
define('NEW_PAGETYPE_FRAMED_PAGE',(PAGETYPE_ID===PAGETYPE_FRAMED_CHILD?PAGETYPE_FRAMED_CHILD:PAGETYPE_FRAMED_PAGE));
$oenc_url=QUERY_STRING;
//define('OENC_URL',urldecode(preg_replace('/^([^&]*).*?$/i','\1',QUERY_STRING)));
}
if(strpos(substr($oenc_url,0,6),'%')!==false || strpos($oenc_url,'%')<strpos($oenc_url,'/') || strpos($oenc_url,'%')<strpos($oenc_url,':')) $oenc_url=urldecode($oenc_url);
define('OENC_URL',preg_replace('/^([^\?\&]+)\&/i','\1?',$oenc_url));
unset($oenc_url);
define('ORIG_URL',proxdec(OENC_URL));
global $curr_url;
$curr_url=ORIG_URL;
function gethardattr($attr){
global $postandget;
return (empty($postandget[COOK_PREF.'_set_values'])?!empty($_COOKIE[COOK_PREF."_{$attr}"]):!empty($postandget[COOK_PREF."_{$attr}"]));
}
define('ENCRYPT_URLS',gethardattr('encrypt_urls'));
define('URL_FORM',gethardattr('url_form'));
define('PAGE_FRAMED',(PAGETYPE_ID===PAGETYPE_FRAMED_PAGE || PAGETYPE_ID===PAGETYPE_FRAMED_CHILD || QUERY_STRING=='js_regexps_framed' || QUERY_STRING=='js_funcs_framed'));
#define('URLVAR',(ENCRYPT_URLS?'e':null).'url');
# }}}
# PHP DECODING FUNCTIONS {{{
function my_base64_decode($string){ return base64_decode(str_replace(' ','+',urldecode($string))); }
function proxdec($url){
if($url{0}!='~' && strtolower(substr($url,0,3))!='%7e') return $url;
#while(strpos($url,'%')!==false) $url=urldecode($url);
#$url=urldecode($url);
while($url{0}=='~' || strtolower(substr($url,0,3))=='%7e'){
$url=substr($url,1);
$url=my_base64_decode($url);
$new_url=null;
for($i=0;$i<strlen($url);$i++){
$char=ord($url{$i});
$char-=ord(substr(SESS_PREF,$i%strlen(SESS_PREF),1));
while($char<32) $char+=94;
$new_url.=chr($char);
}
$url=$new_url;
}
return urldecode($url);
}
# }}}
# javascript ENCODING FUNCTIONS {{{
function js_proxenc(){ ?>
//<script>
<?php echo(COOK_PREF); ?>_pe={
expon:function(a,b){
var num;
if(b==0) return 1;
num=a; b--;
while(b>0){ num*=a; b--; }
return num;
},
dectobin:function(){
var dec=arguments[0],chars=arguments[1]||8,binrep="";
for(j=chars-1;j>=0;j--){
if(dec>=this.expon(2,j)){
binrep+="1"; dec-=this.expon(2,j);
}
else binrep+="0";
}
return binrep;
},
bintodec:function(){
var bin=arguments[0],chars=arguments[1]||8,dec=0;
for(var j=0;j<chars;j++) if(bin.substring(j,j+1)=="1") dec+=this.expon(2,chars-1-j);
return dec;
},
b64e:function(string){
var encstr="",binrep="";
var charbin,charnum;
for(var i=0;i<string.length;i++){
charnum=string.charCodeAt(i);
binrep+=this.dectobin(charnum);
}
while(binrep.length%6) binrep+="00";
for(var i=1;i*6<=binrep.length;i++){
charbin=binrep.substring((i-1)*6,i*6);
charnum=this.bintodec(charbin,6);
if(charnum<=25) charnum+=65;
else if(charnum<=51) charnum+=71;
else if(charnum<=61) charnum-=4;
else if(charnum==62) charnum=43;
else if(charnum==63) charnum=47;
encstr+=String.fromCharCode(charnum);
}
while(encstr.length%8) encstr+="=";
return encstr;
},
proxenc:function(url){
var new_url="";
var charnum;
if(url.substring(0,1)=="~" || url.substring(0,3).toLowerCase()=="%7e") return url;
url=encodeURIComponent(url);
var sess_pref="<?php echo(SESS_PREF); ?>";
for(i=0;i<url.length;i++){
charnum=url.charCodeAt(i);
charnum+=sess_pref.charCodeAt(i%sess_pref.length);
while(charnum>126) charnum-=94;
new_url+=String.fromCharCode(charnum);
}
return "~"+encodeURIComponent(this.b64e(new_url));
}
}
<? }
# }}}
# FIRST PAGE DISPLAYED WHEN ACCESSING PROXY {{{
if(PAGETYPE_ID===PAGETYPE_FORCE_MAIN || (substr(QUERY_STRING,0,3)!='js_' && ORIG_URL==null)){
$useragentinfo=null;
if(stristr($_SERVER['HTTP_USER_AGENT'],'windows')!==false || stristr($_SERVER['HTTP_USER_AGENT'],'win32')!==false) $useragentinfo.='Windows';
elseif(stristr($_SERVER['HTTP_USER_AGENT'],'macintosh')!==false || stristr($_SERVER['HTTP_USER_AGENT'],'mac_powerpc')!==false) $useragentinfo.='Macintosh';
elseif(stristr($_SERVER['HTTP_USER_AGENT'],'linux')!==false) $useragentinfo.='Linux';
elseif(stristr($_SERVER['HTTP_USER_AGENT'],'bsd')!==false) $useragentinfo.='BSD';
else $useragentinfo.='Unknown';
$useragentinfo.=' / ';
if(stristr($_SERVER['HTTP_USER_AGENT'],'msie')!==false) $useragentinfo.='Internet Explorer';
elseif(stristr($_SERVER['HTTP_USER_AGENT'],'firefox')!==false) $useragentinfo.='Firefox';
elseif(stristr($_SERVER['HTTP_USER_AGENT'],'netscape')!==false) $useragentinfo.='Netscape';
elseif(stristr($_SERVER['HTTP_USER_AGENT'],'opera')!==false) $useragentinfo.='Opera';
elseif(stristr($_SERVER['HTTP_USER_AGENT'],'konqueror')!==false) $useragentinfo.='Konqueror';
elseif(stristr($_SERVER['HTTP_USER_AGENT'],'seamonkey')!==false) $useragentinfo.='SeaMonkey';
else $useragentinfo.='Unknown';
$useragent_array=array(
array(null,"Actual ({$useragentinfo})"),
array('-1',' [ Don\'t Send ] '),
array('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061024 Firefox/2.0','Windows XP / Firefox 2.0'),
array('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)','Windows XP / Internet Explorer 7'),
array('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)','Windows XP / Internet Explorer 6'),
array('Opera/9.02 (Windows NT 5.1; U; en)','Windows XP / Opera 9.02'),
array('Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.8.1) Gecko/20061024 Firefox/2.0','Mac OS X / Firefox 2.0'),
array('Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/521.25 (KHTML, like Gecko) Safari/521.24','Mac OS X / Safari 3.0'),
array('Opera/9.02 (Macintosh; PPC Mac OS X; U; en)','Mac OS X / Opera 9.02'),
array('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20061024 Firefox/2.0','Linux / Firefox 2.0'),
array('Opera/9.02 (X11; Linux i686; U; en)','Linux / Opera 9.02'),
array('Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko)','Linux / Konqueror 3.5.5'),
array('Links (2.1pre19; Linux 2.6 i686; x)','Linux / Links (2.1pre19)'),
array('Lynx/2.8.5rel.1','Any / Lynx 2.8.5rel.1'),
array('Dillo/0.8.6','Any / Dillo 0.8.6'),
array('Wget/1.10.2','Any / Wget 1.10.2'),
array('1',' [ Custom ] <noscript><b>**</b></noscript>')
);
define('IPREGEXP','/^((?:[0-2]{0,2}[0-9]{1,2}\.){3}[0-2]{0,2}[0-9]{1,2})\[0-9]{1,5})$/');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Surrogafier</title>
<meta name="robots" content="index, nofollow" />
<style>
body{font-family: bitstream vera sans, trebuchet ms}
input{border: 1px solid #000000}
select{border: 1px solid #000000}
a{color: #000000}
a:hover{text-decoration: none}
.advanced_stuff{display: <?php echo(SIMPLE_MODE?'none':'table-row'); ?>}
.simple_stuff{display: <?php echo(SIMPLE_MODE?'table-row':'none'); ?>}
.url{width: <?php echo(SIMPLE_MODE?SIMPLE_MODE_URLWIDTH:'99%'); ?>}
.signature{float: left}
<?php if(FORCE_SIMPLE){ ?>
.noscript_stuff{display: none}
.signature{text-align: center; float: none}
<?php } ?>
</style>
<?php if(!FORCE_SIMPLE){ ?><noscript><style>
.advanced_stuff{display: table-row}
.simple_stuff{display: none}
.noscript_stuff{display: none}
.noscripturl{width: 99%}
.url{display: none}
.signature{text-align: center; float: none}
</style></noscript><?php } ?>
<script language="javascript">
<!--
<?php js_proxenc(); ?>
function useragent_check(focus){
if(document.getElementsByName('<?php echo(COOK_PREF); ?>_useragent')[0].value=='1'){
document.getElementById('useragent_texttr').style.display="";
if(focus) document.getElementById('<?php echo(COOK_PREF); ?>_useragenttext').focus();
}
else document.getElementById('useragent_texttr').style.display='none';
}
<?php if(!FORCE_SIMPLE){ ?>
advanced_mode=true;
function toggle_mode(){
document.getElementById("mode_toggler").innerHTML=(advanced_mode?"Advanced Mode":"Simple Mode");
var advanced_stuff=document.getElementsByTagName("tr");
for(var i=1;i<=12;i++) advanced_stuff.style.display=(advanced_mode?"none":"");
document.getElementById("simple_submit").style.display=(advanced_mode?"inline":"none");
document.getElementById("url").style.width=(advanced_mode?"<?php echo(SIMPLE_MODE_URLWIDTH); ?>":"99%");
advanced_mode=!advanced_mode;
if(advanced_mode) useragent_check(false);
setTimeout("document.getElementById('url').focus();",100);
}
<?php } ?>
function submit_code(){
document.forms[0].<?php echo(COOK_PREF); ?>.disabled=false;
if(document.forms[0].<?php echo(COOK_PREF); ?>_encrypt_urls.checked)
document.forms[0].<?php echo(COOK_PREF); ?>.value=<?php echo(COOK_PREF); ?>_pe.proxenc(document.getElementById('url').value);
else
document.forms[0].<?php echo(COOK_PREF); ?>.value=document.getElementById('url').value;
return true;
}
//-->
</script>
</head>
<body<?php echo(SIMPLE_MODE?' onload="toggle_mode();"':null); ?>>
<center>
<span style="font-size: 18pt; font-weight: bold; margin-bottom: 5px">Surrogafier</span>
<form method="post" onsubmit="return submit_code();" style="margin: 0px; padding: 0px">
<input type="hidden" name="<?php echo(COOK_PREF); ?>_set_values" value="1" />
<input type="hidden" name="<?php echo(COOK_PREF); ?>" disabled="disabled" />
<table>
<tr>
<td style="text-align: left">URL: </td>
<td>
<input type="text" class="url" id="url" value="<?php echo(ORIG_URL); ?>" />
<noscript><input type="text" class="noscripturl" name="<?php echo(COOK_PREF); ?>" id="url" value="<?php echo(ORIG_URL); ?>" /></noscript>
<input type="submit" class="simple_stuff" id="simple_submit" value="Surrogafy" style="background-color: #F0F0F0" />
</td>
</tr>
<tr class="advanced_stuff"<?php if(FORCE_DEFAULT_TUNNEL){ ?> style="display: none"><?php } ?>
<td style="text-align: left">Tunnel Proxy:</td>
<td><table cellspacing="0" cellpadding="0">
<tr>
<td style="width: 100%"><input type="text" name="<?php echo(COOK_PREF); ?>_pip" onkeyup="if(this.value.match(<?php echo(IPREGEXP); ?>)){ document.forms[0].<?php echo(COOK_PREF); ?>_pport.value=this.value.replace(<?php echo(IPREGEXP); ?>,'\$2'); this.value=this.value.replace(<?php echo(IPREGEXP); ?>,'\$1'); document.forms[0].<?php echo(COOK_PREF); ?>_pport.focus(); };" style="width: 100%; text-align: left" value="<?php echo(empty($_COOKIE[COOK_PREF.'_pip'])?DEFAULT_TUNNEL_PIP:$_COOKIE[COOK_PREF.'_pip']); ?>" /></td>
<td style="width: 5px"> </td>
<td style="width: 50px"><input type="text" name="<?php echo(COOK_PREF); ?>_pport" maxlength="5" size="5" style="width: 50px" value="<?php echo(empty($_COOKIE[COOK_PREF.'_pport'])?DEFAULT_TUNNEL_PPORT:$_COOKIE[COOK_PREF.'_pport']); ?>" /></td>
</tr>
</table></td>
</tr>
<tr class="advanced_stuff">
<td style="text-align: left">User-Agent:</td>
<td><select name="<?php echo(COOK_PREF); ?>_useragent" style="width: 100%" onchange="useragent_check(true);">
<?php foreach($useragent_array as $useragent){ ?>
<option value="<?php echo($useragent[0]); ?>"<?php if($_COOKIE[COOK_PREF.'_useragent']==$useragent[0]) echo ' selected="selected"'; ?>><?php echo($useragent[1]); ?></option>
<?php } ?>
</select></td>
</tr>
<tr class="advanced_stuff" id="useragent_texttr"<?php echo($_COOKIE[COOK_PREF.'_useragent']=='1'?null:' style="display: none"'); ?>>
<td> </td>
<td><input type="text" id="<?php echo(COOK_PREF); ?>_useragenttext" name="<?php echo(COOK_PREF); ?>_useragenttext" value="<?php echo($_COOKIE[COOK_PREF.'_useragenttext']); ?>" style="width: 99%" /></td>
</tr>
<tr class="advanced_stuff"><td> </td><td style="text-align: left"><input type="checkbox" name="<?php echo(COOK_PREF); ?>_url_form" style="border: 0px" <?php if(!empty($_COOKIE[COOK_PREF.'_url_form'])) echo 'checked="checked" '; ?>/> Persistent URL Form</td></tr>
<tr class="advanced_stuff"><td> </td><td style="text-align: left"><input type="checkbox" name="<?php echo(COOK_PREF); ?>_remove_cookies" style="border: 0px" <?php if(!empty($_COOKIE[COOK_PREF.'_remove_cookies'])) echo 'checked="checked" '; ?>/> Remove Cookies</td></tr>
<tr class="advanced_stuff"><td> </td><td style="text-align: left"><input type="checkbox" name="<?php echo(COOK_PREF); ?>_remove_referer" style="border: 0px" <?php if(!empty($_COOKIE[COOK_PREF.'_remove_referer'])) echo 'checked="checked" '; ?>/> Remove Referer Field</td></tr>
<tr class="advanced_stuff"><td> </td><td style="text-align: left"><input type="checkbox" name="<?php echo(COOK_PREF); ?>_remove_scripts" style="border: 0px" <?php if(!empty($_COOKIE[COOK_PREF.'_remove_scripts'])) echo 'checked="checked" '; ?>/> Remove Scripts (JS, VBS, etc)</td></tr>
<tr class="advanced_stuff"><td> </td><td style="text-align: left"><input type="checkbox" name="<?php echo(COOK_PREF); ?>_remove_objects" style="border: 0px" <?php if(!empty($_COOKIE[COOK_PREF.'_remove_objects'])) echo 'checked="checked" '; ?>/> Remove Objects (Flash, Java, etc)</td></tr>
<tr class="advanced_stuff"><td> </td><td style="text-align: left"><input type="checkbox" name="<?php echo(COOK_PREF); ?>_encrypt_urls" style="border: 0px" <?php if(!empty($_COOKIE[COOK_PREF.'_encrypt_urls'])) echo 'checked="checked" '; ?>/> Encrypt URLs<noscript><b>**</b></noscript></td></tr>
<tr class="advanced_stuff"><td> </td><td style="text-align: left"><input type="checkbox" name="<?php echo(COOK_PREF); ?>_encrypt_cooks" style="border: 0px" <?php if(!empty($_COOKIE[COOK_PREF.'_encrypt_cooks'])) echo 'checked="checked" '; ?>/> Encrypt Cookies<noscript><b>**</b></noscript></td></tr>
<tr class="advanced_stuff"><td colspan="2"><input type="submit" value="Surrogafy" style="width: 100%; background-color: #F0F0F0" /></td></tr>
<tr><td style="font-size: 8pt" colspan="2">
<div class="signature"><a href="http://bcable.net/">Surrogafier v<?php echo(VERSION); ?> <b>·</b> Brad Cable</a></div>
<div class="noscript_stuff" style="float: right"><a href="#" onclick="toggle_mode();" id="mode_toggler"><?php echo(SIMPLE_MODE?'Advanced':'Simple'); ?> Mode</a></div>
</td></tr>
</table>
<noscript>
<br />
<b>**</b> Surrogafier has detected that your browser does not have javascript enabled. <b>**</b>
<br />
<b>**</b> Surrogafier requires javascript in order to function to its full potential. <b>**</b>
</noscript>
</form>
</center>
</body>
</html>
<?php exit(); }
# }}}
# FRAMED PAGE WITH URL FORM {{{
if(PAGETYPE_ID===PAGETYPE_FRAME_TOP && ORIG_URL!=null){ ?>
<html>
<head>
<title><?php echo(ORIG_URL); ?></title>
<style>
body{font-family: bitstream vera sans, trebuchet ms; margin: 0px; padding: 0px; font-size: 12px; overflow: hidden}
input{border: 1px solid #000000}
td{font-size: 12px}
a{text-decoration: none; color: #000000}
a:hover{text-decoration: underline}
</style>
<script>
<!--
<?php echo(COOK_PREF); ?>=true;
<?php if(ENCRYPT_URLS) js_proxenc(); ?>
function submit_code(){
<?php if(ENCRYPT_URLS){ ?>
document.forms[0].<?php echo(COOK_PREF); ?>.value=<?php echo(COOK_PREF); ?>_pe.proxenc(document.forms[0].<?php echo(COOK_PREF); ?>.value);
<?php } ?>
return true;
}
//-->
</script>
</head>
<body>
<form method="get" onsubmit="return submit_code();">
<input type="hidden" name="" value="" />
<table cellpadding="0" cellspacing="0" style="width: 100%; height: 100%; padding: 0px; margin: 0px">
<tr><td><table cellpadding="0" cellspacing="0" style="width: 100%; padding: 3px">
<tr>
<td> <b><a id="proxy_link" href="<?php echo(THIS_SCRIPT.'?=-&='.OENC_URL); ?>">Surrogafier</a></b> </td>
<td style="width: 100%"><input type="text" class="url" name="" style="width: 100%; padding-left: 4px" id="url" value="<?php echo(ORIG_URL); ?>" /></td>
<td> </td>
<td><input type="submit" class="simple_stuff" id="simple_submit" value="Surrogafy" style="background-color: #F0F0F0" /></td>
</tr>
</table></td></tr>
<tr><td style="height: 100%; border-top: 1px solid #000000">
<iframe name="<?php echo(COOK_PREF); ?>_top" src="<?php echo(THIS_SCRIPT.'?=_&='.OENC_URL); ?>" frameborder="0" style="border: 0px; width: 100%; height: 100%"></iframe>
</td></tr>
</table>
</form>
</body>
</html>
<?php exit(); }
# }}}
# PRE-javascript CONSTANTS & FUNCTIONS {{{
# these constants and functions must be defined before JS is output, but would be more readably located later
#define('AURL_LOCK_REGEXP','(??:javascript|mailto|about):|~|%7e)');
define('FRAME_LOCK_REGEXP','/^(??:javascript|mailto|about):|#)/i');
define('AURL_LOCK_REGEXP','/^(??:javascript|mailto|about):|#|'.str_replace(array('/','.'),array('\/','\.'),addslashes(THIS_SCRIPT)).')/i');
define('URLREG','/^'.
'(?[a-z]*)?(?:\:?\/\/))'. # proto
'(?[^\@\/]*)\@)?'. # userpass
'([^\/:\?\#\&]*)'. # servername
'(?:\[0-9]+))?'. # portval
'(\/[^\&\?\#]*?)?'. # path
'([^\/\?\#\&]*(?:\&[^\?\#]*)?)'. # file
'(?:\?([\s\S]*?))?'. # query
'(?:\#([\s\S]*))?'. # label
'$/ix');
function escape_regexp($regexp,$dollar=false){
$regexp=str_replace('\\','\\\\',str_replace('\'','\\\'',str_replace('"','\\"',str_replace(chr(10),'\n',str_replace(chr(13),'\r',str_replace(chr(9),'\t',$regexp))))));
return ($dollar?preg_replace('/[\\\\]+(?=[0-9])/','\\\\$',$regexp):preg_replace('/[\\\\]+(?=[0-9])/','\\\\\\\\',$regexp)); #*
}
# }}}
# javascript FUNCS {{{
if(QUERY_STRING=='js_funcs' || QUERY_STRING=='js_funcs_framed'){ ?>//<script>
// javascript FUNCS: DECODING {{{
<?php js_proxenc(); ?>
<?php echo(COOK_PREF); ?>_pe.b64d=function(string){
var binrep="",decstr="";
var charnum,charbin;
string=string.replace(/[=]*$/,"");
for(var i=0;i<string.length;i++){
charnum=string.charCodeAt(i);
if(charnum>=97) charnum-=71;
else if(charnum>=65) charnum-=65;
else if(charnum>=48) charnum+=4;
else if(charnum==43) charnum=62;
else if(charnum==47) charnum=63;
binrep+=this.dectobin(charnum,6);
}
for(var i=0;i+8<binrep.length;i+=8){
charbin=binrep.substr(i,8);
decstr+=String.fromCharCode(this.bintodec(charbin));
}
return decstr;
}
<?php echo(COOK_PREF); ?>_pe.proxdec=function(url){
var new_url,charnum;
if(url.substr(0,1)!='~' && url.substr(0,3).toLowerCase()!='%7e') return url;
while(url.substr(0,1)=='~' || url.substr(0,3).toLowerCase()=='%7e'){
url=url.substr(1,url.length-1);
url=this.b64d(url);
new_url="";
for(i=0;i<url.length;i++){
charnum=url.charCodeAt(i);
charnum-="<?php echo(SESS_PREF); ?>".charCodeAt(i%"<?php echo(SESS_PREF); ?>".length);
while(charnum<32) charnum+=94;
new_url+=String.fromCharCode(charnum);
}
url=new_url;
}
return decodeURIComponent(url); // urldecode()
}
// }}}
// javascript FUNCS: COOK_PREF OBJECT {{{
<?php echo(COOK_PREF); ?>={
URLREG:<?php echo(substr(URLREG,0,strlen(URLREG)-1)); ?>,
THIS_SCRIPT:"<?php echo(THIS_SCRIPT); ?>",
COOK_PREF:"<?php echo(COOK_PREF); ?>",
pe:<?php echo(COOK_PREF); ?>_pe,
gen_curr_urlobj:function(){ this.curr_urlobj=new this.aurl(this.CURR_URL); },
getCookieArr:function(){ return document.cookie.split("; "); },
aurl:function(url,topurl){
this.URLREG=<?php echo(COOK_PREF); ?>.URLREG;
this.THIS_SCRIPT=<?php echo(COOK_PREF); ?>.THIS_SCRIPT;
this.ENCRYPT_URLS=<?php echo(COOK_PREF); ?>.ENCRYPT_URLS;
this.trim=function(str){ return str.replace(/^\s*([\s\S]*?)\s*$/,"$1"); }
this.get_fieldreq=function(fieldno,value){
var fieldreqs=new Array();
fieldreqs[2]="://"+(value!=""?value+"@":"");
fieldreqs[4]=(value!="" && parseInt(value)!=80?":"+parseInt(value):"");
fieldreqs[7]=(value!=""?"?"+value:"");
fieldreqs[8]=(value!=""?"#"+value:"");
if(fieldreqs[fieldno]!=undefined) return value;
// return (value!=""?null:value);
else return fieldreqs[fieldno];
}
this.set_proto=function(proto){
if(proto==undefined) proto="http";
if(this.locked) return;
this.proto=proto;
}
this.get_proto=function(){ return this.proto; }
this.get_userpass=function(){ return this.userpass; }
this.set_userpass=function(userpass){ if(userpass==undefined) userpass=""; this.userpass=userpass; }
this.get_servername=function(){ return this.servername; }
this.set_servername=function(servername){ if(servername==undefined) servername=""; this.servername=servername; }
this.get_portval=function(){ return ((this.portval=="")?(this.get_proto()=="https"?"443":"80"):this.portval); }
this.set_portval=function(port){ if(port==undefined) port=""; this.portval=((parseInt(port)!=80)?port:"").toString(); }
this.get_path=function(){ // ***
if(this.path.indexOf("/../")!=-1) this.path=this.path.replace(/(?:\/[^\/]+){0,1}\/\.\.\//g,"/");
if(this.path.indexOf("/./")!=-1) while((path=this.path.replace("/./","/")) && path!=this.path) this.path=path;
return this.path;
}
this.set_path=function(path){ if(path==undefined) path="/"; this.path=path; }
this.get_file=function(){ return this.file; }
this.set_file=function(file){ if(file==undefined) file=""; this.file=file; }
this.get_query=function(){ return this.query; }
this.set_query=function(query){ if(query==undefined) query=""; this.query=query; }
this.get_label=function(){ return this.label; }
this.set_label=function(label){ if(label==undefined) label=""; this.label=label; }
this.get_url=function(){
if(this.locked) return this.url;
return this.get_proto()+"://"+
(this.get_userpass()==""?"":this.get_userpass()+"@")+
this.get_servername()+
(parseInt(this.get_portval())==80?"":":"+parseInt(this.get_portval()))+
this.get_path()+this.get_file()+
(this.get_query()==""?"":"?"+this.get_query())+
(this.get_label()==""?"":"#"+this.get_label())
;
}
this.surrogafy=function(){
var url=this.get_url();
if(this.locked || this.get_proto()+this.get_fieldreq(2,this.get_userpass())+this.get_servername()+this.get_path()+this.get_file()==this.THIS_SCRIPT) return url;
var label=this.get_label();
this.set_label();
if(this.ENCRYPT_URLS && !this.locked) url=<?php echo(COOK_PREF); ?>.pe.proxenc(url);
//url=this.THIS_SCRIPT+"?="+(!this.ENCRYPT_URLS?escape(url):url); // urlencode()d
url=this.THIS_SCRIPT+"?="+url; // urlencode()d
this.set_label(label);
return url;
}
if(url.length><?php echo(MAXIMUM_URL_LENGTH)?>){
//alert(this.url); // DEBUG
//alert(this.url.length); // DEBUG
this.url="";
}
else{
//this.url=preg_replace("/&#([0-9]+);/e","chr(\\1)" // parse like PHP does for &#num; HTML entities? // TODO?
this.url=this.trim(url.replace("&","&").replace("\r","").replace("\n",""));
}
this.topurl=topurl;
this.locked=url.match(<?php echo(AURL_LOCK_REGEXP); ?>); //*
if(!this.locked){
var urlwasvalid=true;
if(!this.url.match(this.URLREG)){
urlwasvalid=false;
if(this.topurl==undefined) this.url="http://"+((this.url.charAt(0)==":" || this.url.charAt(0)=="/")?this.url.substring(1):this.url)+(this.url.indexOf("/")!=-1?"":"/");
else{
var newurl=this.topurl.get_proto()+"://"+this.get_fieldreq(2,this.topurl.get_userpass())+this.topurl.get_servername()+((this.topurl.get_portval()!=80 && (this.topurl.get_proto()=="https"?this.topurl.get_portval()!=443:true))?":"+this.topurl.get_portval():"");
if(this.url.substring(0,1)!="/") newurl+=this.topurl.get_path();
this.url=newurl+this.url;
}
}
this.set_proto((urlwasvalid || this.topurl==undefined?this.url.replace(/^([^:]+).*$/,"\$1"):this.topurl.get_proto()));
this.set_userpass(this.url.replace(this.URLREG,"\$2"));
this.set_servername(this.url.replace(this.URLREG,"\$3"));
this.set_portval(this.url.replace(this.URLREG,"\$4"));
this.set_path(this.url.replace(this.URLREG,"\$5"));
this.set_file(this.url.replace(this.URLREG,"\$6"));
this.set_query(this.url.replace(this.URLREG,"\$7"));
this.set_label(this.url.replace(this.URLREG,"\$8"));
}
//if(!this.locked && !this.url.match(this.URLREG)) havok(7,this.url); //*
},
surrogafy_url:function(url,topurl,addproxy){
url=url.toString();
if(!url.substring) return;
if(addproxy==undefined) addproxy=true;
var urlquote="";
if((url.substring(0,1)=="\"" || url.substring(0,1)=="'") && url.substring(0,1)==url.substring(url.length-1,url.length)){
urlquote=url.substring(0,1);
url=url.substring(1,url.length-1);
}
if(topurl==undefined) topurl=this.curr_urlobj;
var urlobj=new this.aurl(url,topurl);
var new_url=(addproxy?urlobj.surrogafy():urlobj.get_url());
if(urlquote!="") new_url=urlquote+new_url+urlquote;
return new_url;
},
surrogafy_url_toobj:function(url,topurl,addproxy){
url=url.toString();
if(!url.substring) return;
if(addproxy==undefined) addproxy=true;
if((url.substring(0,1)=="\"" || url.substring(0,1)=="'") && url.substring(0,1)==url.substring(url.length-1,url.length)) url=url.substring(1,url.length-1);
if(topurl==undefined) topurl=this.curr_urlobj;
return new this.aurl(url,topurl);
},
de_surrogafy_url:function(url){
if(url==undefined) return "";
url=url.toString();
if(url.match(<?php echo(FRAME_LOCK_REGEXP); ?>) || !url.match(<?php echo(AURL_LOCK_REGEXP); ?>)) return url;
return this.pe.proxdec(decodeURIComponent(url.substring(url.indexOf('?')+1).replace(<?php echo(PAGETYPE_REGEXP); ?>,"\$2"))); // urldecode()
},
add_querystuff:function(url,querystuff){
var pos=url.indexOf('?');
return url.substr(0,pos+1)+querystuff+url.substr(pos+1,url.length-pos);
},
preg_match_all:function(regexpstr,string){
var matcharr=new Array();
var regexp=new RegExp(regexpstr);
var result;
while(true){
result=regexp.exec(string);
if(result!=null) matcharr.push(result);
else break;
}
return matcharr;
},
framify_url:function(url,frame_type){
if((frame_type!==<?php echo(PAGETYPE_FRAME_TOP); ?> || !this.URL_FORM) && (frame_type!==<?php echo(PAGETYPE_FRAMED_PAGE); ?> && !this.PAGE_FRAMED)) return url;
var urlquote="";
if((url.substring(0,1)=="\"" || url.substring(0,1)=="'") && url.substring(0,1)==url.substring(url.length-1,url.length)){
urlquote=url.substring(0,1);
url=url.substring(1,url.length-1);
}
if(!url.match(<?php echo(FRAME_LOCK_REGEXP); ?>)){
var query;
if(frame_type===<?php echo(PAGETYPE_FRAME_TOP); ?> && this.URL_FORM) query='&=';
else if(frame_type===<?php echo(PAGETYPE_FRAMED_CHILD); ?>) query='.&=';
else if(frame_type===<?php echo(PAGETYPE_FRAMED_PAGE); ?> || this.PAGE_FRAMED) query='_&=';
else query='';
url=url.replace(/^([^\?]*)[\?]?<?php echo(PAGETYPE_MINIREGEXP); ?>([^#]*?
- ?.*?)$/,'\$1?='+query+'\$3');
if(urlquote!="") url=urlquote+url+urlquote;
return url;
},
parse_html:function(regexp,partoparse,html,addproxy,framify){
var match,begin,end,nurl;
if(html.match(regexp)){
var matcharr=this.preg_match_all(regexp,html);
var newhtml="";
for(var key in matcharr){
/*match=matcharr;
nurl=this.surrogafy_url(match[partoparse],undefined,addproxy);
nhtml=match[0].replace(match[partoparse],nurl);
html=html.replace(match[0],nhtml);*/
match=matcharr[key];
if(match[partoparse]!=undefined){
begin=html.indexOf(match[partoparse]);
end=begin+match[partoparse].length;
nurl=this.surrogafy_url(match[partoparse],undefined,addproxy);
if(framify) nurl=this.framify_url(nurl,framify);
newhtml+=html.substring(0,begin)+nurl;
html=html.substring(end);
}
}
html=newhtml+html;
}
return html;
},
parse_all_html:function(){
if(arguments[0]==null) return;
var html=arguments[0].toString();
var key;
for(var key in regexp_arrays){
if((arguments.length>1 && key!=arguments[1]) || key=='text/javascript') continue;
arr=regexp_arrays[key];
for(var regexp_arraykey in arr){
regexp_array=arr[regexp_arraykey];
if(regexp_array[0]==undefined) continue;
if(regexp_array[0]==1) html=html.replace(regexp_array[1],regexp_array[2]);
else if(regexp_array[0]==2){
addproxy=(regexp_array.length>3?regexp_array[3]:true);
framify=(regexp_array.length>4?regexp_array[4]:false);
html=this.parse_html(regexp_array[1],regexp_array[2],html,addproxy,framify);
}
}
}
return html;
},
form_button:null,
form_encrypt:function(form){
if(form.method=='post') return true;
//action=form.<php echo(COOK_PREF); ?>.value;
var action=form.getElementsByName(this.COOK_PREF)[0].value;
for(var i=1;i<form.elements.length;i++){
if(form.elements.disabled || form.elements.name=='' || form.elements.value=='' || form.elements.type=='reset') continue;
if(form.elements.type=='submit'){
if(form.elements.name!=this.form_button) continue;
this.form_button=null;
}
var pref;
if(!action.match(/\?/)) pref="?";
else pref="&";
action+=pref+form.elements.name+"="+form.elements.value;
}
location.href=this.surrogafy_url(action);
return false;
},
setAttr:function(obj,attr,val){
if(typeof(attr)!=typeof("")){
attr=attr.toString();
attr=attr.substr(1,attr.length-2);
}
if(attr=="innerHTML"){
obj[attr]=this.parse_all_html(val);
return obj[attr];
}
if(obj==location && attr=="hostname") return this.LOCATION_HOSTNAME;
if(obj==document && attr=="cookie"){
const COOK_REG=/^([^=]*)=([^;]*)(?:;[\s\S]*?)?$/i;
var realhost=this.LOCATION_HOSTNAME.replace("/^www/i","").replace(".","_");
var cookkey=val.replace(COOK_REG,"\$1");
var cookval=val.replace(COOK_REG,"\$2");
if(this.ENCRYPT_COOKS){
cookkey=proxenc(cookkey);
cookval=proxenc(cookval);
}
var newcookie=realhost+"<?php echo(COOKIE_SEPARATOR); ?>"+cookkey+"="+cookval+"; ";
document.cookie=newcookie;
return newcookie;
}
if(obj==location && attr=="search"){
if(val.substr(0,1)=="?") val=val.substr(1);
this.curr_urlobj.set_query(val);
val=this.curr_urlobj.get_url();
attr="href";
}
var proxurl=val;
if(attr!="cookie" && attr!="search" && attr!="hostname"){
proxurl=this.surrogafy_url(val);
// tags framified must match REGEXPS with regexp_array[5]
if(obj.tagName=="A" || obj.tagName=="AREA")
proxurl=this.framify_url(proxurl,<?php echo(NEW_PAGETYPE_FRAME_TOP); ?>);
else if(obj.tagName=="FRAME" || obj.tagName=="IFRAME")
proxurl=this.framify_url(proxurl,<?php echo(PAGETYPE_FRAMED_CHILD); ?>);
}
if(this.URL_FORM){
if((obj==location && attr=="href") || attr=="location"){
urlobj=this.surrogafy_url_toobj(val);
if(!urlobj.locked) proxurl=this.add_querystuff(proxurl,"=&");
this.thetop.location.href=proxurl;
}
else obj[attr]=proxurl;
}
else obj[attr]=proxurl;
},
getAttr:function(obj,attr){
if(typeof(attr)!=typeof("")){
attr=attr.toString();
attr=attr.substr(1,attr.length-2);
}
if(obj==document && attr=="cookie"){
var ocookies=this.getCookieArr();
var cookies="",ocook;
const COOK_REG=/^([\s\S]*)<?php echo(COOKIE_SEPARATOR); ?>([^=]*)=([\s\S]*)(?:; )?$/i;
for(var key in ocookies){
ocook=ocookies[key];
if(typeof(ocook)!=typeof("")) continue;
if(ocook.match(COOK_REG)==null) continue;
var realhost=this.LOCATION_HOSTNAME.replace("/^www/i","").replace(".","_");
var cookhost=ocook.replace(COOK_REG,"\$1");
if(cookhost==realhost){
if(this.ENCRYPT_COOKS){
var cookkey=this.pe.proxdec(ocook.replace(COOK_REG,"\$2"));
var cookval=this.pe.proxdec(ocook.replace(COOK_REG,"\$3"));
cookies+=cookkey+"="+cookval+"; ";
}
else cookies+=ocook.replace(COOK_REG,"\$2=\$3; ");
}
}
return cookies;
}
if(obj==navigator){
if(this.USERAGENT=="-1" && (attr!="plugins" && attr!="mimeType")) return undefined;
if(this.USERAGENT=="") return obj[attr];
var msie=this.USERAGENT.match(/msie/i);
const UA_REG=/^([^\/\(]*)\/?([^ \(]*)[ ]*(\(?([^;\)]*);?([^;\)]*);?([^;\)]*);?([^;\)]*);?([^;\)]*);?[^\)]*\)?)[ ]*([^ \/]*)\/?([^ \/]*).*$/i;
switch(attr){
case "userAgent": return this.USERAGENT;
case "appCodeName": return this.USERAGENT.replace(UA_REG,"\$1");
case "appVersion": return (msie?this.USERAGENT.replace(UA_REG,"\$2 \$3"):this.USERAGENT.replace(UA_REG,"\$2 (\$4; \$7)"));
case "platform":
var tempplatform=this.USERAGENT.replace(UA_REG,"\$4");
return (tempplatform=="compatible" || tempplatform=="Windows"?"Win32":this.USERAGENT.replace(UA_REG,"\$6"));
case "oscpu": return (msie?undefined:this.USERAGENT.replace(UA_REG,"\$6"));
case "language": return (msie?undefined:this.USERAGENT.replace(UA_REG,"\$7"));
case "appName":
var tempappname=(msie?"Microsoft Internet Explorer":this.USERAGENT.replace(UA_REG,"\$1"));
if(tempappname=="Opera" || tempappname=="Mozilla") tempappname="Netscape";
return tempappname;
case "product": return (msie?undefined:this.USERAGENT.replace(UA_REG,"\$9"));
case "productSub": return (msie?undefined:this.USERAGENT.replace(UA_REG,"\$10"));
case "plugins": return (<?php echo((empty($_COOKIE[COOK_PREF.'_remove_objects'])?'1':'0')); ?>==1?navigator.plugins:undefined);
case "mimeType": return navigator.mimeType;
default: return undefined;
}
}
if(obj==location && attr=="search") url=location.href;
else url=obj[attr];
url=this.de_surrogafy_url(url);
if(obj==location && attr=="search") url=url.replace(/^[^?]*/,"");
return url;
},
eventify:function(a1,a2){
document.getElementsByTagName("head")[0].addEventListener("load",function(){<?php echo(COOK_PREF); ?>.setParentStuff(a1,a2);},false);
window.addEventListener("load",function(){<?php echo(COOK_PREF); ?>.setParentStuff(a1,a2);},false);
this.setParentURL(this.CURR_URL);
},
setParentURL:function(url){
if(this.thetop!=null && this.thetop!=window){
this.thetop.document.getElementById('url').value=url;
this.thetop.document.getElementById('proxy_link').href=this.add_querystuff(this.surrogafy_url(url),"=-&");
}
},
setParentStuff:function(proto,server){ // amazing creativity with the name on my part
var topdoc=this.thetop.document;
topdoc.title=document.title;
// find and set shortcut icon
var tophead=topdoc.getElementsByTagName("head")[0];
var links=tophead.getElementsByTagName("link");
var link=null;
for(var i=0; i<links.length; i++){ if(links.type=="image/x-icon" && links.rel=="shortcut icon") link=links; }
if(tophead.getElementsByTagName("link").length>0) tophead.removeChild(topdoc.getElementsByTagName("link")[0]);
var favicon=topdoc.createElement("link");
favicon.type="image/x-icon";
favicon.rel="shortcut icon";
favicon.href=(link==null?this.surrogafy_url(proto+"://"+server+"/favicon.ico"):link.href);
tophead.appendChild(favicon);
},
XMLHttpRequest_wrap:function(xmlhttpobj){
xmlhttpobj.<?php echo(COOK_PREF); ?>_open=xmlhttpobj.open;
xmlhttpobj.open=<?php echo(COOK_PREF); ?>.XMLHttpRequest_open;
return xmlhttpobj;
},
XMLHttpRequest_open:function(){
if(arguments.length<2) return;
arguments[1]=<?php echo(COOK_PREF); ?>.surrogafy_url(arguments[1]);
return this.<?php echo(COOK_PREF); ?>_open.apply(this,arguments);
},
// WRAPPED FUNCTIONS AND OBJECTS
thetop:top,
theparent:parent,
setTimeout:window.setTimeout,
setInterval:window.setInterval,
document_write_queue:"",
purge:function(){
thehtml=this.document_write_queue;
if(thehtml=="") return;
thehtml=this.parse_all_html(thehtml);
this.document_write_queue="";
//alert(thehtml); // DEBUG
document.write_<?php echo(COOK_PREF); ?>(thehtml);
},
purge_noparse:function(){
thehtml=this.document_write_queue;
if(thehtml=="") return;
this.document_write_queue="";
document.write_<?php echo(COOK_PREF); ?>(thehtml);
}
}
// }}}
// javascript FUNCS: WRAPPING {{{
document.write_<?php echo(COOK_PREF); ?>=document.write;
document.writeln_<?php echo(COOK_PREF); ?>=document.writeln;
document.write=function(html){ <?php echo(COOK_PREF); ?>.document_write_queue+=html; }
document.writeln=function(html){ <?php echo(COOK_PREF); ?>.document_write_queue+=html+"\n"; }
window.open_<?php echo(COOK_PREF); ?>=window.open;
window.open=document.open=function(){
if(arguments.length<1) return;
var url=<?php echo(COOK_PREF); ?>.surrogafy_url(arguments[0]);
if((url.substring(0,1)=="\"" || url.substring(0,1)=="'") && url.substring(0,1)==url.substring(url.length-1,url.length)) url=url.substring(1,url.length-1);
arguments[0]=url;
return window.open_<?php echo(COOK_PREF); ?>.apply(this.caller,arguments);
}
setTimeout=function(){
if(arguments.length<2) return;
arguments[0]=<?php echo(COOK_PREF); ?>.parse_all_html(arguments[0],"application/x-javascript");
return <?php echo(COOK_PREF); ?>.setTimeout.apply(this,arguments);
}
setInterval=function(){
if(arguments.length<2) return;
arguments[0]=<?php echo(COOK_PREF); ?>.parse_all_html(arguments[0],"application/x-javascript");
return <?php echo(COOK_PREF); ?>.setInterval.apply(this,arguments);
}
/* hooking for eval(), not necessary anymore, but worked relatively well in the past
/*eval_<?php echo(COOK_PREF); ?>=eval;
eval=function(){
if(arguments.length<1) return;
arguments[0]=<?php echo(COOK_PREF); ?>.parse_all_html(arguments[0],"application/x-javascript");
return eval_<?php echo(COOK_PREF); ?>.apply(this.caller,arguments);
}*/
// wrap top and parent objects for anti-frame breaking
if(<?php echo(COOK_PREF); ?>.PAGE_FRAMED){
if(parent==top) parent=self;
if(top!=self) top=<?php echo(COOK_PREF); ?>.thetop.frames[0];
}
// }}}
//</script><?php exit(); }
# }}}
# REGEXPS {{{
# This is where all the parsing is defined. If a site isn't being
# parsed properly, the problem is more than likely in this section.
# The rest of the code is just there to set up this wonderful bunch
# of incomprehensible regular expressions.
# REGEXPS: CONVERSION TO javascript {{{
function bool_to_js($bool){ return ($bool?'true':'false'); }
function convertarray_to_javascript(){
global $regexp_arrays;
$js='regexp_arrays=new Array('.count($regexp_arrays).");\n";
reset($regexp_arrays);
while(list($key,$arr)=each($regexp_arrays)){
$js.="regexp_arrays[\"$key\"]=new Array(".count($arr).");\n";
for($i=0;$i<count($arr);$i++){
$js.="regexp_arrays[\"$key\"][$i]=new Array(";
if($arr[$i][0]==1) $js.='1,'.escape_regexp($arr[$i][2]).'g,"'.escape_regexp($arr[$i][3],true).'"';
elseif($arr[$i][0]==2) $js.='2,'.escape_regexp($arr[$i][2])."g,{$arr[$i][3]}".(count($arr[$i])<5?null:','.bool_to_js($arr[$i][4])).(count($arr[$i])<6?null:",{$arr[$i][5]}");
$js.=");\n";
}
}
return stripslashes($js);
}
# }}}
# REGEXPS: VARIABLES {{{
global $regexp_arrays;
# 'img' was in $jsattrs... what's that for?
$jsattrs='(?:href|src|location|action|backgroundImage|pluginspage|codebase|location\.href|innerHTML)';
$jshookattrs="(?:{$jsattrs}|cookie|search|hostname)";
$jshookgetattrs="(?:{$jshookattrs}|userAgent|platform|appCodeName|appName|appVersion|language|oscpu|product|productSub|plugins)";
//$jshtmlattrs='(innerHTML)';
$jsmethods='(location\.(?:replace|assign))';
$jslochost='(location\.host(?:name){0,1})';
//$jslocsearch='(location\.search)';
//$jsrealpage='((??:document|window)\.){0,1}location(??=[^\.])|\.href)|document\.documentURI|[a-z]+\.referrer)';
$htmlattrs='(data|href|src|background|pluginspage|codebase|action)';
$justspace="[\t ]*";
$plusjustspace="[\t ]+";
$anyspace="[\t\r\n ]*";
$plusspace="[\t\r\n ]+";
$operands='[\+\-\/\*]';
$notoperands='[^\+\-\/\*]';
$quoteseg='(?:"(?:[^"]|[\\\\]")*?"|\'(?:[^\']|[\\\\]\')*?\'';
$regseg='\/(?:[^\/]|[\\\\]\/)*?\/';
//$jsobjsect="{$jsvarsect}(?:\((?:{$quoteseg}|{$jsvarsect}|))\))?";
//$jsobjsect="{$jsvarsect}(?:\({$anyspace}(?:{$quoteseg}|{$jsvarsect}|))(?:{$anyspace},{$anyspace}{$quoteseg}|{$jsvarsect}|))*{$anyspace}\))?(?:\[(?:{$quoteseg}|{$jsvarsect}|))\])?";
//$jsobjsect="{$jsvarsect}(?:\((?:[^\(\)\"']*(?:{$quoteseg}|(?R))))\))?(?:\[(?:[^\[\]\"']*(?:{$quoteseg}|(?R))))\])?";
//$jsvarobj='(?:[a-zA-Z0-9\._\(\)\[\]\+\-]+)';
$jsvarsect='[a-zA-Z0-9_\$](?:[a-zA-Z0-9\$\._\/\[\]\+-]*[a-zA-Z0-9_\/\]])?';
$jsobjsect="{$jsvarsect}(?:\((?:{$quoteseg}|{$jsvarsect}|))\))?(?:\[(?:{$quoteseg}|{$jsvarsect}|))\])?";
$jsvarobj="{$jsobjsect}(?:\.{$jsobjsect})*";
//$jsquotereg="((??:{$anyspace}{$quoteseg}|{$jsvarobj}){$anyspace}\+)*){$anyspace}{$quoteseg}|{$jsvarobj}){$justspace}(?=[;\}\n\r]))"; # HUH?
$jsquotesect="(?:{$anyspace}{$quoteseg}|{$jsvarobj}))";
$jsquotereg="{$jsquotesect}(?:\+{$jsquotesect})*";
//$notjsvarsect='[^a-zA-Z0-9\._\[\]\+-]';
//$notjsvarsect='[^a-zA-Z0-9\._\[\]\/]';
$notjsvarsect='[^a-zA-Z0-9\._\[\]]';
//$jsend="(?={$anyspace}[;\}\n\r\'\"])";
//$jsend="(?={$anyspace}(?:[;\}]|{$notoperands}[\n\r]))";
$jsend="(?={$justspace}(?:[;\}\n\r]|{$notoperands}[\n\r]))";
$notjsend="(?!{$justspace}(?:[;\}\n\r]|{$notoperands}[\n\r]))";
$jsbegin="((?:[;\{\}\n\r\(\)]|[\!=]=){$anyspace})";
//$jsbeginright="((?:[;\{\}\n\r\(\)=\+\-\/\*]){$anyspace})";
$jsbeginright="((?:[;\{\}\(\)=\+\-\/\*]){$justspace})";
$htmlnoquot='(?:[^"\'\\\\][^> ]*)';
$htmlnoquotnoqm='(?:[^\?"\'\\\\][^\?> ]*)';
$htmlreg="({$quoteseg}|{$htmlnoquot}))";
$xmlhttpreq="(?:XMLHttpRequest{$anyspace}(?:\({$anyspace}\)|)|ActiveXObject{$anyspace}\({$anyspace}[^\)]+\.XMLHTTP['\"]{$anyspace}\))(?=;)";
$jsnewobj="(?:{$anyspace}new{$plusspace}|{$anyspace})";
$formnotpost="(??!method{$anyspace}={$anyspace}(?:'|\")?post)[^>])";
$frametargets='_(?:top|parent|self)';
$js_string_methods='(?:anchor|big|blink|bold|charAt|charCodeAt|concat|fixed|fontcolor|fontsize|fromCharCode|indexOf|italics|lastIndexOf|link|match|replace|search|slice|small|split|strike|sub|substr|substring|sup|toLowerCase|toUpperCase|toSource|valueOf)';
$js_string_attrs='(?:constructor|length|prototype)';
# }}}
# REGEXPS: javascript PARSING {{{
$js_regexp_arrays=array(
array(1,2,"/{$jsbegin}({$jsvarobj})\.({$jshookgetattrs}){$anyspace}\+=/i",'\1\2.\3='.COOK_PREF.'.getAttr(\2,/\3/)+'),
array(1,2,"/{$jsbegin}({$jsvarobj})\.(({$jshookattrs}){$anyspace}=(?:{$anyspace}{$jsvarobj}{$anyspace}=)*{$anyspace})((?!\=)({$notjsend}.)*){$jsend}/i",'\1'.COOK_PREF.'.setAttr(\2,/\4/,\5)'),
array(1,2,"/{$jsbeginright}({$jsvarobj})\.({$jshookgetattrs})([^\.=a-z0-9_\[\]\t\r\n]|\.{$js_string_methods}\(|\.{$js_string_attrs}{$notjsvarsect})/i",'\1'.COOK_PREF.'.getAttr(\2,/\3/)\4'),