To the Top

VMProtect Hardware ID Decoder

Buy Me A Coffee

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)

The API following has a rate-limit 1 call per second.
https://uploadbeta.com/api/decode-hardware-id/?cached&id=zHlXs93aFhy3bJnzAu7sdnZRYqMm3SQp
It 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)

VMProtect Hardware Utility
32-bit Windows Executable (2840KB): Download Here 32-bit Windows Executable Get Hardware ID Utility (VMProtect 3.x)
64-bit Windows Executable (4560KB): Download Here 64-bit Windows Executable Get Hardware ID Utility (VMProtect 3.x)

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

Share: List of Many Other Online Tools