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).