Created
August 31, 2013 07:11
-
-
Save Noxwizard/6396665 to your computer and use it in GitHub Desktop.
ASP viewstate token parser
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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