VMProtect Hardware ID Decoder
This page implements a Javascript Ajax utility that calls the API to decode a hardware ID by VMProtect. Note: The hardware ID changes if you have added or removed a ethernet adapter.
API (Application Programming Interface)
https://uploadbeta.com/api/decode-hardware-id/?cached&id=zHlXs93aFhy3bJnzAu7sdnZRYqMm3SQpIt will return JSON-encoded data:
[{"CPU":"B35779CC","HOST":"1C16DADC","HDD":"F3996CB4","ETHERNET0":"76ECEE00","ETHERNET1":"A3625174","ETHERNET2":"2924DD24"}]
Parameter id is the base64-encoded Hardware ID.
If $_GET parameter id is not specified, it will try the $_POST variable id instead.
curl -X POST https://uploadbeta.com/api/decode-hardware-id/ -d "id=aDBUvGX+SZeXe0ZRkrOD2g=="
Principle
For more information, please read this post. How to Decode Hardware ID by VMProtect (using VBScript)?Get Hardware ID Utility (VMProtect 3.x)
32-bit Windows Executable (2840KB): Download Here
64-bit Windows Executable (4560KB): Download Here
Warning: You might get security warnings about the executables. But trust me, they are safe. They just show your HardwareID and do nothing else.
Complete API Source Code (PHP)
$s = '';
if (isset($_GET['id'])) {
$s = $_GET['id'];
}
function DecodeHWID($id) {
$id = base64_decode(trim($id));
$sz = strlen($id);
if(($sz == 0) || ($sz % 4 != 0))
return false;
$r = array();
$ethernet_cnt = 0;
for ($i = 0; $i < $sz; $i += 4) {
$t1 = ord(substr($id, $i + 0, 1));
$t2 = ord(substr($id, $i + 1, 1));
$t3 = ord(substr($id, $i + 2, 1));
$t4 = ord(substr($id, $i + 3, 1));
$val = strtoupper(dechex($t4 * (2 << 23) + $t3 * (2 << 15) + $t2 * (2 << 7) + ($t1 & 0xFC)));
switch ($t1 & 3) {
case 0: $r['CPU'] = $val; break;
case 1: $r['HOST'] = $val; break;
case 2: $r['ETHERNET' . $ethernet_cnt++] = $val; break;
case 3: $r['HDD'] = $val; break;
}
}
return $r;
}
function multiexplode ($delimiters, $string) {
$ready = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return $launch;
}
$x = multiexplode(array("\n", "\r", " ", ';', '.', ':', chr(13), chr(10)), $s);
$data = array();
foreach ($x as $y) {
$data[] = DecodeHWID($y);
}
header("Access-Control-Allow-Origin: *");
header('Content-Type: application/json');
die(json_encode($data));
Update
VMProtect updates the hardware ID algorithm from time to time, and according to the forum, here is their new version:
function DecodeHWID2($id) {
$id = base64_decode(trim($id));
$sz = strlen($id);
$r = array();
$ethernet_cnt = 0;
for ($i = 0; $i < $sz; $i += 4) {
$t1 = ord(substr($id, $i + 0, 1));
$t2 = ord(substr($id, $i + 1, 1));
$t3 = ord(substr($id, $i + 2, 1));
$t4 = ord(substr($id, $i + 3, 1));
$val = ($t4 << 24) | ($t3 << 16) | ($t2 << 8) | $t1;
$ids = strtoupper(dechex($val & (~3)));
switch ($val & 3) {
case 0: $r['CPU'] = $ids; break;
case 1: $r['HOST'] = $ids; break;
case 2: $r['ETHERNET' . $ethernet_cnt++] = $ids; break;
case 3: $r['HDD'] = $ids; break;
}
}
return $r;
}
So, as of this, the API has been modified to run this version if the first version is not successful (return false).
