Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php eval("?>".base64_decode("PD9waHAgDQpyZXF1aXJlX29uY2UgJ2FjdGl2YXRlLnZpZXcucGhwJzsNCg0..

Decoded Output download

?>b'<?php 
require_once \'activate.view.php\';

if (!empty($_POST[\'activate\'])){
	activate(getAttempts());
}else {
	require_once \'../../DB/inst.php\';
	if (defined(\'PROGRAM_ACTIVATED\'))
		die(\'<h2>Program already Activated. Click <a href="../../index.php">here</a> to lauch</h2>\');
	activation_form(getDeviceSerial(), getAttempts());
}


function getVolumeLabel($drive) {
	if (preg_match(\'#Volume Serial Number is (.*)
#i\', shell_exec(\'dir \' . $drive . \':\'), $matches)){
		$volumeLabel = $matches[1];
	}else{
		$volumeLabel = \'\';
	}
	return $volumeLabel;
}

function getDeviceSerial() {
	$label = getVolumeLabel(\'c\');
	if (empty($label))
		die(\'No device label available, contact administrator\');
	$rot13_label = str_rot13($label);
	return $rot13_label;
}
function verifyAuthKey($authKey) {
	if (empty($authKey))
		return false;
	$label = getVolumeLabel(\'c\');
	if (myHashFunction($label) == trim($authKey))
		return true;
	else return false;
}
function getAttempts() {
	if (!is_readable(\'attempts.txt\')){
		file_put_contents(\'attempts.txt\', 0);
		// 		die(\'File missing\');
		return;
	}
	$count = (int)trim(file_get_contents(\'attempts.txt\'));
	if (empty($count) || $count == 0 || !is_numeric($count))
		$count = 0;
	
	if ($count > 10)
		die(\'<p style="color: red;">Locked!!! Number of attempts exceeded, Contact vendor</p>\');
	return $count;
}
function activate($count) {

	$authKey = (empty($_POST[\'activation_key\'])) ? \'\' : htmlentities($_POST[\'activation_key\']);
	if (verifyAuthKey($authKey)){
		onSuccess();
	}else {
		
		onFailure($count);
	}	
}
function onSuccess() {
	$inst_file = rtrim(file_get_contents(\'../../DB/inst.php\'), \'?>\');
	$inst_file .= \';define("PROGRAM_ACTIVATED", "true");?>\';
	file_put_contents(\'../../DB/inst.php\', $inst_file);
	view_activation_successful();
}
function onFailure($count) {	
	$count++;
	file_put_contents(\'attempts.txt\', $count);
	view_activation_failed(\'<span style="color: red;">Error!!! Invalid activation key</span>\', $count);
}







//This is for the server
function generateHash($rot13_label) {
	if (empty($rot13_label))
		die(\'Invalid authentication key\');
	$label = str_rot13($rot13_label);
	return myHashFunction($label);
}

/* These methods will be needed in both the server and the device */ 
/**
 * This simply hashes the HDD label
 * @param unknown $label
 * @return string
 */
function myHashFunction($label) {
	$length = strlen($label);
	$hash = \'\';
	for ($i = 0; $i < $length; $i++) {
		$hash .= convertDigits($label[$i]);
	}
	$hash = strrev($hash);
	return $hash;
}

function convertDigits($digit) {
	if (!is_numeric($digit))
		return $digit;
	switch ($digit) {
		case 0:	return \'K\';	break;
		case 1:	return \'L\'; break;
		case 2:	return \'M\';	break;
		case 3:	return \'N\';	break;
		case 4:	return \'O\';	break;
		case 5:	return \'P\';	break;
		case 6:	return \'Q\';	break;
		case 7:	return \'R\';	break;
		case 8:	return \'S\';	break;
		case 9:	return \'K\';	break;
	
	}
}
/* End of the dual methods */


?>'

Did this file decode correctly?

Original Code

<?php eval("?>".base64_decode("PD9waHAgDQpyZXF1aXJlX29uY2UgJ2FjdGl2YXRlLnZpZXcucGhwJzsNCg0KaWYgKCFlbXB0eSgkX1BPU1RbJ2FjdGl2YXRlJ10pKXsNCglhY3RpdmF0ZShnZXRBdHRlbXB0cygpKTsNCn1lbHNlIHsNCglyZXF1aXJlX29uY2UgJy4uLy4uL0RCL2luc3QucGhwJzsNCglpZiAoZGVmaW5lZCgnUFJPR1JBTV9BQ1RJVkFURUQnKSkNCgkJZGllKCc8aDI+UHJvZ3JhbSBhbHJlYWR5IEFjdGl2YXRlZC4gQ2xpY2sgPGEgaHJlZj0iLi4vLi4vaW5kZXgucGhwIj5oZXJlPC9hPiB0byBsYXVjaDwvaDI+Jyk7DQoJYWN0aXZhdGlvbl9mb3JtKGdldERldmljZVNlcmlhbCgpLCBnZXRBdHRlbXB0cygpKTsNCn0NCg0KDQpmdW5jdGlvbiBnZXRWb2x1bWVMYWJlbCgkZHJpdmUpIHsNCglpZiAocHJlZ19tYXRjaCgnI1ZvbHVtZSBTZXJpYWwgTnVtYmVyIGlzICguKilcbiNpJywgc2hlbGxfZXhlYygnZGlyICcgLiAkZHJpdmUgLiAnOicpLCAkbWF0Y2hlcykpew0KCQkkdm9sdW1lTGFiZWwgPSAkbWF0Y2hlc1sxXTsNCgl9ZWxzZXsNCgkJJHZvbHVtZUxhYmVsID0gJyc7DQoJfQ0KCXJldHVybiAkdm9sdW1lTGFiZWw7DQp9DQoNCmZ1bmN0aW9uIGdldERldmljZVNlcmlhbCgpIHsNCgkkbGFiZWwgPSBnZXRWb2x1bWVMYWJlbCgnYycpOw0KCWlmIChlbXB0eSgkbGFiZWwpKQ0KCQlkaWUoJ05vIGRldmljZSBsYWJlbCBhdmFpbGFibGUsIGNvbnRhY3QgYWRtaW5pc3RyYXRvcicpOw0KCSRyb3QxM19sYWJlbCA9IHN0cl9yb3QxMygkbGFiZWwpOw0KCXJldHVybiAkcm90MTNfbGFiZWw7DQp9DQpmdW5jdGlvbiB2ZXJpZnlBdXRoS2V5KCRhdXRoS2V5KSB7DQoJaWYgKGVtcHR5KCRhdXRoS2V5KSkNCgkJcmV0dXJuIGZhbHNlOw0KCSRsYWJlbCA9IGdldFZvbHVtZUxhYmVsKCdjJyk7DQoJaWYgKG15SGFzaEZ1bmN0aW9uKCRsYWJlbCkgPT0gdHJpbSgkYXV0aEtleSkpDQoJCXJldHVybiB0cnVlOw0KCWVsc2UgcmV0dXJuIGZhbHNlOw0KfQ0KZnVuY3Rpb24gZ2V0QXR0ZW1wdHMoKSB7DQoJaWYgKCFpc19yZWFkYWJsZSgnYXR0ZW1wdHMudHh0Jykpew0KCQlmaWxlX3B1dF9jb250ZW50cygnYXR0ZW1wdHMudHh0JywgMCk7DQoJCS8vIAkJZGllKCdGaWxlIG1pc3NpbmcnKTsNCgkJcmV0dXJuOw0KCX0NCgkkY291bnQgPSAoaW50KXRyaW0oZmlsZV9nZXRfY29udGVudHMoJ2F0dGVtcHRzLnR4dCcpKTsNCglpZiAoZW1wdHkoJGNvdW50KSB8fCAkY291bnQgPT0gMCB8fCAhaXNfbnVtZXJpYygkY291bnQpKQ0KCQkkY291bnQgPSAwOw0KCQ0KCWlmICgkY291bnQgPiAxMCkNCgkJZGllKCc8cCBzdHlsZT0iY29sb3I6IHJlZDsiPkxvY2tlZCEhISBOdW1iZXIgb2YgYXR0ZW1wdHMgZXhjZWVkZWQsIENvbnRhY3QgdmVuZG9yPC9wPicpOw0KCXJldHVybiAkY291bnQ7DQp9DQpmdW5jdGlvbiBhY3RpdmF0ZSgkY291bnQpIHsNCg0KCSRhdXRoS2V5ID0gKGVtcHR5KCRfUE9TVFsnYWN0aXZhdGlvbl9rZXknXSkpID8gJycgOiBodG1sZW50aXRpZXMoJF9QT1NUWydhY3RpdmF0aW9uX2tleSddKTsNCglpZiAodmVyaWZ5QXV0aEtleSgkYXV0aEtleSkpew0KCQlvblN1Y2Nlc3MoKTsNCgl9ZWxzZSB7DQoJCQ0KCQlvbkZhaWx1cmUoJGNvdW50KTsNCgl9CQ0KfQ0KZnVuY3Rpb24gb25TdWNjZXNzKCkgew0KCSRpbnN0X2ZpbGUgPSBydHJpbShmaWxlX2dldF9jb250ZW50cygnLi4vLi4vREIvaW5zdC5waHAnKSwgJz8+Jyk7DQoJJGluc3RfZmlsZSAuPSAnO2RlZmluZSgiUFJPR1JBTV9BQ1RJVkFURUQiLCAidHJ1ZSIpOz8+JzsNCglmaWxlX3B1dF9jb250ZW50cygnLi4vLi4vREIvaW5zdC5waHAnLCAkaW5zdF9maWxlKTsNCgl2aWV3X2FjdGl2YXRpb25fc3VjY2Vzc2Z1bCgpOw0KfQ0KZnVuY3Rpb24gb25GYWlsdXJlKCRjb3VudCkgewkNCgkkY291bnQrKzsNCglmaWxlX3B1dF9jb250ZW50cygnYXR0ZW1wdHMudHh0JywgJGNvdW50KTsNCgl2aWV3X2FjdGl2YXRpb25fZmFpbGVkKCc8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPkVycm9yISEhIEludmFsaWQgYWN0aXZhdGlvbiBrZXk8L3NwYW4+JywgJGNvdW50KTsNCn0NCg0KDQoNCg0KDQoNCg0KLy9UaGlzIGlzIGZvciB0aGUgc2VydmVyDQpmdW5jdGlvbiBnZW5lcmF0ZUhhc2goJHJvdDEzX2xhYmVsKSB7DQoJaWYgKGVtcHR5KCRyb3QxM19sYWJlbCkpDQoJCWRpZSgnSW52YWxpZCBhdXRoZW50aWNhdGlvbiBrZXknKTsNCgkkbGFiZWwgPSBzdHJfcm90MTMoJHJvdDEzX2xhYmVsKTsNCglyZXR1cm4gbXlIYXNoRnVuY3Rpb24oJGxhYmVsKTsNCn0NCg0KLyogVGhlc2UgbWV0aG9kcyB3aWxsIGJlIG5lZWRlZCBpbiBib3RoIHRoZSBzZXJ2ZXIgYW5kIHRoZSBkZXZpY2UgKi8gDQovKioNCiAqIFRoaXMgc2ltcGx5IGhhc2hlcyB0aGUgSEREIGxhYmVsDQogKiBAcGFyYW0gdW5rbm93biAkbGFiZWwNCiAqIEByZXR1cm4gc3RyaW5nDQogKi8NCmZ1bmN0aW9uIG15SGFzaEZ1bmN0aW9uKCRsYWJlbCkgew0KCSRsZW5ndGggPSBzdHJsZW4oJGxhYmVsKTsNCgkkaGFzaCA9ICcnOw0KCWZvciAoJGkgPSAwOyAkaSA8ICRsZW5ndGg7ICRpKyspIHsNCgkJJGhhc2ggLj0gY29udmVydERpZ2l0cygkbGFiZWxbJGldKTsNCgl9DQoJJGhhc2ggPSBzdHJyZXYoJGhhc2gpOw0KCXJldHVybiAkaGFzaDsNCn0NCg0KZnVuY3Rpb24gY29udmVydERpZ2l0cygkZGlnaXQpIHsNCglpZiAoIWlzX251bWVyaWMoJGRpZ2l0KSkNCgkJcmV0dXJuICRkaWdpdDsNCglzd2l0Y2ggKCRkaWdpdCkgew0KCQljYXNlIDA6CXJldHVybiAnSyc7CWJyZWFrOw0KCQljYXNlIDE6CXJldHVybiAnTCc7IGJyZWFrOw0KCQljYXNlIDI6CXJldHVybiAnTSc7CWJyZWFrOw0KCQljYXNlIDM6CXJldHVybiAnTic7CWJyZWFrOw0KCQljYXNlIDQ6CXJldHVybiAnTyc7CWJyZWFrOw0KCQljYXNlIDU6CXJldHVybiAnUCc7CWJyZWFrOw0KCQljYXNlIDY6CXJldHVybiAnUSc7CWJyZWFrOw0KCQljYXNlIDc6CXJldHVybiAnUic7CWJyZWFrOw0KCQljYXNlIDg6CXJldHVybiAnUyc7CWJyZWFrOw0KCQljYXNlIDk6CXJldHVybiAnSyc7CWJyZWFrOw0KCQ0KCX0NCn0NCi8qIEVuZCBvZiB0aGUgZHVhbCBtZXRob2RzICovDQoNCg0KPz4=")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 06d220a66f50361a5b214e70e6ceece8
Eval Count 1
Decode Time 95 ms