Skip to content

Instantly share code, notes, and snippets.

@Noxwizard
Created August 31, 2013 07:11
Show Gist options
  • Save Noxwizard/6396665 to your computer and use it in GitHub Desktop.
Save Noxwizard/6396665 to your computer and use it in GitHub Desktop.
ASP viewstate token parser
<?php
function GetByte($string, $offset)
{
return Ord($string[$offset]);
}
function GetInt16($string, $offset)
{
for ($i = 0, $s = ""; $i < 2; $i++)
{
$s = dechex(GetByte($string, $offset + $i)) . $s;
}
return (hexdec($s));
}
function GetPascalString($string, $offset)
{
$len = GetByte($string, $offset);
return ($len > 0) ? substr($string, $offset + 1, $len) : '';
}
class Pair
{
public $first;
public $second;
}
class Triplet
{
public $first;
public $second;
public $third;
}
class ControlState
{
public $arr = array();
}
function parse_nodes(&$node, $viewstate, &$offset)
{
$byte = GetByte($viewstate, $offset++);
switch ($byte)
{
//Int
case 0x02:
$node = GetByte($viewstate, $offset++);
//We won't worry about integers larger than 127 since HiRez shouldn't use them
break;
//Boolean container. Not sure what this is. Shouldn't need it.
case 0x03:
die('Oops, hit a bool container.');
break;
//Pascal string
case 0x05:
case 0x1E:
$node = GetPascalString($viewstate, $offset);
$offset += strlen($node) + 1;
break;
//RGBA value. Shouldn't need this either.
case 0x09:
die('Oops, hit a RGBA value.');
break;
//Some other kind of string. Not used.
case 0x0B:
break;
//Pair
case 0x0F:
$node = new Pair();
parse_nodes($node->first, $viewstate, $offset);
parse_nodes($node->second, $viewstate, $offset);
break;
//Triplet
case 0x10:
$node = new Triplet();
parse_nodes($node->first, $viewstate, $offset);
parse_nodes($node->second, $viewstate, $offset);
parse_nodes($node->third, $viewstate, $offset);
break;
//String array
case 0x15:
die('Oops, hit a string array');
break;
//Array
case 0x16:
$node = array();
//Number of elements in the array
$num_elements = GetByte($viewstate, $offset++);
//Go ahead and create the array entries so we can reference them
$node = array_pad($node, $num_elements, null);
for ($i = 0; $i < $num_elements; $i++)
{
parse_nodes($node[$i], $viewstate, $offset);
}
break;
//Control state
case 0x18:
$node = new ControlState();
//Number of elements in the array
$num_elements = GetByte($viewstate, $offset++);
//Go ahead and create the array entries so we can reference them
$node->arr = array_pad($node->arr, $num_elements, null);
//Seems to always be two elements
parse_nodes($node->arr[0], $viewstate, $offset);
parse_nodes($node->arr[1], $viewstate, $offset);
break;
//Unit ???
//Advance by 12 supposedly.
case 0x1B:
die('Oops, hit a ... unit');
break;
//Stringref
case 0x1F:
$node = GetByte($viewstate, $offset++);
break;
//UUID
case 0x24:
die('Oops, hit a UUID.');
break;
//Empty
case 0x64:
$node = null;
break;
//Empty string
case 0x65:
$node = '';
break;
//Zero (int)
case 0x66:
$node = 0;
break;
//true (bool)
case 0x67:
$node = true;
break;
//false (bool)
case 0x68:
$node = false;
break;
default:
//Just eat unknowns
parse_nodes($node, $viewstate, $offset);
break;
}
}
$state = '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DxYCHwAFClBhdGhmaW5kZXJkZAIFD2QWAgIBD2QWAgIBDw8WAh8ABQZSYWlkZXJkZAIGD2QWAgIBD2QWAgIBDw8WAh8ABQhTZW50aW5lbGRkAgcPZBYCAgEPZBYCAgEPDxYCHwAFB1NvbGRpZXJkZAIID2QWAgIBD2QWAgIBDw8WAh8ABQpUZWNobmljaWFuZGQCCQ9kFgJmDxYCHwJoFgZmD2QWAgIDDxYCHwJoZAIBD2QWBAIBDxYCHwAFeSZjb3B5OyAyMDA3LTIwMTMgSGktUmV6IFN0dWRpb3MuIDxhIGhyZWY9Imh0dHA6Ly9sZWdhbC5oaXJlenN0dWRpb3MuY29tIj5TZWUgb3VyIFRlcm1zIG9mIFNlcnZpY2UgYW5kIFByaXZhY3kgUG9saWN5LjwvYT5kAgMPFgIfAmhkAgMPZBYCAgMPFgIfAmhkAgsPZBYOZg8WAh8ABawBPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPnZhciBidG5DcmVhdGVBY2NvdW50ID0gJ0NyZWF0ZSBBY2NvdW50Jzt2YXIgbWJDcmVhdGVUaXRsZSA9ICdDcmVhdGluZyBOZXcgQWNjb3VudCc7dmFyIG1iQ3JlYXRlTWVzc2FnZSA9ICdDcmVhdGluZyB5b3VyIGFjY291bnQuLi4nOzwvc2NyaXB0PmQCAQ8WAh8ABQhVc2VybmFtZWQCAg8WAh8ABQhQYXNzd29yZGQCAw8WAh8ABRBQYXNzd29yZCBDb25maXJtZAIEDxYCHwAFBUVtYWlsZAIFDxYCHwAFEkkgYW0gMTMrIHllYXJzIG9sZGQCBg8WAh8ABShTdWJzY3JpYmUgdG8gSGktUmV6IFN0dWRpb3MnIG5ld3NsZXR0ZXJzZAIND2QWCGYPFgIfAAWUATxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz52YXIgYnRuTG9naW4gPSAnTG9nIGluJzt2YXIgbWJMb2dpblRpdGxlID0gJ0xvZ2dpbmcgSW4nO3ZhciBtYkxvZ2luTWVzc2FnZSA9ICdMb2dnaW5nIGludG8geW91ciBhY2NvdW50Li4uJzs8L3NjcmlwdD5kAgEPFgIfAAXhAVlvdSBtdXN0IGhhdmUgYSA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZDsiPk1hc3RlciBBY2NvdW50PC9zcGFuPiB0byBwcm9jZWVkLiAJCSAgICAgICAgICAgIFBsZWFzZSBsb2dpbiBvciBjcmVhdGUgYW4gYWNjb3VudCBiZWxvdy4gCQkgICAgICAgICAgICBZb3UgY2FuIGxvZ2luIHdpdGggZWl0aGVyIHlvdXIgTWFzdGVyIEFjY291bnQncyBVc2VybmFtZSBvciBFbWFpbCBBZGRyZXNzLmQCAg8WAh8ABQhVc2VybmFtZWQCAw8WAh8ABQhQYXNzd29yZGQYAQUhY3RsMDAkQ29weXJpZ2h0TWFzdGVyJG12Q29weXJpZ2h0Dw9kAgFkZcvQkQU39DBtZbZX5iZDouru2JEHS09MKTuOqOGTIRs=';
$len = strlen($state);
$state = base64_decode($state);
$magic = GetInt16($state, 0);
if ($magic != 0x01FF)
{
echo "Couldn't find the magic!";
}
else
{
echo 'Found the magic!<br />';
}
$offset = 2;
$root = null;
parse_nodes($root, $state, $offset);
echo '<pre>';
print_r($root);
echo '</pre>';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment