IP.Board Tutorials

How to null your 4.0 beta/pre-release

Submitted by Mr_Joker, , Thread ID: 1303

Thread Closed
15-02-2015, 04:36 AM
#1
So, as some of you might know I had a few files up in the downloads for nulled copies of the coming IPS4!

So basically, all you have to do is replace your init.php file contents with this (the whole thing):

PHP Code:
<?php
/**
 * @briefInitiates IPS Social Suite constants, autoloader and exception handler
 * @author<a href='http://www.invisionpower.com'>Invision Power Services, Inc.</a>
 * @copyright(c) 2001 - SVN_YYYY Invision Power Services, Inc.
 * @licensehttp://www.invisionpower.com/legal/standards/
 * @packageIPS Social Suite
 * @since18 Feb 2013
 * @versionSVN_VERSION_NUMBER
 */
 
namespace IPS;
 
/**
 * Class to contain IPS Social Suite autoloader and exception handler
 */
class IPS
{
/**
 * @briefClasses that have hooks on
 */
public static $hooks = array();

/**
 * @briefUnique key for this suite (used in http requests to defy browser caching)
 */
public static $suiteUniqueKey NULL;

/**
 * @briefDeveloper Code to be added to all namespaces
 */
private static $inDevCode '';

/**
 * @briefNamespaces developer code has been imported to
 */
private static $inDevCodeImportedTo = array();

/**
 * @briefVendors to use PSR-0 autoloader for
 */
public static $PSR0Namespaces = array();
 
/**
 * Get default constants
 *
 * @returnarray
 */
public static function defaultConstants()
{
return array(
'CP_DIRECTORY'=> 'admin',
'IN_DEV'=> FALSE,
'DEV_USE_WHOOPS'=> TRUE,
'DEV_USE_FURL_CACHE'=> FALSE,
'DEBUG_JS'=> FALSE,
'DEV_DEBUG_JS'=> TRUE,
'DEV_DEBUG_CSS'=> FALSE,
'DEV_DEBUG_TEMPLATES'=> FALSE,
'IPS_FOLDER_PERMISSION'=> 0777,
'FOLDER_PERMISSION_NO_WRITE'=> 0755,
'IPS_FILE_PERMISSION'=> 0644,
'ROOT_PATH'=> __DIR__,
'NO_WRITES'=> FALSE,
'LOG_METHOD'=> '{}',
'STORE_METHOD'=> 'Database',
'STORE_CONFIG'=> '{}',
'CACHE_METHOD'=> 'None',
'CACHE_CONFIG'=> '{}',
'EMAIL_DEBUG_PATH'=> NULL,
'BULK_MAILS_PER_CYCLE'=> 0,
'JAVA_PATH'=> "",
'ERROR_PAGE'=> 'error.html',
'QUERY_LOG'=> FALSE,
'ENFORCE_ACCESS'=> FALSE,
'THUMBNAIL_SIZE'=> '500x500',
'COOKIE_DOMAIN'=> NULL,
'COOKIE_PREFIX'=> NULL,
'CONNECT_NOSYNC_NAMES'=> FALSE,
'BYPASS_CURL'=> FALSE,
'NEXUS_TEST_GATEWAYS'=> FALSE,
'UPGRADE_MANUAL_THRESHOLD'=> 1000000,
'UPGRADE_LARGE_THRESHOLD'=> 150000,
'SKIP_SERVER_PORT'=> FALSE,
'HTMLENTITIES'=> ( version_comparephpversion(), '5.4.0''<' ) ) ? ENT_IGNORE ENT_DISALLOWED,
'SUITE_UNIQUE_KEY'=> md5( ( ( isset( $_SERVER['SERVER_NAME'] ) ) ? $_SERVER['SERVER_NAME'] : '' ) . '$Rev: 3023$'),
'USE_DEVELOPMENT_BUILDS'=> FALSE,
'DEV_WHOOPS_EDITOR'=> NULL,
);
}

/**
 * Initiate IPS Social Suite constants, autoloader and exception handler
 *
 * @returnvoid
 */
public static function init()
{
/* Set timezone */
date_default_timezone_set'UTC' );
 
/* Set default MB internal encoding */
mb_internal_encoding('UTF-8');
 
/* Define the IN_IPB constant - this needs to be in the global namespace for backwards compatibility */
define'IN_IPB'TRUE );

/* Load constants.php */
if( file_exists__DIR__ '/constants.php' ) )
{
@include_once( 
__DIR__ '/constants.php' );
}

/* Import and set defaults */
foreach ( static::defaultConstants() as $k => $v )
{
if( 
defined$k ) )
{
define'IPS\\' $kconstant$k ) );
}
else
{
define'IPS\\' $k$v );
}
}

/* Load developer code */
if( IN_DEV and file_existsROOT_PATH '/dev/function_overrides.php' ) )
{
self::$inDevCode file_get_contentsROOT_PATH '/dev/function_overrides.php' );
}

/* Set autoloader */
spl_autoload_register'\IPS\IPS::autoloader'truetrue );

/* Set error handlers */
if ( \IPS\IN_DEV AND \IPS\DEV_USE_WHOOPS and file_existsROOT_PATH '/dev/Whoops/Run.php' ) )
{
self::$PSR0Namespaces['Whoops'] = ROOT_PATH '/dev/Whoops';
$whoops = new \Whoops\Run;
$ipsHandler = new \Whoops\Handler\IPSHandler;
if ( \
IPS\DEV_WHOOPS_EDITOR )
{
$ipsHandler->setEditor( \IPS\DEV_WHOOPS_EDITOR );
}
$whoops->pushHandler$ipsHandler );
$jsonHandler = new \Whoops\Handler\JsonResponseHandler;
$jsonHandler->onlyForAjaxRequeststrue );
$whoops->pushHandler$jsonHandler );
$whoops->register();
}
else
{
set_error_handler'\IPS\IPS::errorHandler' );
set_exception_handler'\IPS\IPS::exceptionHandler' );
}
 
/* Init hooks */
if ( file_exists( \IPS\ROOT_PATH '/plugins/hooks.txt' ) )
{
$mtime filemtime( \IPS\ROOT_PATH '/plugins/hooks.txt' );

$encrypted file_get_contents( \IPS\ROOT_PATH '/plugins/hooks.txt' );
$decrypted '';
for ( 
$i 0$i mb_strlen$encrypted ); $i++ )
{
$decrypted .= chrordmb_substr$encrypted$i) ) - mb_substr$mtime, ( $i mb_strlen$mtime ) ) - 1) );
}

if ( !( 
self::$hooks = @json_decode$decryptedTRUE ) ) )
{
self::$hooks = array();
}
}
}
 
/**
 * Autoloader
 *
 * @paramstring$classnameClass to load
 * @returnvoid
 */
public static function autoloader$classname )
{
/* Separate by namespace */
$bits explode'\\'ltrim$classname'\\' ) );

/* If this doesn't belong to us, try a PSR-0 loader or ignore it */
$vendorName array_shift$bits );
if( 
$vendorName !== 'IPS' )
{
if ( isset( 
self::$PSR0Namespaces$vendorName ] ) )
{
@include_once( 
self::$PSR0Namespaces$vendorName ] . DIRECTORY_SEPARATOR implodeDIRECTORY_SEPARATOR$bits ) . '.php' );
}

return;
}

/* Work out what namespace we're in */
$class array_pop$bits );
$namespace = empty( $bits ) ? 'IPS' : ( 'IPS\\' implode'\\'$bits ) );
$inDevCode '';

/* We only need to load the file if we don't have the underscore-prefixed one */
if( !class_exists"{$namespace}\\_{$class}"FALSE ) )
{
/* Locate file */
$path ROOT_PATH '/';
$sourcesDirSet FALSE;
foreach ( 
array_merge$bits, array( $class ) ) as $i => $bit )
{
if( 
ctype_lower$bit ) === TRUE )
{
if( 
$i === )
{
$path .= 'applications/';
}
else
{
$sourcesDirSet TRUE;
}
}
elseif ( 
$i === and $bit === 'Upgrade' )
{
$bit mb_strtolower$bit );
}
elseif( 
$sourcesDirSet === FALSE )
{
if( 
$i === )
{
$path .= 'system/';
}
elseif ( 
$i === and $bit === 'Application' )
{
// do nothing
}
else
{
$path .= 'sources/';
}
$sourcesDirSet TRUE;
}

$path .= "{$bit}/";
}

/* Load it */
$path = \substr$path0, -) . '.php';
if( !
file_exists$path ) )
{
$path = \substr$path0, -) . \substr$path, \strrpos$path'/' ) );
if ( !
file_exists$path ) )
{
return 
FALSE;
}
}
require_once( 
$path );

/* Is it an interface? */
if ( interface_exists"{$namespace}\\{$class}"FALSE ) )
{
return;
}

/* Doesn't exist? */
if( !class_exists"{$namespace}\\_{$class}"FALSE ) )
{
trigger_error"Class {$classname} could not be loaded. Ensure it has been properly prefixed with an underscore and is in the correct namespace."E_USER_ERROR );
}

/* Stuff for developer mode */
if( IN_DEV )
{
try
{
$reflection = new \ReflectionClass"{$namespace}\\_{$class});

/* Import our code to override forbidden functions */
if( !in_array( \strtolower$namespace ), self::$inDevCodeImportedTo ) )
{
$inDevCode self::$inDevCode;
self::$inDevCodeImportedTo[] = \strtolower$namespace );
}

/* Any classes which extend a core PHP class are exempt from our rules */
$parent $reflection->getParentClass();
if( 
$parent === false or \substr$parent->getNamespaceName(), 0) === 'IPS' )
{
/* Make sure it's name follows our standards */
if( !preg_match'/^_[A-Z]+$/i'$reflection->getShortName() ) )
{
trigger_error"{$classname} does not follow our naming conventions. Please rename using only alphabetic characters and PascalCase. (PHP Coding Standards: Classes.5)"E_USER_ERROR );
}

/* Loop methods */
$hasNonAbstract FALSE;
$hasNonStatic FALSE;
foreach ( 
$reflection->getMethods() as $method )
{
if ( \
substr$method->getDeclaringClass()->getName(), 0) === 'IPS' )
{
/* Make sure it's not private */
if( $method->isPrivate() )
{
trigger_error"{$classname}::{$method->name} is declared as private. In order to ensure that hooks are able to work freely, please use protected instead. (PHP Coding Standards: Functions and Methods.4)"E_USER_ERROR );
}

/* We need to know for later if we have non-abstract methods */
if( !$method->isAbstract() )
{
$hasNonAbstract TRUE;
}

/* We need to know for later if we have non-static methods */
if( !$method->isStatic() )
{
$hasNonStatic TRUE;
}

/* Make sure the name follows our conventions */
if(
!
preg_match'/^_?[a-z][A-Za-z0-9]*$/'$method->name )// Normal pattern most methods should match
and
!
preg_match'/^get_/i'$method->name )// get_* is allowed
and
!
preg_match'/^set_/i'$method->name )// set_* is allowed
and
!
preg_match'/^parse_/i'$method->name )// parse_* is allowed
and
!
preg_match'/^setBitwise_/i'$method->name )// set_Bitiwse_* is allowed
and
!
in_array$method->name, array(// PHP's magic methods are allowed (except __sleep and __wakeup as we don't allow serializing)
'__construct',
'__destruct',
'__call',
'__callStatic',
'__get',
'__set',
'__isset',
'__unset',
'__toString',
'__invoke',
'__set_state',
'__clone',
) )
) {
trigger_error"{$classname}::{$method->name} does not follow our naming conventions. Please rename using only alphabetic characters and camelCase. (PHP Coding Standards: Functions and Methods.1-3)"E_USER_ERROR );
}
}
}

/* Loop properties */
foreach ( $reflection->getProperties() as $property )
{
$hasNonAbstract TRUE;

/* Make sure it's not private */
if( $property->isPrivate() )
{
trigger_error"{$classname}::\${$property->name} is declared as private. In order to ensure that hooks are able to work freely, please use protected instead. (PHP Coding Standards: Properties and Variables.3)"E_USER_ERROR );
}

/* Make sure the name follows our conventions */
if( !preg_match'/^_?[a-z][A-Za-z]*$/'$property->name ) )
{
trigger_error"{$classname}::\${$property->name} does not follow our naming conventions. Please rename using only alphabetic characters and camelCase. (PHP Coding Standards: Properties and Variables.1-2)"E_USER_ERROR );
}
}

/* Check an interface wouldn't be more appropriate */
if( !$hasNonAbstract )
{
trigger_error"You do not have any non-abstract methods in {$classname}. Please use an interface instead. (PHP Coding Standards: Classes.7)"E_USER_ERROR );
}

/* Check we have at least one non-static method (unless this class is abstract or has a parent) */
elseif( !$reflection->isAbstract() and $reflection->getParentClass() === FALSE and !$hasNonStatic and $reflection->getNamespacename() !== 'IPS\Output\Plugin' and !in_array'extensions'$bits ) and !in_array'templateplugins'$bits ) )
{
trigger_error"You do not have any methods in {$classname} which are not static. Please refactor. (PHP Coding Standards: Functions and Methods.6)"E_USER_ERROR );
}
}
}
catch ( \
Exception $e ) {}
}
}

/* Monkey Patch */
self::monkeyPatch$namespace$class$inDevCode );
}

/**
 * Monkey Patch
 *
 * @paramstring$namespaceThe namespace
 * @paramstring$finalClassThe final class name we want to be able to use (without namespace)
 * @paramstring$extraCodeAny additonal code to import before the class is defined
 * @returnnull
 */
public static function monkeyPatch$namespace$finalClass$extraCode '' )
{
$realClass "_{$finalClass}";
if( isset( 
self::$hooks"\\{$namespace}\\{$finalClass}] ) )
{
foreach ( 
self::$hooks"\\{$namespace}\\{$finalClass}] as $id => $data )
{
$contents "namespace {$namespace}; "str_replace'_HOOK_CLASS_'$realClassfile_get_contentsROOT_PATH '/' $data['file'] ) );
if( @eval( 
$contents ) !== FALSE )
{
$realClass $data['class'];
}
}
}

$reflection = new \ReflectionClass"{$namespace}\\_{$finalClass});
if( eval( 
"namespace {$namespace}; "$extraCode . ( $reflection->isAbstract() ? 'abstract' '' )." class {$finalClass} extends {$realClass} {}" ) === FALSE )
{
trigger_error"There was an error initiating the class {$namespace}\\{$finalClass}."E_USER_ERROR );
}
}

/**
 * Error Handler
 *
 * @paramint$errnoError number
 * @paramerrstr$errstrError message
 * @paramstring$errfileFile
 * @paramint$errlineLine
 * @paramarray$traceBacktract
 * @returnvoid
 */
public static function errorHandler$errno$errstr$errfile$errline$trace=NULL )
{
/* We don't care about these in production */
if ( in_array$errno, array( E_NOTICEE_DEPRECATED ) ) )
{
return;
}
 
/* This means the error suppressor was used, so we should ignore any non-fatal errors */
if ( error_reporting() === )
{
return 
false;
}

throw new \
ErrorException$errstr$errno0$errfile$errline );
}

/**
 * Exception Handler
 *
 * @param\Exception$exceptionException class
 * @returnvoid
 */
public static function exceptionHandler$exception )
{
try
{
\
IPS\Output::i()->error'generic_error'"EX{$exception->getCode()}"500"<pre>{$exception}</pre>" );
}
catch ( \
Exception $e )
{
if( isset( 
$_SERVER['SERVER_PROTOCOL'] ) and \strstr$_SERVER['SERVER_PROTOCOL'], '/1.0' ) !== false )
{
header"HTTP/1.0 500 Internal Server Error" );
}
else
{
header"HTTP/1.1 500 Internal Server Error" );
}

require \
IPS\ROOT_PATH '/' . \IPS\ERROR_PAGE;
}
exit;
}

/**
 * Get license key data
 *
 * @returnarray|NULL
 */
public static function licenseKey()
{
/* Get the cached value */
$cached NULL;
if ( isset( \
IPS\Data\Store::i()->license_data ) )
{
$cached = \IPS\Data\Store::i()->license_data;
 
/* If it's younger than 21 days, just use that */
if ( $cached['fetched'] > ( time() - 1814400 ) )
{
return 
$cached['data'];
}
}

$response'{"key": "ABCDE-FGHIJ-KLMNO-PQRST-UVWXY", "url": "http:\/\/' $_SERVER['HTTP_HOST'] . '", "test_url": "http:\/\/localhost", "edition": "Complete", "cloud": true, "active": true, "expires": "2020-12-31 00:00:00", "products": { "spam": true, "forums": true, "calendar": true, "pages": true, "ccs": true, "board": true, "blog": true, "gallery": true, "downloads": true, "content": true, "nexus": true, "copyright": true }, "chat_limit": 999, "support": "Premium"}';
$responsejson_decode$response TRUE );

/* Update the license info in the store */
\IPS\Data\Store::i()->license_data= array( 'fetched' => time(), 'data' => $response );
 
/* Return */
return $response;
}

/**
 * Check license key
 *
 * @paramstringThe license key
 * @paramstringThe site URL
 * @returnvoid
 * @throws\DomainException
 */
public static function checkLicenseKey$val$url )
{
$response'{"key": "ABCDE-FGHIJ-KLMNO-PQRST-UVWXY", "url": "http:\/\/' $_SERVER['HTTP_HOST'] . '", "test_url": "http:\/\/localhost", "edition": "Complete", "cloud": true, "active": true, "expires": "2020-12-31 00:00:00", "products": { "spam": true, "forums": true, "calendar": true, "pages": true, "ccs": true, "board": true, "blog": true, "gallery": true, "downloads": true, "content": true, "nexus": true, "copyright": true }, "chat_limit": 999, "support": "Premium"}';
$responsejson_decode$response TRUE );
}
}
 
/* Init */
IPS::init(); 


Then, upload it and you are set to go. When prompted for a license, enter whatever you want. And this works, simply because your board will think you are using the pre-release key and never check if it's real. And as long as IPS doesn't update this file, this should work on any and all releases for IPS4.

Enjoy! If theres any problem let me know below i'll help you :8

RE: How to null your 4.0 beta/pre-release

#2
init.php is the only file that must be modified.. any other files modified of the instalation kit mean a non original version!

RE: How to null your 4.0 beta/pre-release

#3
When you edit init.php you just bypass license key request and you do not nulling IPS.
Nulling means removing any callback from scrips.If you want to null, you must remove callback from files like spam.php and etc.

RE: How to null your 4.0 beta/pre-release

#4
as long as you can bypass the licence key request, the script works ok.. things with callbacks are relative as importance.

RE: How to null your 4.0 beta/pre-release

#5
Will this get you removed from your host? Because I got removed from Nulled versions of IPB.
Username owns me and all

RE: How to null your 4.0 beta/pre-release

#6
08-05-2015, 08:36 PM
thehunters Wrote:
init.php is the only file that must be modified.. any other files modified of the instalation kit mean a non original version!

This was for the pre-relases, and betas. More stuff has changed, and this no longer applies. As it was stated above, removing links back to IPS and what not, that would allow them to know where you are hosting, that would be nulling. Also, you can easily bypass the license in the retail versions, but it will throw up sections of warnings. Those can be removed by removing the <div> </div> tags in certain areas of the theme.xml file.

@thehunters, what you are referring to is the md5 checks that allow IPS to know the files have been modified. As stated on their Release Notes under version 4.0.3 section....
"The support tool in the AdminCP will now do MD5 checksum on all PHP files on the system. This allows the system to detect any modified PHP files which is useful both for support and for security. The master checksum values are fetched remotely from IPS to ensure the list is not tampered with locally. "
This is handled in a file called support.php under /applications/core/modules/admin/support/support.php under an area that says
* Step 2: Self Service - md5sum Checker.
You could use the support.php file from 4.0.2 to take care of this minor problem :8

RE: How to null your 4.0 beta/pre-release

#7
11-05-2015, 12:01 AM
guntherbb Wrote:
08-05-2015, 08:36 PM
thehunters Wrote:
init.php is the only file that must be modified.. any other files modified of the instalation kit mean a non original version!

This was for the pre-relases, and betas. More stuff has changed, and this no longer applies. As it was stated above, removing links back to IPS and what not, that would allow them to know where you are hosting, that would be nulling. Also, you can easily bypass the license in the retail versions, but it will throw up sections of warnings. Those can be removed by removing the <div> </div> tags in certain areas of the theme.xml file.

@thehunters, what you are referring to is the md5 checks that allow IPS to know the files have been modified. As stated on their Release Notes under version 4.0.3 section....
"The support tool in the AdminCP will now do MD5 checksum on all PHP files on the system. This allows the system to detect any modified PHP files which is useful both for support and for security. The master checksum values are fetched remotely from IPS to ensure the list is not tampered with locally. "
This is handled in a file called support.php under /applications/core/modules/admin/support/support.php under an area that says
* Step 2: Self Service - md5sum Checker.
You could use the support.php file from 4.0.2 to take care of this minor problem :8

You should re-open a thread with thoose infos.

RE: How to null your 4.0 beta/pre-release

#8
Sorry, but I've saw a lot of scripts, let's say "nulled"...... , but inside you can find some kind of drawing in licence file, or a fake copyright in footer. I don't like that. I like clean codes, free.. nulled.. anyway.. but clean.

RE: How to null your 4.0 beta/pre-release

OP
#9
10-05-2015, 09:09 PM
Mafia Wrote:
Will this get you removed from your host? Because I got removed from Nulled versions of IPB.

What do you mean removed? If someone reports you to IPB that you are using a Nulled Version of IPB software theres a chance IPB can take you down :/

RE: How to null your 4.0 beta/pre-release

This post was last modified: 12-05-2015, 08:09 PM by Oxygen
#10
12-05-2015, 06:58 PM
Mr_Joker Wrote:
10-05-2015, 09:09 PM
Mafia Wrote:
Will this get you removed from your host? Because I got removed from Nulled versions of IPB.

What do you mean removed? If someone reports you to IPB that you are using a Nulled Version of IPB software theres a chance IPB can take you down :/

IPS won't do shit if your community is new or it does not have a lot of members, reason being it would cost them more to taken down your website which is not worth it. If you have a lot content and members and IPS see that you can afford the licence, they will take down your site, unless you use offshore hosting, then IPS can't do shitall.
[Image: UeTXrZ5.png]

Users browsing this thread: 4 Guest(s)